Jenkins:在推荐构建中使用存档工件

时间:2013-08-07 13:49:40

标签: java deployment jenkins cloudbees

我已将构件存档作为构建的最后一步,它可以像这样: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脚本中访问工件来重命名文件等。是否有环境变量来访问构建的存档工件,我找不到或应该如何完成? $BUILD_URL$JOB_URL已经特定于促销流程,并且未在促销作业的shell脚本中指向构建本身。

使用复制工件插件,我只能复制促销过程中其他构建的工件,我不需要这样做。

3 个答案:

答案 0 :(得分:19)

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

摘要

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

解决方案

<强>先决条件

  • 必须安装Copy Artifact Plugin
  • 归档您希望促销访问的工件
    • 构建后操作中添加操作归档工件并将文件归档设置为您希望促销访问的内容。
  • 不要丢弃旧文物
    • 在“作业配置”中,取消选择放弃旧版本,或者确保只要您想要宣传您的版本,其设置就会保留工件。

促销设置:

像往常一样使用名称和标准设置您的推广版本。

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

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

然后添加您真正想要执行的操作。例如,添加操作存档工件以保存工件。请务必使用${BUILD_TAG}为您的路径添加前缀,例如${BUILD_TAG}/path/to/your/artifacts/**

关于

原因的说明

复制工件

正如您现在可能知道的那样,促销不应期望访问构建工作区的内容。它可能在不同的服务器上执行,并且它可能根本不能访问任何工作空间或来自较旧或较新构建的工作空间。因此,需要将要使用的工件复制到当前工作空间。

这也是 Target 值设置的原因。工作区可能与其他构建或促销有关。将目标设置为${BUILD_TAG}通过创建促销流程特有的文件夹,防止与工作区中已有文件发生冲突。

$ {PROMOTED_ *}变量

正如您所说,正常的构建变量是指促销流程本身,但是推广构建插件定义了一些environment variables来代替实际构建。

<强>永久链接

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

在我的Jenkins版本中,下拉列表被替换为文本框。将网址写入http://jenkins/job/myjob/59/这样的特定版本是not recognized作为特殊永久链接之一,以及复制will thus fail

答案 1 :(得分:5)

您可以使用Copy Artifact插件。将其设置为从主项目中复制工件,然后选择指定永久链接,其中永久链接为最新促销:此促销流程

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

答案 2 :(得分:0)

另外,您可能会发现Workflow system可以更轻松地自定义此类管道逻辑,而无需使用Promoted Builds或Copy Artifact插件。