如何让子模块触发Jenkins构建

时间:2015-11-14 22:51:45

标签: git jenkins

我有一个不是独立应用程序的子模块A.它需要它的主要应用程序才能工作。我想为A创建一个CI构建,这样无论何时将提交推送到A,它都会触发使用主项目代码的构建。

我如何在詹金斯那样做?

我需要做什么:

  • 对A的提交会触发构建。
  • 构建克隆主项目代码,并在A的最新提交中提取A的最新代码(不是主项目知道的提交)。

我如何使用Jenkins和GIT做到这一点?

注意我有多个项目子模块。子模块A触发一个构建,该构建从A和最新的主代码中提取最新的更改,并从其他子模块中提取更新。

2 个答案:

答案 0 :(得分:1)

这可以在没有git钩子的情况下完成。在这个例子中,我们有3个回购:

    • 只有子模块的空仓库
  1. 儿童一个
    • 一个子子模块回购
  2. 子-B
    • 另一个子子模块repo
  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
      • 根据您的操作系统选择BuildAdd 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)

这可以分两步完成:

  1. 在您要构建的Jenkins作业上启用构建触发器URL。这是在"远程触发构建"标签。该网址将采用以下格式:JENKINS_URL/job/MY_JOB_NAME/build?token=TOKEN_NAME

  2. 在子模块A中设置一个git post-receive hook,调用上面的url。一个简单的方法就是使用curl:curl JENKINS_URL/job/MY_JOB_NAME/build?token=TOKEN_NAME

  3. 推送到子模块A然后通过调用url来触发主项目Jenkins的工作。配置Jenkins作业以在构建之前更新其代码或您需要的任何其他细节。

    This answer提供了有关如何设置git hook的很多细节。