jenkins持续交付共享工作区

时间:2013-02-28 16:26:22

标签: triggers jenkins workspace continuous-delivery

背景

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

问题:

  1. 如何确保两个作业共享同一个工作区,并确保ProductionPush仅在Production成功时在第二天的固定时间运行,而不会将两个作业都用完相同的节点/工作区?我知道Parameterized Trigger Plugin可能对其中一些有所帮助,但它似乎没有时间延迟能力,12小时似乎太长时间没有安静期。

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

2 个答案:

答案 0 :(得分:25)

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

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

归档工件

  • 构建作业中,在构建后操作下,选择存档工件
  • 指定要归档的工件(可以使用下面的组合)
    a)您可以归档所有:*.*
    b)您可以使用通配符归档特定文件:/path/to/file_version*.zip
    c)您可以忽略中间目录,例如:**/file_version*.zip
  • 为了避免许多工件存储问题,在配置的顶部,您可以选择放弃旧版,点击高级按钮,然后使用天到保留工件最大构建数以保留工件。请注意,这两个设置无法控制实际构建的保留时间(其他设置控制)

从Jenkins访问工件

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

从其他作业访问工件

我已经在这里广泛地解释了如何从另一个部署作业(在您的示例中为ProductionPush)访问以前的工件:
How to promote a specific build number from another job in Jenkins?

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

在上述任何一种情况下,如果默认选择器设置为最新成功构建(如上面链接中所述),则最新版本将推送到Production < / p>

答案 1 :(得分:0)

不确定归档工件是不是一个好主意。暂存存储库可能更好,因为它可以通过调整Maven settings.xml文件使跨职能团队在需要时跨不同的构建共享工件。

你真的想要一个可部署的(ear / war)作为构建,测试的东西,然后一旦建立信心很高就升级到生产。

在deployable上使用内部版本号(major.minor.buildnumber)。这是你向生产推广的东西,只要你的测试可以依赖。不要使用连字符来分隔具有内部编号的次要部分,因为这会强制Maven执行词法比较...小数点将强制进行数字比较,这将给您带来更少的麻烦。

此外,您没有提及您的目标平台,但使用Maven APT / RPM插件将APT / RPM推送到生产箱可用的APT / YUM仓库(成功测试之后!)将是一个不错的选择适合,按照行业标准?