У меня проблемы с пониманием того, что мне нужно сделать... но
У меня есть конвейер сборки... ниже мои базовые скрипты для тестирования.
Я хочу иметь возможность добавлять/обновлять параметры через API и PowerShell. Я не уверен, что это лучший способ добиться этого, но, похоже, он работает хорошо, когда я вручную добавляю свои параметры. Когда я передаю параметр, он не сохраняется. Буду признателен за любую помощь... даже если я отправлю свой запрос где-нибудь еще.
Спасибо
сценарий конвейера
variables:
patchgroup: test
jobs:
- template: patch-template.yml
parameters:
patchgroup: $(patchgroup)
sqlservers:
- sqlserver: name: ""
файл шаблона патча
parameters:
sqlservers: {}
patchgroup: ''
jobs:
- ${{ each sqlserver in parameters.sqlservers }}:
- template: patch-tasks.yml
parameters:
sqlserver: ${{ sqlserver.name }}
patchgroup: ${{ parameters.patchgroup }}
исправление задач параметры: sqlсервер: '' группа патчей: ''
jobs:
- job:
displayName: '${{ parameters.sqlserver }}--set-up-stuff'
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
Write-Host "Patchgroup '${{ parameters.patchgroup }}'"
Write-Host "sqlserver '${{ parameters.sqlserver }}'"
сценарий powershell
$defurl = "$collectionurl/$project/_apis/build/builds?api-version=5.0"
$json = '{"variables": "{\"patchgroup\": \"xyxyxyxyx\"}","definition": {"id": "194"}}'
#$json = '{"parameters":"{\"sqlservers\": \"\"{\"sqlserver\": \"servername\"}\"\"}","definition":{"id":"194"}}'
$updatedef = Invoke-RestMethod -Uri $defurl -Method POST -Body $json -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
Извините, я попробовал несколько вещей и изменил их на "переменные" $json = '{"parameters": "{\"patchgroup\": \"xyxyxyxyx\"}","definition": {"id": " 194"}}'
Согласно вашему коду, я провел несколько тестов.
Я заметил, что значение вашего параметра не устанавливается при запуске конвейера, но должно быть напрямую жестко закодировано в файле Yaml.
Поэтому, когда вы запускаете конвейер, вы не можете передавать параметры в исходный код yaml через Rest API.
Чтобы решить эту проблему, вы можете попробовать использовать параметр для передачи значения параметра.
Обновлять:
Вы можете проверить мой новый пример:
patch-tasks.yml
jobs:
- job:
displayName: '${{ parameters.sqlserver }}--set-up-stuff'
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
Write-Host "Patchgroup '${{ parameters.patchgroup }}'"
Write-Host "sqlserver '${{ parameters.sqlserver }}'"
патч-template.yml
parameters:
- name: sqlservers
type: object
default: []
- name: patchgroup
type: string
default: ''
jobs:
- ${{ each sqlserver in parameters.sqlservers }}:
- template: patch-tasks.yml
parameters:
sqlserver: ${{ sqlserver }}
patchgroup: ${{ parameters.patchgroup }}
сценарий конвейера
trigger: none
parameters:
- name: InstanceArgs
type: object
default: []
variables:
patchgroup: test
jobs:
- template: patch-template.yml
parameters:
patchgroup: $(patchgroup)
sqlservers: ${{ parameters.InstanceArgs }}
Когда вы запускаете конвейер, вы можете увидеть поле ввода.
В этом случае вы можете использовать Rest API для передачи значений параметров при запуске конвейера. Вы можете использовать этот Rest API: Runs — Run Pipeline
Пример сценария PowerShell:
$token = "PAT"
$url = "https://dev.azure.com/{OrganizationNmae}/{ProjectName}/_apis/pipelines/{PipelineId}/runs?api-version=5.1-preview"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$JSON = @'
{
"resources": {
"repositories": {
"self": {
"refName": "refs/heads/BranchName"
}
}
},
"templateParameters": {
"InstanceArgs":"[1,2,3]"
},
}
'@
$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Post -Body $JSON -ContentType application/json
Спасибо, я попробую. Проблема, которую я вижу в этом, заключается в том, что я не буду знать, сколько я хотел бы передать ... это может быть 1 или более 5. Возможно, мне придется пересмотреть этот код и попытаться ввести цикл.
Привет @Kez. Я также рассматривал эту ситуацию, поэтому дополнительно оптимизировал код. Пожалуйста, проверьте мое обновление. Я устанавливаю параметры как тип объекта. затем вы можете ввести любое количество параметров. Это похоже на петлю. Если это может удовлетворить ваши требования, вы можете рассмотреть возможность принятия его в качестве ответа. Спасибо
Привет @Kez. Не могли бы вы проверить, соответствует ли обновленный ответ вашим требованиям. Не стесняйтесь, дайте мне знать, если ответ может помочь вам.
Привет, Кевин. этот ответ великолепен .. спасибо ... и он определенно был бы победителем, если бы я мог заставить его работать только из API. Если я урежу код, он запустится (т. е. только azure-pipelines.yml и удалит код шаблона), но в противном случае я не могу запустить его с помощью API. Я пытался выяснить, какая часть кода вызывает проблему, но безуспешно.
Привет @Kez. Не могли бы вы поделиться некоторой информацией о сообщении об ошибке и вашем образце? Тогда я помогу вам решить этот вопрос. Вы используете образец в ответе?
извинения. не использовал часть вашего кода, как вы предложили. это прекрасно работает. спасибо
Привет, Кевин. Раньше я никогда не использовал этот вариант совместной работы (поэтому еще не знаю протокола), и поскольку вы знакомы с тем, чего я пытаюсь достичь. Если это лучше, я регистрирую новый вопрос, я тоже счастлив. Когда я запускаю свои задачи, они запускаются не в том порядке, в котором они настроены ... Из-за этого я сейчас пытаюсь использовать параметр dependOn, и он не работает с параметром. Есть ли у вас какие-либо подсказки... то есть: использование с dependOn: - '${{parameters.sqlserver }} --set-up-stuff
Можете ли вы опубликовать код, где вы пытаетесь «передать параметры»? Из того, что вы опубликовали, я не понимаю, что вы делаете, чтобы определить, где что-то идет не так.