根据触发器分支设置环境变量 - Azure DevOps Pipeline
Set Environment variable based on trigger branch - Azure DevOps Pipeline
我正在尝试为部署到管道中的 Azure 工件的 nuget 包设置包版本。
要求是,如果我在功能分支上,我需要将 -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: ''
正如您在第一步中看到的,当分支名称不是 master
.
时,我尝试将 $Env:PackageVersionType
设置为 -preview
控制台输出为:
问题是,如何根据管道中的触发器分支设置 $Env:PackageVersion
?
好的,所以想通了:
声明了一个名为 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)]
我正在尝试为部署到管道中的 Azure 工件的 nuget 包设置包版本。
要求是,如果我在功能分支上,我需要将 -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: ''
正如您在第一步中看到的,当分支名称不是 master
.
$Env:PackageVersionType
设置为 -preview
控制台输出为:
问题是,如何根据管道中的触发器分支设置 $Env:PackageVersion
?
好的,所以想通了:
声明了一个名为 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)]