首页 > 解决方案 > 如何通过 VSTS REST API 创建构建定义

问题描述

情况:

我目前正在通过 bitbucket -> vsts -> azure 自动化 CI/CD 配置。

我的理想结果是能够将我的配置值复制粘贴(或手动输入)到它们各自的控制台程序中,并让应用程序配置整个 CI/CD 考验,而无需单击所有 Web 界面。现在可以在 Bitbucket 和 Azure 中使用,但通过 REST API 创建 VSTS CI/CD 配置被证明是困难的。

Azure 资源和 Bitbucket 配置当前是通过与 REST API 对话的简单 .NET 控制台应用程序创建的。基本上将所有值(天蓝色输入值/ bitbucket 输入值)复制粘贴(或手动输入)到控制台应用程序中,它将在 5 分钟内配置所有内容。


问题:

现在我面临着尝试在 VSTS 中自动化构建配置和发布配置的困难部分。Microsoft Docs对 VSTS 客户端库的文档不是很好。

老实说,我不知道如何通过 API 或客户端库创建构建定义。

如您所见,构建定义的最重要属性是只读的。

如何通过 REST API 创建构建定义?是否有更好的 VSTS 替代方案可以让我这样做?


标签: c#continuous-integrationazure-pipelinesbuild-definitionazure-devops-rest-api

解决方案


REST API创建构建定义的格式如下:

POST https://{account}.visualstudio.com/{project}/_apis/build/definitions?api-version=5.0-preview.6

应用程序/json 示例:

{
    "process": {
        "phases": [
            {
                "steps": [

                ],
                "name": "Phase 1",
                "refName": "Phase_1",
                "condition": "succeeded()",
                "target": {
                    "executionOptions": {
                        "type": 0
                    },
                    "allowScriptsAuthAccessOption": false,
                    "type": 1
                },
                "jobAuthorizationScope": "projectCollection",
                "jobCancelTimeoutInMinutes": 1
            }
        ],
        "type": 1
    },
    "repository": {
        "properties": {
            "cleanOptions": "0",
            "labelSources": "0",
            "labelSourcesFormat": "$(build.buildNumber)",
            "reportBuildStatus": "true",
            "gitLfsSupport": "false",
            "skipSyncSource": "false",
            "checkoutNestedSubmodules": "false",
            "fetchDepth": "0"
        },
        "id": "4ba24767-e5a6-4987-80cc-ebaeca01fdbc",
        "type": "TfsGit",
        "name": "product1",
        "url": "https://marinaliu.visualstudio.com/Git2/_git/product1",
        "defaultBranch": "refs/heads/master",
        "clean": "false",
        "checkoutSubmodules": false
    },
    "processParameters": {},
    "drafts": [],
    "queue": {
        "id": 324,
        "name": "ownPC",
        "pool": {
            "id": 23,
            "name": "ownPC"
        }
    },
    "name": "definitionCreatedByRESTAPI",
    "type": "build",
    "queueStatus": "enabled"
}

要在 C# 中使用 REST API,您可以进行如下转换:

var personalaccesstoken = "PAT";
var base64Token = Convert.ToBase64String(Encoding.ASCII.GetBytes($":{personalaccesstoken}"));
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", base64Token);

var requestMessage = new HttpRequestMessage(HttpMethod.Post, "https://account.visualstudio.com/project/_apis/build/definitions?api-version=5.0-preview.6");
requestMessage.Content = new StringContent("{\"process\": {  \"phases\": [{\"steps\": [], \"name\": \"Phase 1\",\"refName\": \"Phase_1\",\"condition\": \"succeeded()\",\"target\": { \"executionOptions\": { \"type\": 0 },\"allowScriptsAuthAccessOption\": false,  \"type\": 1  },  \"jobAuthorizationScope\": \"projectCollection\", \"jobCancelTimeoutInMinutes\": 1 }],\"type\": 1  }, \"repository\": { \"properties\": { \"cleanOptions\": \"0\",\"labelSources\": \"0\",\"labelSourcesFormat\": \"$(build.buildNumber)\", \"reportBuildStatus\": \"true\",\"gitLfsSupport\": \"false\", \"skipSyncSource\": \"false\",\"checkoutNestedSubmodules\": \"false\", \"fetchDepth\": \"0\"},\"id\": \"4ba24767-e5a6-4987-80cc-ebaeca01fdbc\",\"type\": \"TfsGit\",\"name\": \"product1\", \"url\": \"https://marinaliu.visualstudio.com/Git2/_git/product1\", \"defaultBranch\": \"refs/heads/master\",  \"clean\": \"false\",\"checkoutSubmodules\": false },\"processParameters\": {}, \"drafts\": [],\"queue\": { \"id\": 324,  \"name\": \"ownPC\",\"pool\": {\"id\": 23, \"name\": \"ownPC\"}}, \"name\": \"definitionCreatedByRESTAPI\", \"type\": \"build\",\"queueStatus\": \"enabled\"}", Encoding.UTF8, "application/json");

HttpResponseMessage response = client.SendAsync(requestMessage).Result;
response.EnsureSuccessStatusCode();

通过参考博客以编程方式访问 TFS/VSTS 2017以获取 C# 程序。


推荐阅读