18

我已将工件存档为构建的最后一步,它可以像这样使用: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 脚本中指向构建本身。

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

4

3 回答 3

23

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

概括

  • 不要使用固定链接指定的
  • 使用特定构建并将构建号设置为${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/的文件不会被视为特殊永久链接之一,因此复制将失败

于 2014-11-26T12:31:25.827 回答
5

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

(注意,由于这里的升级配置是指自己,所以不能一步添加这样的升级:必须添加没有构建步骤的升级,保存,然后返回添加构建步骤。)

于 2013-08-07T21:00:34.643 回答
0

顺便说一句,您可能会发现Workflow 系统可以更轻松地自定义这种管道逻辑,而根本不需要使用 Promotiond Builds 或 Copy Artifact 插件。

于 2014-11-06T19:36:03.023 回答