在 Jenkins 管道阶段隐式加载子模块

Implicitly loading submodules in Jenkins pipeline stages

有没有办法使用 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
    }
  }
 }
}

有实现方法吗?我没找到。

我假设您到目前为止一直在使用 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 生成器。

您还可以配置流水线 SCM 检出功能以使用 Jenkins 项目配置获取所有子模块,并保留 Jenkinsfile 简短。找到 Jenkins 管道 SCM 配置项 Additional Behaviors 并单击添加按钮,选择 Advanced sub-modules behaviors,然后在出现的选项列表中,选中选项 Recursively update submodules 和选项 Use credentials from default remote of parent repository.我附上了我的 Jenkins(版本 2.303.1)的屏幕截图,其中显示了已选中所需框的选项列表。