我在构建的最后一步存档了一个工件,它可以像这样使用:https://xxx.ci.cloudbees.com/job/xxx/52/artifact/target/xxx-1.2.1-SNAPSHOT-r8304-20130807-1507-app.zip
如何在我的推广过程中轻松访问 Artifact ?请注意,我需要访问特定的构建,而不是最新的成功构建。
提升过程的目标是将工件复制到 S3,我们的部署作业将从那里进一步处理它。因此,我可能会将构建 #52 提升到开发(将其复制到特定的 S3 存储桶),然后再将构建 #50 提升到生产等等。
理想情况下,我可以在 shell 脚本中访问工件以重命名文件等。是否有环境变量可以访问构建的存档工件,我找不到它或者应该如何完成? $BUILD_URL
和 $JOB_URL
已经特定于提升过程,并且不会在提升作业的 shell 脚本中指向构建本身。
使用复制工件插件,我只能在升级过程中从其他构建复制工件,我不需要这样做。
最佳答案
我相信我已经找到了解决方案。
总结
- 不要使用由固定链接指定
- 使用特定版本并将版本号设置为
${PROMOTED_NUMBER}
解决方案
先决条件
- Copy Artifact Plugin必须安装。
- 存档您希望促销访问的工件
- 在构建后操作中添加操作Archive the artifacts并将Files to archive设置为您希望促销访问的内容。
- 不要丢弃旧工件
- 在作业配置中,取消选择丢弃旧构建,或确保其设置将保留工件,只要您想要推广您的构建。
促销设置:
像往常一样使用名称和标准设置您的升级版本。
在操作部分添加操作从其他项目复制工件,并设置这些值。
- 项目名称:
${PROMOTED_JOB_NAME}
- 哪个构建:特定构建
- 内部版本号:
${PROMOTED_NUMBER}
- 要复制的工件:
path/to/your/artifacts/**
- 目标:
${BUILD_TAG}
然后添加你真正想做的 Action 。例如,添加操作Archive the artifacts 以保存工件。请记住在您的路径前加上 ${BUILD_TAG}
例如${BUILD_TAG}/path/to/your/artifacts/**
原因说明
复制工件
您现在可能已经知道,升级不应该期望访问构建工作区的内容。它可能在不同的服务器上执行,并且它可能根本无法访问任何工作区或来自旧版本或新版本的工作区。因此需要将您要使用的工件复制到当前工作区。
这也是设置Target值的原因。工作区可能会被其他构建或促销 Activity 污染。将目标设置为 ${BUILD_TAG}
通过创建升级过程独有的文件夹,防止与工作区中已有的文件发生任何冲突。
${PROMOTED_*} 个变量
如您所述,正常构建变量指的是提升过程本身,但提升构建插件定义了一些 environment variables而是指实际构建。
永久链接
在 Jenkins 上下文中 permalinks仅指指向某种类型的最新版本或最新促销的特殊链接。这就是为什么您将始终获得最新版本的原因
在我的 Jenkins 版本中,下拉列表被替换为文本框。将 URL 写入特定构建,如 http://jenkins/job/myjob/59/
是 not recognized作为特殊永久链接之一,复制 will thus fail .
关于java - Jenkins:在升级构建中使用归档工件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18105218/