Jenkins管道git命令子模块更新

时间:2017-02-17 05:32:16

标签: git jenkins jenkins-pipeline

我想在git clone上更新子模块。

有没有办法用Jenkins管道Git命令做到这一点?

目前我正在这样做......

git branch: 'master',
    credentialsId: 'bitbucket',
    url: 'ssh://bitbucket.org/hello.git'

然而,克隆后不会更新子模块

4 个答案:

答案 0 :(得分:34)

作为管道步骤的git command相当有限,因为它提供了更复杂checkout command的默认实现。对于更高级的配置,您应该使用checkout command,您可以为其传递大量参数,包括所需的子模块配置。

您想要使用的内容可能是这样的:

checkout([$class: 'GitSCM',
          branches: [[name: '*/master']],
          doGenerateSubmoduleConfigurations: false,
          extensions: [[$class: 'SubmoduleOption',
                        disableSubmodules: false,
                        parentCredentials: false,
                        recursiveSubmodules: true,
                        reference: '',
                        trackingSubmodules: false]], 
          submoduleCfg: [], 
          userRemoteConfigs: [[url: 'your-git-server/your-git-repository']]])

从文档中编写这些行通常很麻烦,我建议您使用Jenkins非常好Snippet Generator(YourJenkins> yourProject> PipelineSyntax)来自动生成结帐行!

答案 1 :(得分:19)

使用当前的Git plugin,您甚至不需要它。

  

GIT插件支持具有子模块的存储库,子模块本身又具有子模块   必须打开它:

     

在作业配置中 - >部分源代码管理,Git - >高级按钮(在分支下构建) - >递归更新子模块

但OP正在使用管道。

所以简单的第一个构建步骤就足够了:

git submodule update --init --recursive

然而,OP补充道:

  

是的,但如果我使用sh 'git submodule update --init --recursive',这会使用$HOME/id_rsa吗?如果可能的话,我想传入我的私钥用于此命令。

有可能:在Pipeline syntax中,您可以define environment variables 这意味着您可以设置GIT_SSH_COMMANDwith Git 2.10+) 这样就可以reference your own private key

pipeline {
    agent any

    environment {
        GIT_SSH_COMMAND = 'ssh -i /path/to/my/private/key'
    }

    stages {
        stage('Build') {
            steps {
                sh 'printenv'
                sh 'git submodule update --init --recursive'
            }
        }
    }
} 

如果任何克隆涉及ssh url,则该ssh克隆将使用正确的私钥。

答案 2 :(得分:11)

checkout([
    $class: 'GitSCM', 
    branches: scm.branches, 
    doGenerateSubmoduleConfigurations: false, 
    extensions: [[
      $class: 'SubmoduleOption', 
      disableSubmodules: false, 
      parentCredentials: true, 
      recursiveSubmodules: true, 
      reference: '', 
      trackingSubmodules: false
    ]], 
    submoduleCfg: [], 
    userRemoteConfigs: scm.userRemoteConfigs
  ])

答案 3 :(得分:0)

如果您知道 <div class="container x mandatory-scroll-snapping""> <div class="pagination">1 / 5</div> <div class="image" id="image-1"></div> <div class="image" id="image-2"></div> <div class="image" id="image-3"></div> <div class="image" id="image-4"></div> <div class="image" id="image-5"></div> </div> <div class="pills"> <div class="circle" id="circle-1"></div> <div class="circle" id="circle-2"></div> <div class="circle" id="circle-3"></div> <div class="circle" id="circle-4"></div> <div class="circle" id="circle-5"></div> </div> 正在使用的凭证名称,您还可以将其显式传递给 git 命令以更新子模块:

checkout scm