我有一个子模块 A,它不是独立的应用程序。它需要主应用程序才能工作。我想为 A 创建一个 CI 构建,以便每当将提交推送到 A 时,它都会触发使用主项目代码的构建。
我该如何在詹金斯中做到这一点?
我需要做什么:
我该如何使用 Jenkins 和 GIT 来做到这一点?
注意我的项目有多个子模块。子模块 A 触发构建,从 A 中提取最新的更改以及最新的主代码,并从其他子模块中提取更新。
这可以在没有 git hooks 的情况下完成。在此示例中,我们有 3 个存储库:
当使用子模块克隆时,它看起来像:
parent\
child-a\*
child-b\*
Run Code Online (Sandbox Code Playgroud)
在 Jenkins 中创建一个名为 的自由式项目dummy-child-a。
Source Code Management设置下Repository URL为child-aBuild Triggers您选择Poll SCM并设置所需的间隔Build点击下Add build step
Execute Windows batch command或Execute shell根据您的操作系统echo hello(这是虚拟部分)重复这些步骤child-b
在 Jenkins 中创建一个名为 的自由式项目parent。这是我们实际建造的地方
Source Code Management设置下Repository URL为parentadd下方Additional Behaviours并选择Advanced sub-modules behaviours
Recursively update submodulesUpdate tracking submodules to tip of branchUse credentials from default remote of parent repositoryBuild Triggers正在检查中Build after other projects are built
Projects to watch字段中,填写要观看的所有项目,并用逗号分隔:dummy-child-a, dummy-child-bparent没有会改变的源代码,你不需要Poll SCM做这个 Jenkins 工作Trigger even if the build fails你就完成了。对 child-a 或 child-b 的任何更改都会触发父级的重建。该方法假设父模块中的子模块数量不经常变化。如果要添加另一个子模块,则需要创建另一个dummy项目,然后更新Jenkins 构建projects to watch的版本parent。
这可以分两步完成:
在您想要构建的 Jenkins 作业上启用构建触发器 url。这是在“触发远程构建”选项卡下完成的。url 的格式为:JENKINS_URL/job/MY_JOB_NAME/build?token=TOKEN_NAME。
在子模块 A 中设置一个 git post-receive 钩子来调用上面的 url。一个简单的方法就是使用curl: curl JENKINS_URL/job/MY_JOB_NAME/build?token=TOKEN_NAME。
然后,对子模块 A 的推送将通过调用 url 来触发主项目 Jenkins 的工作。配置 Jenkins 作业以在构建之前更新其代码或您需要的任何其他细节。
这个答案提供了很多关于如何设置 git hook 的细节。
| 归档时间: |
|
| 查看次数: |
5581 次 |
| 最近记录: |