Jenkins:在升级的版本中使用存档的工件总结解决方案关于原因的说明

2022-09-02 21:01:22

我已经存档了一个工件作为构建的最后一步,它可以像这样提供:https://xxx.ci.cloudbees.com/job/xxx/52/artifact/target/xxx-1.2.1-SNAPSHOT-r8304-20130807-1507-app.zip

如何在推广过程中轻松访问工件?请注意,我需要访问特定的版本,而不是最新的成功版本。

提升过程的目标是将项目复制到 S3,我们的部署作业将从 S3 进一步处理它。因此,我可能会将构建 #52 提升为开发(将其复制到特定的 S3 存储桶),稍后将构建 #50 提升到生产环境,依此类推。

理想情况下,我可以在shell脚本中访问工件以重命名文件等。是否有环境变量来访问构建的存档工件,我找不到这些工件,或者应该如何执行此操作? 并且已经特定于升级过程,并且不会在升级作业的 shell 脚本中指向构建本身。$BUILD_URL$JOB_URL

使用复制工件插件,我只能在提升过程中从其他构建中复制工件,而我不需要这样做。


答案 1

我相信我已经找到了解决方案。

总结

  • 不要使用由永久链接指定
  • 使用特定内部版本并将内部版本号设置为${PROMOTED_NUMBER}

解决方案

先决条件

  • 必须安装复制工件插件
  • 存档您希望促销访问的项目
    • “生成后操作”中添加“存档项目”操作,并将“要存档的文件”设置为您希望升级访问的任何内容。
  • 不要丢弃旧工件
    • 在“作业配置”中,取消选择“放弃旧版本”,或确保只要您要升级内部版本,其设置就会保留项目。

促销设置:

像往常一样使用名称和条件设置升级的生成。

在“操作”部分,添加“从其他项目复制项目”操作,并设置这些值。

  • 项目名称:${PROMOTED_JOB_NAME}
  • 哪个版本:特定版本
  • 内部版本号:${PROMOTED_NUMBER}
  • 要复制的工件:path/to/your/artifacts/**
  • 目标:${BUILD_TAG}

然后添加您真正想要执行的操作。例如,添加操作存档项目以保存项目。请记住在路径前面加上例如${BUILD_TAG}${BUILD_TAG}/path/to/your/artifacts/**

关于原因的说明

复制工件

正如您现在可能已经知道的那样,促销不应期望访问生成的工作区的内容。它可能在不同的服务器上执行,并且它可能根本没有访问权限,或者从较旧或较新的内部版本访问工作区。因此,需要将要使用的项目复制到当前工作区。

这也是设置“目标”值的原因。工作区可能被其他生成或升级所淹没。将目标设置为“通过创建升级过程特有的文件夹,防止与工作区中已有的文件发生任何冲突”。${BUILD_TAG}

${PROMOTED_*} 变量

正如你所说,正常的构建变量指的是提升过程本身,但升级的构建插件定义了一些环境变量,而不是实际的构建。

永久链接

在 Jenkins 上下文中,永久链接仅指指向某种类型的最新版本或最新促销的特殊链接。这就是为什么您将始终获得最新版本的原因

在我的 Jenkins 版本中,下拉列表被替换为文本框。将 URL 写入特定的构建(如)不会被识别为特殊永久链接之一,因此复制将失败http://jenkins/job/myjob/59/


答案 2

您可以使用复制工件插件。将其设置为从主项目复制工件,然后选择“由永久链接指定”,其中永久链接是“最新升级:此升级过程”。

(请注意,由于升级配置在此处引用自身,因此您无法在一个步骤中添加此类升级:您必须添加没有构建步骤的升级,保存,然后返回并添加构建步骤。


推荐