我相信我已经找到了解决方案。
概括
- 不要使用固定链接指定的
- 使用特定构建并将构建号设置为
${PROMOTED_NUMBER}
解决方案
先决条件
- 必须安装复制工件插件。
- 归档您希望促销访问的工件
- 在Post-build Actions中添加操作Archive the artifacts并将Files to archive设置为您希望促销访问的任何内容。
- 不要丢弃旧文物
- 在 Job Configuration 中,取消选择Discard Old Builds或确保其设置将保留工件,只要您想提升您的构建。
促销设置:
像往常一样使用名称和标准设置您的升级版本。
在 Actions 部分中添加 Action Copy artifacts from an other project,并设置这些值。
- 项目名称:
${PROMOTED_JOB_NAME}
- 哪个构建:特定构建
- 内部编号:
${PROMOTED_NUMBER}
- 要复制的工件:
path/to/your/artifacts/**
- 目标:
${BUILD_TAG}
然后添加您真正想要执行的操作。例如,添加操作归档工件以保存工件。请记住在您的路径前加上${BUILD_TAG}
例如${BUILD_TAG}/path/to/your/artifacts/**
关于为什么的注释
复制工件
正如您现在可能知道的那样,促销不应期望访问构建工作区的内容。它可能在不同的服务器上执行,并且它可能根本无法访问任何工作区或来自较旧或较新版本的工作区。因此,需要将要使用的工件复制到当前工作空间。
这也是设置Target值的原因。工作空间可能会被其他构建或促销活动污染。将目标设置为${BUILD_TAG}
防止与工作区中已有的文件发生任何冲突,方法是创建一个对提升过程唯一的文件夹。
${PROMOTED_*} 变量
正如您所说,正常的构建变量指的是升级过程本身,但升级的构建插件定义了一些环境变量,而不是实际的构建。
永久链接
在 Jenkins 上下文中,永久链接仅指指向某种类型的最新版本或最新促销的特殊链接。这就是为什么您将始终获得最新版本的原因
在我的 Jenkins 版本中,下拉列表被替换为文本框。将 URL 写入特定构建之类http://jenkins/job/myjob/59/
的文件不会被视为特殊永久链接之一,因此复制将失败。