当前位置: 首页 > 知识库问答 >
问题:

如何让子模块触发Jenkins构建

万修然
2023-03-14

我有一个子模块a,它不是一个独立的应用程序。它需要主应用程序才能工作。我想为创建一个CI构建,这样每当提交被推送到时,它就会触发一个具有主项目代码的构建。

我在詹金斯怎么做?

我需要做的是:

  • 提交会触发生成

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

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

共有2个答案

曹智
2023-03-14

这可以通过两个步骤完成:

>

在调用上述url的子模块a中设置git post receive挂钩。一个简单的方法就是使用curl:curl-JENKINS\u-URL/job/MY\u-job\u-NAME/build?令牌=令牌名称。

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

这个答案提供了很多关于如何设置git挂钩的细节。

百里智勇
2023-03-14

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

    • 只有子模块的空存储库
    • 一个子模块回购
    • 另一个子模块回购

    当使用子模块克隆时,它看起来像:

    parent\
        child-a\*
        child-b\*
    

    在Jenkins中,创建一个名为Dummy-child-a的自由式项目。

    • Source Code Management下为child-a
    • 设置 Repository URL
    • 构建触发器下,您选择轮询SCM并设置所需的间隔
    • Build下单击添加构建步骤
      • 根据您的操作系统选择执行Windows批处理命令执行shell
      • 在脚本框中做一些类似回显你好(这是虚拟部分)

      对child-b重复这些步骤

      在Jenkins创建了一个名为“parent”的自由泳项目。这就是我们实际建造的地方

      • 在源代码管理下,为父项设置存储库URL
      • 单击“附加行为”下的“添加”,然后选择“高级子模块行为”
        • 支票:
        • 递归更新子模块
        • 将跟踪子模块更新到分支尖端
        • 使用来自父存储库默认远程的凭据
        • 要观看的项目字段中,用逗号分隔填充所有要观看的项目:Dummy-chid-a, Dummy-chid-b
        • 如果没有将要更改的源代码,则不需要轮询SCM对这个Jenkins工作
        • 检查即使构建失败也触发

        你就完了。对child-a或child-b的任何更改都将触发父级的重建。该方法假设父模块中的子模块数量不经常变化。如果要添加另一个子模块,则需要制作另一个虚拟项目,然后更新项目以观看父级Jenkins构建的。

 类似资料:
  • 问题内容: 我们有一个带有外部子模块的git存储库。子模块更改时,我们必须触发构建。您能否建议我们如何使用xtrigger插件轮询子模块上的更改。使用shell脚本或监视文件还是其他更好? 有关我们的构建流程的更多信息。第1步。使用子模块步骤2克隆根存储库。为每个子模块步骤#2.1(在子模块中)执行作业。切换到正确的分支(例如,主)步骤#2.1(在子模块中)。拉取子模块的最新资源 现在,如果有人提

  • 问题内容: 我在Jenkins中建立了一个大型Maven多模块构建。它是为增量构建而设置的。 触发后,它将解析所有POM并弄清楚需要构建什么。 当前已将其设置为触发SCM更改。 我想进行此构建,以便可以执行以下操作: 仍然手动启动它。当我这样做时,它的增量构建行为将像今天一样起作用。 从Subversion提交钩子触发构建 。我想知道,如果我通过出色的指令来设置提交挂钩的麻烦,那将不会导致构建过程

  • 我有一个Jenkins/Maven/Git多模块项目,其中包含一个子模块(由承包商开发,没有什么可以改变它)。由于Git和子模块,我必须使用命令“Git Clone-recursive ssh://xxxxxxx.Git”在Linux中克隆repo。 这意味着我必须检查Jenkins Git插件选项“Advanced sub-modules Behavious”和“recursivy update

  • 我正在尝试将Swift单元测试添加到一个基于Objective-C的项目中。如果我尝试测试代码,构建将失败,并出现以下错误: 然而,如果我向Foo目标添加一个Swift文件,单元测试将正确构建和运行,因此似乎只有当其中有Swift文件时,Xcode才会生成Foo模块。当模块不包含Swift文件时,如何强制Xcode创建模块?(如果可能的话,我希望避免使用不必要的Swift文件。)

  • 问题内容: 我们想动态地触发詹金斯中不同下游版本中的集成测试。我们有一个参数化的集成测试项目,该项目将测试名称作为参数。我们从git repo动态确定测试名称。 我们有一个父项目,该项目使用jenkins-cli为源代码中发现的每个测试启动集成项目的构建。父项目和集成项目通过匹配的指纹相关联。 这种方法的问题是汇总测试结果不起作用。我认为问题在于“下游”集成测试是通过jenkins-cli启动的,

  • 问题内容: 我在詹金斯的一个项目中有一个子模块。我已启用高级设置以递归方式更新子模块。 运行构建时,我看到工作空间中包含子模块中的文件。问题是,这似乎是子模块的第一个修订版。当我推送更改(托管在GitHub上的存储库)时,Jenkins似乎没有更新子模块以获取正确的更改。有人看过吗? 问题答案: 看来我找到了解决方案: 我添加了一个构建步骤来执行以下shell命令: