Переменные конвейера Azure DevOps определяют автоматическое изменение перед сборкой

#c# #powershell #azure-devops

#c# #powershell #azure-devops

Вопрос:

У меня есть конвейер сборки Azure DevOps с некоторыми переменными конвейера.

Я хотел бы изменить его, одну из переменных, автоматически с помощью сценария powershell, прямо перед постановкой в очередь. Возможно ли это?

Или есть какой-либо другой способ работать с этим?

Ответ №1:

«20.2.35». Часть 20.2 следует обновлять вручную раз в год, но .35 должно обновляться каждую неделю, это номер недели

Я боюсь, что нет переменной, которая может достигать еженедельных приращений. Но вы можете использовать запланированные триггеры и переменную счетчика для достижения аналогичных функций.

Вот шаги:

  1. Создайте группу переменных в Pipeline -> Library .

введите описание изображения здесь

  1. Создайте два конвейера. Конвейер 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 /…