DevOps Server资源版本选择器忽略选定版本,始终使用最新版
手动运行部署流水线时资源版本选择无效的解决办法
问题现象
手动运行部署流水线时,已在资源版本选择器中选定历史构建版本(如ID 8517),但日志显示实际下载的是最新构建版本(如ID 8528)。
当前配置
部署流水线主配置:
trigger: - none resources: pipelines: - pipeline: Console source: Build.Console extends: template: Deploy.yml parameters: ...
部署模板Deploy.yml配置:
parameters: ... jobs: - deployment: Console workspace: clean: outputs environment: 'Test' strategy: runOnce: deploy: steps: - download: Console ...
已尝试无效操作
- 简化资源触发器配置
- 清理工作区
- 尝试用变量指定资源版本(资源声明段无法使用变量)
- 不愿替换
download步骤为DownloadPipelineArtifact任务(该模板在触发式流水线中运行正常)
原因分析
部署作业(deployment类型任务)中的download: <pipeline-resource>步骤默认存在优先级逻辑:未显式指定版本时,会优先拉取与部署环境关联的最新资源版本,而非手动选择的版本。即使手动选定了版本,若未在下载步骤中明确引用该版本标识,系统仍会 fallback 到最新版。
解决方案
无需替换download步骤,只需在模板的download步骤中显式指定使用手动选择的资源版本ID,利用系统自动注入的resources.pipeline.<resource-name>.runID变量即可:
修改Deploy.yml中的下载步骤:
- download: Console version: '${{ resources.pipeline.Console.runID }}'
该变量在手动选择版本时,会自动被赋值为你选定的构建版本ID,确保下载的是指定版本而非最新版。
补充说明
如果需要更灵活的版本选择,也可以在部署流水线中添加自定义参数,让用户输入版本ID并传递给资源声明:
# 部署流水线主配置 trigger: - none parameters: - name: consoleBuildVersion type: string displayName: 'Console构建版本ID' default: 'latest' resources: pipelines: - pipeline: Console source: Build.Console version: '${{ parameters.consoleBuildVersion }}' extends: template: Deploy.yml parameters: ...
这种方式适合需要在参数界面直接输入版本ID的场景,同样无需修改模板中的download步骤。
内容的提问来源于stack exchange,提问作者Shaun Kohanowski
相关产品推荐
相关产品推荐

