Azure Devops - установка переменной в скрипте YAML для даты и времени - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь сгенерировать имя для пакета NuGet в конвейере YAML Azure DevOps.

Контекст создает пакеты в каждой автоматизированной сборке с именем пакета, именем ветви, датой и возрастающим номером редакции.

PACKAGENAME-branchName год-месяц-день-ревизионная

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

Я пытаюсь установить переменную в файле YAML из переменных среды, таких как дата или номер редакции.

Используя команду ## vso, я могу установить для myVariable значение hello и распечатать его.

- script: |
    echo '##vso[task.setvariable variable=myVariable]hello'

- script: |
    echo my variable is $(myVariable)

Когда я пытаюсь установить переменную из PowerShell, как показано ниже, я получаю следующую ошибку «# $ dateStr» не распознается как внутренняя или внешняя команда ».

# Create a variable
- script: |
    #$dateStr = (Get-Date).ToString('yyyy-MM-dd') 
    echo '##vso[task.setvariable variable=myVariable]#$dateStr'

# Print the variable
- script: |
    echo my variable is $(myVariable) 

Когда я пытаюсь установить переменную в разделе переменных файла YAML следующим образом.

variables:
  solution: '**/*.sln'
  foo: $(Date:yyyyMMdd)

- script: |
    echo my variable is $(foo)

Переменная не интерполируется и выводится как.

'моя переменная $ (Date: yyyyMMdd)'

Как создать переменные на основе переменных среды, таких как $ (rev) и $ (Date)?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Спасибо за помощь.

Вот так я решил проблему в конце. В ветках без релиза я использую build # + beta + имя ветки, чтобы сгенерировать уникальное имя для создаваемых мной пакетов nuget. С ветками релиза я просто использую build #.

# Create version number for non release package(s) - 1.0.xxx-beta-develop for example
- powershell: |
    [String]$buildNumber = $Env:BUILD_BUILDNUMBER.Substring($Env:BUILD_BUILDNUMBER.LastIndexOf('.') + 1)
    [String]$branchName = $Env:BUILD_BUILDNUMBER.Substring(0, $Env:BUILD_BUILDNUMBER.LastIndexOf('.'))
    Write-Host "##vso[task.setvariable variable=nugetVersion]1.0.$($buildNumber)-beta-$($branchName)"
  displayName: 'Create beta version number for production nuget packages - run when in non release branch' 
  condition: and(succeeded(), ne(variables['Build.SourceBranch'], 'release/'))

# Create version number for release package(s) - 1.0.xxx for example
- powershell: |
    [String]$buildNumber = $Env:BUILD_BUILDNUMBER.Substring($Env:BUILD_BUILDNUMBER.LastIndexOf('.') + 1)
    Write-Host "##vso[task.setvariable variable=nugetVersion]1.0.' + $($buildNumber)
  displayName: 'Create version number for production nuget packages - run when in release branch' 
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'release/'))


- task: NuGetCommand@2
  inputs:
    command: 'pack' # Options: restore, pack, push, custom
    versioningScheme: byEnvVar
    versionEnvVar: nugetVersion
    packDestination: '$(Build.ArtifactStagingDirectory)\nuget'
    packagesToPack: '**/Floww.*.nuspec'     
0 голосов
/ 22 января 2019

Я не думаю, что есть встроенная переменная date, но для случая powershell вам просто нужно сбросить # перед переменной, и она должна быть заключена в ", иначе powershell не расширит вашу переменную

echo "##vso[task.setvariable variable=myVariable]$dateStr"
...