Как создать определения сборки через VSTS REST API - PullRequest
0 голосов
/ 11 мая 2018

Ситуация:

В настоящее время я работаю над автоматизацией конфигурации CI / CD с помощью bitbucket -> vsts -> azure.

Мой идеальный результат - возможность скопировать вставку (или вручнуювведите) значения моей конфигурации в соответствующие консольные программы и заставьте приложения настраивать все испытания CI / CD без необходимости проходить через все веб-интерфейсы.Теперь это возможно в Bitbucket и Azure, но создание конфигураций CST / CD VSTS через REST API оказывается трудным.

ресурсы Azure и конфигурации Bitbucket в настоящее время создаются с помощью простого .NETконсольное приложение, которое общается с REST API.В основном, скопируйте (или введите вручную) все значения ( значения ввода Azure / значения ввода Bitbucket ) в консольное приложение, и оно настроит все в течение 5 минут.


Проблема:

Теперь я столкнулся с более сложной задачей - попытаться автоматизировать конфигурации сборки и выпустить конфигурации в VSTS.Документы Microsoft не очень хороши в документации клиентских библиотек VSTS .

Я, честно говоря, в растерянности от того, как могу создать определение сборки через APIили клиентская библиотека.

  • BuildHttpClient имеет три метода, с которыми я могу работать:

    public virtual Task<BuildDefinition> CreateDefinitionAsync(BuildDefinition definition, Guid project, int? definitionToCloneId = null, int? definitionToCloneRevision = null, object userState = null, CancellationToken cancellationToken = default(CancellationToken));   
    public virtual Task<BuildDefinition> CreateDefinitionAsync(BuildDefinition definition, int? definitionToCloneId = null, int? definitionToCloneRevision = null, object userState = null, CancellationToken cancellationToken = default(CancellationToken));    
    public virtual Task<BuildDefinition> CreateDefinitionAsync(BuildDefinition definition, string project, int? definitionToCloneId = null, int? definitionToCloneRevision = null, object userState = null, CancellationToken cancellationToken = default(CancellationToken));
    
  • BuildDefinition имеет следующие свойства.

    namespace Microsoft.TeamFoundation.Build.WebApi    
    { 
    [DataContract]    
    public class BuildDefinition : BuildDefinitionReference
        {
            public BuildDefinition();
    
            public List<string> Tags { get; }
            public PropertiesCollection Properties { get; }
            public List<RetentionPolicy> RetentionRules { get; }
            public List<Demand> Demands { get; }
            public IDictionary<string, BuildDefinitionVariable> Variables { get; }
            public List<BuildTrigger> Triggers { get; }
            public ProcessParameters ProcessParameters { get; set; }
            public BuildRepository Repository { get; set; }
            public List<BuildOption> Options { get; }
            public List<BuildDefinitionStep> Steps { get; }
            public bool BadgeEnabled { get; set; }
            public int JobTimeoutInMinutes { get; set; }
            public BuildAuthorizationScope JobAuthorizationScope { get; set; }
            public string DropLocation { get; set; }
            public string Description { get; set; }
            public string Comment { get; set; }
            public string BuildNumberFormat { get; set; }
            public Build LatestBuild { get; }
            public Build LatestCompletedBuild { get; }
        }
     }
    

Как видите, наиболее важные свойства определения сборки доступны только для чтения.

Как мне создать определение сборки через REST API?Есть ли лучшие альтернативы VSTS, которые позволят мне это сделать?


1 Ответ

0 голосов
/ 14 мая 2018

Формат API REST для создать определение сборки , как показано ниже:

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

application / 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"
}

Чтобы использовать RESTAPI в C # вы можете конвертировать следующим образом:

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 #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...