【问题标题】:GitLab CI How to trigger pipeline for submodules in maven multi-module projectGitLab CI 如何在 Maven 多模块项目中触发子模块的管道
【发布时间】:2017-01-31 13:51:12
【问题描述】:

我有一个多模块 Maven 项目:

root
    SubmoduleA
        src
        pom.xml      
    SubmoduleB
        src
        pom.xml
    pom.xml
    .gitlab-ci.yml

当有人签入仅影响 SubmoduleA 的代码时,有什么方法可以仅在 SubmoduleA 上触发 CI 管道? 例如,有人在 SubmoduleA 中进行了更改。一旦他们提交并推送,我想只在 SubmoduleA 上自动运行 build->test->deploy,因为 SubmoduleB 没有任何更改。

有没有办法为 repo 中的特定子模块或子项目指定触发器和作业?

【问题讨论】:

    标签: maven git-submodules gitlab-ci multi-module runner


    【解决方案1】:

    我相信您需要为该子模块创建一个 gitlab 项目,并且该子模块需要自己的 .gitlab-ci.yml。届时,它将可以在 gitlab-ci-runner 本身内构建。

    我不是 Maven(或 Java)方面的专家,但我想在更大的项目中,您的子模块可以成为存储在您自己的内部存储库中的单独的二进制构建库。您在构建中生产和使用 jar,并使用 Maven 本身为它们提供服务。然后 Maven 可以使用其内置的依赖解析和包获取功能为您下载,并且在大型 Java 项目构建场景中使用它可能会比使用 git 子模块更好。

    我现在在 .Net 世界中使用自定义 nuget 提要执行此操作,结果与您正在执行的操作相似,因为构建发生并且构建服务器的资源不会被源包含和重新编译这些资源浪费第二次模块。

    【讨论】:

      【解决方案2】:

      Gitlab 可以在目录更改时触发作业:https://docs.gitlab.com/ee/ci/yaml/#onlychanges

      对于这个解决方案:

      • 您应该为 Maven 存储库启用 gitlab 缓存以保留以前的构建模块。
      • 然后您可以定义作业以更改路径
      stages:
        - modules
        - build
      
      moduleB:
        stage: modules
        script: 
          - mvn $MAVEN_OPTS -pl projectB clean install --also-make $MAVEN_CLI_OPTS
        only:
          changes:
            - projectB/**
      
      master_job:
        stage: build
        dependencies:
          - projectB
        script:
          - >
            mvn $MAVEN_OPTS -pl projectA clean install $MAVEN_CLI_OPTS
      

      【讨论】:

        【解决方案3】:

        Gitlab 有几个选项来构建您的 CI/CD:

        • 基本
        • DAG
        • 孩子/父母

        您可以混合使用它们。它们不是相互排斥的。

        您对孩子/父母感兴趣

        stages:
          - triggers
        
        trigger_a:
          stage: triggers
          trigger:
            include: a/.gitlab-ci.yml
          rules:
            - changes:
                - a/*
        
        trigger_b:
          stage: triggers
          trigger:
            include: b/.gitlab-ci.yml
          rules:
            - changes:
                - b/*
        

        然后您必须包括 ab 项目的管道。您可以在their documentation中找到更多信息

        【讨论】:

          猜你喜欢
          • 2021-03-11
          • 2022-11-15
          • 1970-01-01
          • 2022-01-19
          • 1970-01-01
          • 2014-03-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多