java - Jenkins中项目之间存在依赖关系时如何实现持续交付

标签 java git jenkins dependencies continuous-integration

我很长时间都在摸索解决这个问题的办法,但还没有想出好的解决方案,也许有人可以帮助我提供任何建议或良好的实践。

这里是:

我有三个 git 项目:compilerweb、compiler 和 common

  • 这三个项目都指向git中的master分支
  • compiler 和 common 是 java 项目,compilerweb 是 java web 项目
  • 我设置了三个 jenkins 作业来单独编译每个项目
  • 项目之间的依赖关系如下:(->) 表示依赖于:
    • compilerweb -> 编译器 -> 通用
  • 编译器项目作为独立项目启动,也被compilerweb用作库
  • compilerweb 有集成测试

我想做的是配置一个持续集成模式,其中三个项目中任何一个的任何提交和推送都会启动完整的构建,以确保 整个项目的稳定性,但我不确定要采取什么程序或策略

我首先尝试的是以下内容:

  • 如果在 common 上检测到推送,则编译 common,然后编译器,最后编译器 web 启动集成测试
  • 如果在编译器中检测到推送,则编译编译器,最后编译编译器网络以启动集成测试
  • 如果在compilerweb中检测到推送,则编译启动集成测试的compilerweb

但是在这种模式下,例如,如果开发人员同时处理三个项目,然后他在compilerweb项目上执行提交和推送,那么将启动完整的构建,而无需对common和compiler进行更改构建将会失败。

当项目之间存在依赖关系并且所有项目都指向主分支时,实现持续集成的标准方法是什么?

非常感谢您的任何建议或答复! :)

最佳答案

配置一项作业以启动另一项作业。

common成功构建后,启动编译器

编译器成功完成时,启动compilerweb

您可以在“构建后操作”>>“构建另一个项目”中进行配置

配置为在推送到任何 git 存储库时触发编译器作业。

这样,无论推送发生在哪里,每次都会运行 3 个作业。

您可以向作业添加延迟,以避免提交和推送所有 git 存储库时出现问题。

延迟触发作业

http://myjenkins/job/jobname/build?delay=15

另一种方法是,如果提交有或没有特定消息,则仅运行构建。为此,您需要与开发人员交谈。 如果他们要进行需要在 3 个存储库上提交的更改,请仅在最后一次提交时开始构建。

例如:

将脚本配置为如果提交消息中包含“ON HOLD”一词,则不启动构建。

关于java - Jenkins中项目之间存在依赖关系时如何实现持续交付,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47143694/

相关文章:

git - 如何使用 --dir-diff 选项设置 git mergetool?

git - 基于主干的开发有多少流水线?

jenkins - 如何防止两个相同类型的管道 jenkins 作业在同一节点上并行运行?

git - 如何让 Jenkins 连接到 git 仓库

java - Maven 无法部署 Artifact ReasonPhrase :Forbidden

java - Apache Ignite - 如何发展带注释的类的架构/属性

php - 尝试使用 Symfony2 项目清除缓存时出错

Jenkins CLI 空响应

java - 如何创建返回 ArrayList 的方法

java - 如何用Java模拟html页面链接点击?