Java Jenkins:在提升的构建中使用归档工件

Java Jenkins:在提升的构建中使用归档工件,java,deployment,jenkins,cloudbees,Java,Deployment,Jenkins,Cloudbees,作为构建的最后一步,我归档了一个工件,它可以像这样使用: 如何在我的提升过程中轻松访问工件?请注意,我需要访问特定的构建,而不是最新的成功构建 升级过程的目标是将工件复制到S3,我们的部署工作将从S3进一步处理工件。因此,我可能会将build#52推广到开发(将其复制到特定的S3 bucket),然后将build#50推广到生产,等等 理想情况下,我可以在shell脚本中访问工件以重命名文件等。是否存在环境变量来访问构建的存档工件(我找不到),或者应该如何实现$BUILD\u URL和$JOB\

作为构建的最后一步,我归档了一个工件,它可以像这样使用:

如何在我的提升过程中轻松访问工件?请注意,我需要访问特定的构建,而不是最新的成功构建

升级过程的目标是将工件复制到S3,我们的部署工作将从S3进一步处理工件。因此,我可能会将build#52推广到开发(将其复制到特定的S3 bucket),然后将build#50推广到生产,等等

理想情况下,我可以在shell脚本中访问工件以重命名文件等。是否存在环境变量来访问构建的存档工件(我找不到),或者应该如何实现
$BUILD\u URL
$JOB\u URL
已经特定于升级过程,并且不指向升级作业上的shell脚本中的构建本身


使用复制工件插件,我只能在升级过程中复制其他版本的工件,而我不需要这样做。

您可以使用复制工件插件。将其设置为从主项目复制工件,并选择permalink指定的,其中permalink是最新的升级:此升级过程


(请注意,由于升级配置在此处指的是它自己,因此您不能在一个步骤中添加这样的升级:您必须添加升级而不包含生成步骤,保存,然后返回并添加生成步骤。)

另外,您可能会发现,根本不需要使用升级版本或复制工件插件。

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

总结
  • 不要使用permalink指定的
  • 使用特定生成并将生成编号设置为
    ${PROMOTED\u number}
解决方案 先决条件

  • 必须安装
  • 归档您希望促销访问的工件
    • 在构建后操作中,添加操作归档工件,并将要归档的文件设置为您希望升级访问的内容
  • 不要丢弃旧的工件
    • 在作业配置中,取消选择放弃旧版本或确保其设置将保留工件,直到您想要升级版本为止
促销设置:

像往常一样使用名称和条件设置升级的版本

在Actions部分添加action从其他项目复制工件,并设置这些值

  • 项目名称:
    ${PROMOTED\u JOB\u Name}
  • 哪个版本:特定版本
  • 内部版本号:
    ${PROMOTED\u Number}
  • 要复制的工件:
    path/to/your/Artifacts/**
  • 目标:
    ${BUILD\u TAG}
然后添加你真正想做的动作。例如,添加操作存档工件以保存工件。记住在路径前面加上
${BUILD\u TAG}
,例如
${BUILD\u TAG}/path/to/your/artifacts/**

说明原因 复制工件

您现在可能已经知道,升级不应该期望访问构建工作区的内容。它可能在不同的服务器上执行,并且可能根本无法访问任何工作区,也可能无法访问来自较旧或较新版本的工作区。因此,需要将要使用的工件复制到当前工作区

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

${PROMOTED_*}变量

正如您所说,正常的构建变量指的是升级过程本身,但升级的构建插件定义了一些引用实际构建的变量

Permalinks

在Jenkins上下文中,仅指指向某种类型的最新版本或最新促销的特殊链接。这就是为什么你总是能得到最新的版本


在我的詹金斯版本中,下拉列表被一个文本框取代。将URL写入特定的构建,如
http://jenkins/job/myjob/59/
是一种特殊的永久链接,而复制是。

我觉得命名有点混乱,但这肯定是朝着正确方向迈出的一步。在做一个小测试时,我经历了以下行为:第一个升级过程使用当前工件。任何额外的部署只能部署当前或以后的工件。如果我已经为某个特定的提升提升了build#60,那么尝试提升#59将再次部署#60。我需要讨论这一点,但这可能有助于避免旧的部署。在复制工件插件中有一个新的(我认为)功能,您可以指定构建编号和您希望从该构建中获得的工件number@xeraa:你找到解决这个问题的方法了吗?我也面临同样的问题。升级版本#60,然后尝试升级较低版本,这是在升级工件的最后一个升级版本。不幸的是,不是。最后一个版本总是“赢”,这确实选择了正确的版本。相当晦涩,但很好的解决方案!这应该包括在“升级的构建”文档中。如果可能的话,您能描述一下如何使用管道而不是复制工件吗?我们有一个多阶段的管道,每个阶段都运行在一个新的kubernetes吊舱中,我想访问在前一阶段构建的用于集成测试的存档。除了归档工件(或发布+下载到其他位置)之外,在我的管道中是否可以做一些特殊的事情来共享在早期阶段专门构建的工件?