首页 > 解决方案 > 在 Jenkins 流水线阶段隐式加载子模块

问题描述

有没有办法使用 Git 存储库修改 Jenkins 管道脚本以自动初始化子模块?

pipeline {
 stages {
  stage('Something A') {
    steps {
      sh 'git submodule update --init'
      // stuff
    }
  }
  stage('Something B') {
    steps {
      sh 'git submodule update --init'
      // stuff
    }
  }
 }
}

最好应该更新为类似

pipeline {
 options { submodule auto }
 stages {
  stage('Something A') {
    steps {
      // stuff
    }
  }
  stage('Something B') {
    steps {
      // stuff
    }
  }
 }
}

有执行此操作的方法吗?我找不到任何东西。

标签: gitjenkinsgroovyjenkins-pipelinegit-submodules

解决方案


我假设您到目前为止一直在使用该git步骤来克隆存储库。

但是对于高级功能(如子模块),有checkout可用的步骤: https ://jenkins.io/doc/pipeline/steps/workflow-scm-step/

结帐步骤提供了更新所有子模块的选项,甚至可以递归更新子模块,例如:

checkout([$class: 'GitSCM',
    branches: [[name: '*/master']],
    doGenerateSubmoduleConfigurations: false,
    extensions: [[$class: 'SubmoduleOption',
        disableSubmodules: false,
        parentCredentials: false,
        recursiveSubmodules: false,
        reference: '',
        trackingSubmodules: false
    ]],
    submoduleCfg: [],
    userRemoteConfigs: [[url: 'ssh://myserver/myrepo']]
])

实际上启用子模块克隆的是SubmoduleOption上面示例中所见的扩展。

由于语法 - 比方说 - 稍微复杂一点,我建议使用 snipped 生成器。


推荐阅读