#c# #powershell #azure-devops
#c# #powershell #azure-devops
Вопрос:
У меня есть конвейер сборки Azure DevOps с некоторыми переменными конвейера.
Я хотел бы изменить его, одну из переменных, автоматически с помощью сценария powershell, прямо перед постановкой в очередь. Возможно ли это?
Или есть какой-либо другой способ работать с этим?
Ответ №1:
«20.2.35». Часть 20.2 следует обновлять вручную раз в год, но .35 должно обновляться каждую неделю, это номер недели
Я боюсь, что нет переменной, которая может достигать еженедельных приращений. Но вы можете использовать запланированные триггеры и переменную счетчика для достижения аналогичных функций.
Вот шаги:
- Создайте группу переменных в
Pipeline -> Library
.
- Создайте два конвейера. Конвейер 1 используйте счетчик для обновления переменной в группе переменных (каждую неделю). Конвейер 2 устанавливает переменную в качестве Buildnumber.
Пример:
Конвейер 1 Используйте задачу powershell для запуска Rest API для обновления переменной.
trigger:
- none
schedules:
- cron: "0 12 * * 0"
displayName: Weekly Sunday build
branches:
include:
- master
variables:
- name: version
value: $[counter('',36)]
pool:
vmImage: 'ubuntu-latest'
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
$token = "PAT"
$url="https://dev.azure.com/{Org name}/_apis/distributedtask/variablegroups/{Group ID}?api-version=6.1-preview.2"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$JSON = @'
{
"variables":{"{variable name}":{"value":"$(version)"}},"id":{Group ID},"type":"Vsts","name":"{Variable Group name}","variableGroupProjectReferences":[{"projectReference":{"id":"{Project ID}","name":"{Project Name}"},"name":"{Variable Group Name}"}]
}
'@
$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method PUT -Body $JSON -ContentType application/json
Конвейер 2. Используйте переменную для установки Buildnumber.
name: 20.2 $(123)
trigger:
- none
variables:
- group: test
pool:
vmImage: 'ubuntu-latest'
steps:
- script: echo Hello, world!
displayName: 'Run a one-line script'
Объяснение:
Конвейерная линия 1 будет запускаться раз в неделю для обновления значения переменной. И значение будет увеличено на 1. Pipeline2 использует эту переменную для задания номера сборки. Это значение было установлено перед запуском конвейера, вы можете использовать $(build.buildnumber)
для ссылки на него.
Ответ №2:
Да, это возможно: https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devopsamp;tabs=classic,powershell
Переменная должна быть объявлена в конвейере, и вы можете задать значение с выводом (из cmd, powerhsell, python, exe, …) :
##vso[task.setvariable variable=MyVariable;]NewValue
В PowerShell вы можете использовать Write-Host
:
Write-Host "##vso[task.setvariable variable=MyVariable;]NewValue"
Комментарии:
1. Но может ли это быть выполнено непосредственно перед сборкой? Потому что я использую эту переменную в имени сборки.
2. Извините, я пропустил ваш вопрос. Я не думаю, что вы можете выполнить скрипт перед сборкой. Можете ли вы указать свои потребности?
3. Я использую эту переменную для создания имени сборки, поэтому в случае автоматической сборки я хотел бы обновить эту переменную перед сборкой.
4. Он должен содержать такой текст: «20.2.35». Часть 20.2 должна обновляться вручную раз в год, но . 35 должно обновляться каждую неделю, это номер недели
5. В вашем определении сборки в параметрах вы можете параметризовать номер сборки: learn.microsoft.com/en-us/azure/devops/pipelines/process /…