Могу ли я массово обновить определения конвейеров сборки VSTS?

Я сейчас перехожу с локального экземпляра TFS на VSTS. У меня есть много конвейеров сборки (определений сборки vNext), которые были перенесены в VSTS, но теперь мне нужно обновить их все, чтобы использовать определенный агент.

Нет опции, доступной в пользовательском интерфейсе или в клиенте командной строки.

Мне не хватает доступной мне опции, чтобы я мог обновить их все сразу?


3
427
1

Ответ:

Основываясь на работе по миграции, которую я проделал с Мануэлем (упоминается в сообщении, о котором упоминает Джесси), я сделал несколько доступных сценариев, которые получают очереди TFS, а затем используют их для обновления определений сборки VSTS.

  • Чтение-QueuesFromTfs.ps1
  • Ремонт-BuildDefinitions.ps1

Для обоих сценариев требуются параметры PersonalAccesToken: один - PAT для целевой учетной записи VSTS, а второй - для среды TFS.

Первый скрипт поможет вам получить файл queues.json, содержащий все очереди TFS. Второй сценарий выполняет итерацию проектов VSTS, на которые вы нацеливаетесь для обновления определений сборки. Скрипты не требуют пояснений.

# Get all queues and based on previous names get the id's
    (Invoke-RestMethod `
            -Uri "https://$account.visualstudio.com/$_/_apis/distributedtask/queues" `
            -Headers @{Authorization = "Basic $auth"; Accept = "application/json; api-version=3.2-preview" } `
            -Method Get `
            -ContentType "application/json" -Verbose).value | % { $vstsqueues[$_.name] = $_.id }

    # get all the builds
    $builds = (Invoke-RestMethod `
            -Uri "https://$account.visualstudio.com/$_/_apis/build/definitions" `
            -Headers @{Authorization = "Basic $auth"; Accept = "application/json; api-version=4.1-preview.6" } `
            -Method Get `
            -ContentType "application/json").value

        # get the full build definition
        $build = Invoke-RestMethod `
            -Uri $_.url `
            -Headers @{Authorization = "Basic $auth"; Accept = "application/json; api-version=4.1-preview.6" } `
            -Method Get `
            -ContentType "application/json" 

        # get queue
        $queuename = $tfsqueues[$_.queue.id]
        Write-Output "    queue name: $queuename"

        # update build
        $build.queue = @{ id = $vstsqueues[$queuename] }

        # post changes
        Invoke-RestMethod `
            -Uri $_.url `
            -Headers @{Authorization = "Basic $auth"; Accept = "application/json; api-version=4.1-preview.6" } `
            -Method Put `
            -ContentType "application/json" `
            -Body ($build | ConvertTo-Json -Depth 100 -Compress) | Out-Null
    }
}

Описано в этом файле. https://github.com/JasperGilhuis/VSTS-RestAPI/blob/master/README.md#update-vsts-build-definitions-based-on-tfs-queues

Посмотрите, что папка Builds в репозитории https://github.com/JasperGilhuis/VSTS-RestAPI/tree/master/Builds