Jenkins:在推荐版本中使用存档工件
我已经将一个工件归档为构建的最后一步,它可以像这样: https : //xxx.ci.cloudbees.com/job/xxx/52/artifact/target/xxx-1.2.1-SNAPSHOT -r8304-20130807-1507-app.zip
如何在促销过程中轻松访问工件? 请注意,我需要访问特定的版本,而不是最新的成功版本。
升级过程的目标是将工件复制到S3,我们的部署作业将从中进一步处理它。 因此,我可以将构建#52推广到开发(将其复制到特定的S3存储桶),稍后将构建#50推广到生产等等。
理想情况下,我可以在shell脚本中访问工件来重命名文件等。是否有环境变量来访问构建的存档工件,我找不到或应该如何完成? $BUILD_URL
和$JOB_URL
已经特定于促销流程,并且不会在促销作业的shell脚本中指向构建本身。
使用复制工件插件,我只能复制促销过程中其他构建的工件,我不需要这样做。
我相信我找到了解决方案。
概要
- 不要使用永久链接指定
- 使用特定构建并将内部版本号设置为
${PROMOTED_NUMBER}
解决方案
先决条件
- 必须安装复制工件插件 。
- 存档您希望促销访问的工件
- 在构建后操作中添加操作存档工件并将文件设置为存档到您希望促销访问的内容。
- 不要丢弃旧的文物
- 在“作业配置”中,取消选择“ 丢弃旧构建”或确保其设置将保留工件,只要您要升级构建即可。
促销设置:
像往常一样使用名称和标准设置升级版本。
在“操作”部分中,添加来自其他项目的复制工件操作,并设置这些值。
- 项目名称:
${PROMOTED_JOB_NAME}
- 哪种构建:特定构建
- 内部版本号:
${PROMOTED_NUMBER}
- 要复制的工件:
path/to/your/artifacts/**
- 目标:
${BUILD_TAG}
然后添加您真正想要执行的操作。 例如,添加动作归档工件以保存工件。 请记住使用${BUILD_TAG}
为您的路径添加前缀,例如${BUILD_TAG}/path/to/your/artifacts/**
关于原因的说明
复制工件
正如您现在可能知道的那样,促销不应期望访问构建工作区的内容。 它可能在不同的服务器上执行,它可能根本不能访问任何工作区,也不能访问较旧或较新版本的工作区。 因此,需要将要使用的工件复制到当前工作空间。
这也是设置Target值的原因。 工作区可能与其他构建或促销有关。 将目标设置为${BUILD_TAG}
通过创建促销流程特有的文件夹,防止与工作区中已有文件发生冲突。
$ {PROMOTED_ *}变量
正如您所说,正常构建变量是指促销过程本身,但是Promoted Build Plugin定义了一些引用实际构建的环境变量 。
固定链接
在Jenkins上下文中, 永久链接仅指向指向某种类型的最新版本或最新促销的特殊链接。 这就是为什么你总能得到最新版本
在我的Jenkins版本中,下拉列表被替换为文本框。 将URL写入特定构建(如http://jenkins/job/myjob/59/
) 不会被识别为特殊永久链接之一, 因此复制将失败 。
您可以使用Copy Artifact插件。 将其设置为从主项目中复制工件,并选择“ 永久链接指定”,其中永久链接为最新促销:此促销过程 。
(请注意,由于促销配置在此处引用自身,因此您无法在一个步骤中添加此类促销:您必须添加不带构建步骤的促销,保存,然后返回并添加构建步骤。)
另外,您可能会发现Workflow系统可以更轻松地自定义此类管道逻辑,而无需使用Promoted Builds或Copy Artifact插件。