使用Github组织插件在Jenkins中检出子模块

fab*_*iim 12 git groovy git-submodules jenkins jenkins-pipeline

我有一个由Github组织插件创建的Jenkins构建工作.在Jenkinsfile此构建检出使用的代码checkout scm,这是很好,因为它无论是建设PR引起的变化或推到主分支时,计算出正确的分支/修订结帐.

我怎么能这样做:

node {
  checkout scm 
}
Run Code Online (Sandbox Code Playgroud)

结帐子模块?

小智 18

该解决方案sh 'git submodule...'仅适用于没有特殊身份验证的Repositorys.

我们在设置中使用以下解决方案:

node {
    checkout([
        $class: 'GitSCM',
        branches: scm.branches,
        doGenerateSubmoduleConfigurations: true,
        extensions: scm.extensions + [[$class: 'SubmoduleOption', parentCredentials: true]],
        userRemoteConfigs: scm.userRemoteConfigs
    ])
}
Run Code Online (Sandbox Code Playgroud)


Oha*_*had 12

在Github组织插件中,添加高级子模块行为。

组织设置页面

并像这样配置它:

在此处输入图片说明


正如@oeuftete指出的,如果子模块使用SSH协议,您可能还需要添加“通过SSH签出”行为(并提供密钥证书)。

如此处所述:https : //wiki.jenkins.io/display/JENKINS/Git+Plugin

  • 这可行,但是如果子模块使用SSH协议,您可能还需要添加“通过SSH签出”行为(并提供密钥证书)。 (3认同)

Cru*_*mmy 5

改成这样:

node {
    checkout scm
    sh 'git submodule update --init'
}
Run Code Online (Sandbox Code Playgroud)

如果 Jenkins 在 Windows 上运行,则使用bat代替。sh

  • 这对我有用,但前提是 Jenkins 用户的默认 SSH 密钥可以读取所有正在更新的存储库。根据我对其他答案的评论,我无法获取存储在 Jenkins 中的用于子模块的凭据,即使它们用于主要结帐。另外,因为我有多个子模块,所以 SSH 密钥不能是部署密钥(只能与一个存储库关联),但需要与具有适当权限的 Github 用户关联。 (2认同)