Установка переменной среды на основе ветви триггера — конвейер Azure DevOps

#azure-devops #azure-pipelines #pipeline

#azure-devops #azure-конвейеры #конвейер

Вопрос:

Я пытаюсь установить версию пакета для пакетов nuget, развертываемых в Azure Artifacts в конвейере.

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

Итак, основываясь на этой статье здесь: https://www.koskila.net/fun-with-azure-devops-nuget-package-versioning /

Я настроил следующие переменные:

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

и это круговая линия .yml

шаги:

 - task: PowerShell@2
  displayName: 'Set Package Version Type'
  inputs:
    targetType: 'inline'
    script: |
      # if trigger branch is not master - then append -prelease to package version
      if($Env:BUILD_SOURCEBRANCHNAME -ne 'master'){
        $Env:PackageVersionType = '-preview'
        $Env:PackageVersion = "$Env:Major.$Env:Minor.$Env:Patch$Env:PackageVersionType"
      }
      Write-Host $Env:PackageVersionType
      Write-Host $Env:PackageVersion

# Create Nuget Package - After running tests
- task: DotNetCoreCLI@2
  displayName: "Create Nuget Package"
  condition: succeeded()
  inputs:
    command: 'pack'
    packagesToPack: '**/my.csproj'
    versioningScheme: 'byEnvVar'
    versionEnvVar: 'PackageVersion'
    arguments: '--configuration $(buildConfiguration)'

# Push Nuget Package to Artifacts, so it can be consumed
- task: NuGetCommand@2
  displayName: "Publish Nuget Package"
  condition: succeeded()
  inputs:
    command: 'push'
    packagesToPush: '$(Build.ArtifactStagingDirectory)/**/*.nupkg;!$(Build.ArtifactStagingDirectory)/**/*.symbols.nupkg'
    nuGetFeedType: 'internal'
    publishVstsFeed: ''
  

Как вы можете видеть на первом шаге, я пытаюсь установить значение $Env:PackageVersionType to -preview , когда имя ветки не master указано .

Вывод на консоль для этого:

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

Вопрос в том, как мне установить $Env:PackageVersion переменную среды на основе ветви триггера в моем конвейере?

Ответ №1:

хорошо, итак, разобрались с этим:

объявите переменную с именем packageVersionType и задайте ее значение, если Env:BUILD_SOURCEBRANCHNAME она не является основной ветвью -preview

 variables:
  packageVersionType: ''

steps:

- task: PowerShell@2
  displayName: 'Set Package Version Type'
  inputs:
    targetType: 'inline'
    script: |
      # if trigger branch is not master - then append -prelease to package version
      if($Env:BUILD_SOURCEBRANCHNAME -ne 'master'){
        $localVersionType = '-preview'
        Write-Host "##vso[task.setvariable variable=packageVersionType;]$localVersionType"
      }
  

Затем в пакете Nuget:

 # Create Nuget Package - After running tests
- task: DotNetCoreCLI@2
  displayName: "Create Nuget Package"
  condition: succeeded()
  inputs:
    command: 'pack'
    packagesToPack: '*Myproj.csproj'
    versioningScheme: 'byEnvVar'
    versionEnvVar: 'PackageVersion'
    arguments: '--configuration $(buildConfiguration)'

# Push Nuget Package to Artifacts, so it can be consumed
- task: NuGetCommand@2
  displayName: "Publish Nuget Package"
  condition: succeeded()
  inputs:
    command: 'push'
    packagesToPush: '$(Build.ArtifactStagingDirectory)/**/*.nupkg;!$(Build.ArtifactStagingDirectory)/**/*.symbols.nupkg'
    nuGetFeedType: 'internal'
    publishVstsFeed: ''
  

и объявите следующее в переменных для конвейера.

 PackageVersion = `$(Major).$(Minor).$(Patch)$(packageVersionType)` 
Patch = $[counter(format('{0}.{1}', variables['Major'], variables['Minor']), 0)]