我有一个不是独立应用程序的子模块A.它需要它的主要应用程序才能工作。我想为A创建一个CI构建,这样无论何时将提交推送到A,它都会触发使用主项目代码的构建。
我如何在詹金斯那样做?
我需要做什么:
我如何使用Jenkins和GIT做到这一点?
注意我有多个项目子模块。子模块A触发一个构建,该构建从A和最新的主代码中提取最新的更改,并从其他子模块中提取更新。
答案 0 :(得分:1)
这可以在没有git钩子的情况下完成。在这个例子中,我们有3个回购:
当使用子模块克隆时,它看起来像:
ERROR Can't find source root. I could not find a ".gn" file in the current directory or any parent,and the --root command-line argument was not specified.
在Jenkins中创建一个名为parent\
child-a\*
child-b\*
的自由式项目。
dummy-child-a
下设置Source Code Management
的{{1}} Repository URL
下,您选择child-a
并设置所需的时间间隔Build Triggers
下点击Poll SCM
Build
或Add build step
Execute Windows batch command
(这是虚拟部分)对Execute shell
在Jenkins中创建一个名为echo hello
的自由式项目。这是我们实际进行建筑的地方
child-b
下设置parent
的{{1}} Source Code Management
下的Repository URL
,然后选择parent
add
Additional Behaviours
Advanced sub-modules behaviours
Recursively update submodules
下查看Update tracking submodules to tip of branch
Use credentials from default remote of parent repository
字段中,使用逗号分隔填充要观看的所有项目:Build Triggers
Build after other projects are built
没有可更改的源代码,那么您不需要{Jender这个Jenkins职位上的Projects to watch
dummy-child-a, dummy-child-b
你已经完成了。对child-a或child-b的任何更改都将触发父级的重建。此方法假定父级中的子模块数不经常更改。如果要添加另一个子模块,则需要创建另一个parent
项目,然后更新Poll SCM
Jenkins构建的Trigger even if the build fails
。
答案 1 :(得分:0)
这可以分两步完成:
在您要构建的Jenkins作业上启用构建触发器URL。这是在"远程触发构建"标签。该网址将采用以下格式:JENKINS_URL/job/MY_JOB_NAME/build?token=TOKEN_NAME
。
在子模块A中设置一个git post-receive hook,调用上面的url。一个简单的方法就是使用curl:curl JENKINS_URL/job/MY_JOB_NAME/build?token=TOKEN_NAME
。
推送到子模块A然后通过调用url来触发主项目Jenkins的工作。配置Jenkins作业以在构建之前更新其代码或您需要的任何其他细节。
This answer提供了有关如何设置git hook的很多细节。