一尘不染

jenkins通过共享工作区连续交付

jenkins

背景:

我们Production每天晚上都有一份詹金斯工作()构建可交付成果。我们还有另一项工作(ProductionPush),第二天通过专有协议将可交付成果推送到生产机器。这是因为某些生产机器仅在一天中的某些时段可用(这也使我们有机会修复任何最后的构建中断)。
ProductionPush需要访问Production作业构建的可交付成果(因此需要访问同一工作空间)。我们有多个节点和并发的内部版本(因此是不可预测的工作空间),并且由于资源有限,所以最好不要将作业绑定到固定的节点/工作空间。

问题:

  1. 如何确保两个作业共享相同的工作空间,并确保ProductionPush仅在Production成功的情况下第二天在固定时间运行-而不将两个作业固定为在同一节点/工作空间用完?我知道参数化触发器插件可能会帮助解决其中一些问题,但是它似乎没有延时功能,在安静的时间里12个小时似乎太长了。

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


阅读 368

收藏
2020-07-25

共1个答案

一尘不染

答案2:是的,共享工作空间是个坏主意。有文件锁定的可能性。存在工作区被清除的问题。只是不要做…

答案1:您需要 存档 构建的工件。这样,特定构建(按构建号)的工件将始终可用,而不管是否正在运行另一个构建,或者工作空间处于什么状态

存档工件

  • 构建 作业中的 “构建后操作”下 ,选择“ 归档工件”。
  • 指定要归档的工件(可以使用以下组合)
    a)可以归档所有内容:*.*
    b)可以使用通配符归档特定文件:/path/to/file_version*.zip
    c)可以忽略中间目录,例如:**/file_version*.zip

  • 为了避免许多工件的存储问题,您可以在配置的顶部选择“ 丢弃旧版本” ,单击“ 高级” 按钮,然后选择“ 天数”以保留工件, 并选择“ 最大构建数”以保留工件 。请注意,这两个设置不能控制实际构建的保留时间(其他设置可以控制)

从詹金斯访问工件

  • 在构建历史记录中,选择所需的任何以前的构建。
  • 除了SCM更改和修订数据之外,您现在还将具有“ 构建工件” 链接,在该链接下,您将找到 该特定 构建的所有工件。
  • 您还可以使用Jenkins的永久链接(例如
    http://JENKINS_URL/job/JOB_NAME/lastSuccessfulBuild/artifact/,然后是工件的名称)来访问它们。

访问其他作业的工件

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

如果您的要求是始终将最新的版本部署到生产中,则可以跳过上面链接中的 升级 配置。只需按照配置 部署 作业的步骤进行即可。 部署
作业一旦完成,如果始终在同一时间运行,则只需配置其 Build定期 参数即可。或者,您可以拥有另一个作业,该作业将根据您想要的任何条件触发 部署
作业。

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

2020-07-25