jenkins持续交付共享工作区

use*_*303 7 workspace triggers jenkins continuous-delivery

背景:

我们有一个Jenkins工作(Production)每晚构建一个可交付成果.我们还有另一项工作(ProductionPush)将第二天通过专有协议将可交付成果推送到生产机器.这是因为某些生产机器仅在白天的某些时段可用(它还使我们有机会修复任何最后一刻的构建中断). ProductionPush需要访问Production作业构建的可交付成果(因此需要访问相同的工作区).我们有多个节点和并发构建(因此不可预测的工作空间),并且由于资源有限,因此不希望将作业绑定到固定节点/工作空间.

问题:

  1. 如何确保两个作业共享相同的工作区并确保ProductionPush仅在Production成功的情况下在第二天的固定时间运行- 而不是将两个作业都修复为在同一节点/工作区之外运行?我知道参数化触发插件可能有助于其中一些,但它似乎没有时间延迟功能,12小时似乎太长时间安静.

  2. 共享工作区是个坏主意吗?

Sla*_*lav 25

答案2:是的,共享工作区是个坏主意.文件锁定的可能性.存在工作空间被消灭的问题.只是不要这样做......

答案1:您需要的是归档构建的工件.这样,无论另一个构建是否正在运行,或者工作区处于什么状态,特定构建的构件(按构建号)将始终可用.

归档工件

  • 构建作业中,在"构建后操作"下,选择" 存档工件"
  • 指定要归档的工件(可以使用下面的组合)
    a)您可以归档所有:*.*
    b)您可以使用通配符归档特定文件:/path/to/file_version*.zip
    c)您可以忽略中间目录,如:**/file_version*.zip
  • 为了避免许多工件的存储问题,在配置的顶部,您可以选择" 丢弃旧构建","单击高级"按钮,并使用" 天"来保持工件Max#的构建与工件保持一致.请注意,这两个设置不控制实际构建保留多长时间(其他设置控制)

从Jenkins访问工件

  • 在构建历史记录中,选择所需的任何先前构建.
  • 除了SCM更改和修订数据之外,您现在还将拥有一个Build Artifacts链接,您可以在该链接下找到该特定构建的所有工件.
  • 您也可以使用Jenkins的永久链接访问它们,
    http://JENKINS_URL/job/JOB_NAME/lastSuccessfulBuild/artifact/然后使用工件的名称.

从另一个作业访问工件

我已经在这里广泛地解释了如何从另一个部署作业(在您的示例中ProductionPush)访问以前的工件:
如何从Jenkins的另一个作业中提升特定的构建号?

如果您的要求始终是将最新版本部署到生产,则可以跳过上述链接中的促销配置.只需按照配置部署作业的步骤操作即可.获得部署作业后,如果它始终同时运行,则只需配置其定期构建参数.或者,您可以根据所需的条件启动另一个将触发部署作业的作业.

在上述任何一种情况下,如果您的默认选择器设置为最新成功构建(如上面链接中所述),则最新构建将推送到生产