Azure Pipelines Universal Package 任务使用 'publishedPackageVar' 选项进行正确的版本部署
Azure Pipelines Universal Package task usage of 'publishedPackageVar' option for correct version deployment
我正在使用 Azure Pipelines,需要在一个阶段(构建)将文件上传到 Azure 工件,然后在另一个阶段(部署)下载具有相同版本的相同包。到目前为止,我已经通过使用通用包任务进行上传和下载来完成此操作,因此我在构建阶段使用选项 versionOption: 'patch'
上传包,并在部署阶段使用 vstsPackageVersion: '0.0.*'
下载包。
这是一个不错的解决方案,直到我遇到 运行 两个构建一个接一个地上传到同一个 Azure 工件提要的问题,并且由于我已经在构建和部署阶段之间设置了批准,管道的两次运行都会导致部署推送到提要的最新工件。
经过一些调查,我发现通用包上传任务有一个名为 publishedPackageVar 的选项,它将上传工件的名称和版本保存在一个变量中。我找不到关于此选项的任何文档,但据我所知,它将名称和版本存储为字符串,由 space 字符分隔:<artifact_name> <major>.<minor>.<patch>
,以及 vstsPackageVersion 只需要 <major>.<minor>.<patch>
部分。
我的问题是:有没有人出于类似原因使用过此 publishedPackageVar 选项,将其传递给 vstsPackageVersion[= 的最佳方式是什么? 30=]通用包下载任务的选项?
我能想到的所有解决方案都需要一些丑陋的、多步骤的解决方法(比如使用 sed
从变量中获取版本并将其存储为新变量),这只会降低我的管道的可读性。
请参阅有关 Universal Package task
的文档
publishedPackageVar
Package Output Variable Provide a name for the
variable that contains the published package name and version.
这个值默认由包名和版本号组成。我们无法修改任务中的格式。
如您所说,一种方法是使用脚本将版本号与此变量分开并存储在新变量中。
我想分享另一个方法
您可以使用自定义包版本号。然后就可以用counter expression构造一个增量版本号了。
变量可以直接分两个阶段使用
这是一个例子:
pool:
vmImage: windows-2019
variables:
major: 2
minor: 9
restnumber: 1
patch: $[counter(variables['restnumber'], 0)]
version: $(major).$(minor).$(patch)
stages:
- stage: Build
jobs:
- job: upload
steps:
- task: UniversalPackages@0
inputs:
command: 'publish'
publishDirectory: '$(Build.sourcesdirectory)'
feedsToUsePublish: 'internal'
vstsFeedPublish: 'xx'
vstsFeedPackagePublish: 'xx'
versionOption: 'custom'
versionPublish: '$(version)'
- stage: Stage
jobs:
- job: download
steps:
- task: UniversalPackages@0
inputs:
command: 'download'
downloadDirectory: '$(System.DefaultWorkingDirectory)'
feedsToUse: 'internal'
vstsFeed: 'xx'
vstsFeedPackage: 'xx'
vstsPackageVersion: '$(version)'
在本例中,您可以通过改变变量:restnumber的值来重置计数器。
我正在使用 Azure Pipelines,需要在一个阶段(构建)将文件上传到 Azure 工件,然后在另一个阶段(部署)下载具有相同版本的相同包。到目前为止,我已经通过使用通用包任务进行上传和下载来完成此操作,因此我在构建阶段使用选项 versionOption: 'patch'
上传包,并在部署阶段使用 vstsPackageVersion: '0.0.*'
下载包。
这是一个不错的解决方案,直到我遇到 运行 两个构建一个接一个地上传到同一个 Azure 工件提要的问题,并且由于我已经在构建和部署阶段之间设置了批准,管道的两次运行都会导致部署推送到提要的最新工件。
经过一些调查,我发现通用包上传任务有一个名为 publishedPackageVar 的选项,它将上传工件的名称和版本保存在一个变量中。我找不到关于此选项的任何文档,但据我所知,它将名称和版本存储为字符串,由 space 字符分隔:<artifact_name> <major>.<minor>.<patch>
,以及 vstsPackageVersion 只需要 <major>.<minor>.<patch>
部分。
我的问题是:有没有人出于类似原因使用过此 publishedPackageVar 选项,将其传递给 vstsPackageVersion[= 的最佳方式是什么? 30=]通用包下载任务的选项?
我能想到的所有解决方案都需要一些丑陋的、多步骤的解决方法(比如使用 sed
从变量中获取版本并将其存储为新变量),这只会降低我的管道的可读性。
请参阅有关 Universal Package task
的文档publishedPackageVar
Package Output Variable Provide a name for the variable that contains the published package name and version.
这个值默认由包名和版本号组成。我们无法修改任务中的格式。
如您所说,一种方法是使用脚本将版本号与此变量分开并存储在新变量中。
我想分享另一个方法
您可以使用自定义包版本号。然后就可以用counter expression构造一个增量版本号了。
变量可以直接分两个阶段使用
这是一个例子:
pool:
vmImage: windows-2019
variables:
major: 2
minor: 9
restnumber: 1
patch: $[counter(variables['restnumber'], 0)]
version: $(major).$(minor).$(patch)
stages:
- stage: Build
jobs:
- job: upload
steps:
- task: UniversalPackages@0
inputs:
command: 'publish'
publishDirectory: '$(Build.sourcesdirectory)'
feedsToUsePublish: 'internal'
vstsFeedPublish: 'xx'
vstsFeedPackagePublish: 'xx'
versionOption: 'custom'
versionPublish: '$(version)'
- stage: Stage
jobs:
- job: download
steps:
- task: UniversalPackages@0
inputs:
command: 'download'
downloadDirectory: '$(System.DefaultWorkingDirectory)'
feedsToUse: 'internal'
vstsFeed: 'xx'
vstsFeedPackage: 'xx'
vstsPackageVersion: '$(version)'
在本例中,您可以通过改变变量:restnumber的值来重置计数器。