Jenkins pipeline git command submodule update
我想在Git克隆上更新子模块。
有没有办法用jenkins pipeline git命令来完成这个操作?
目前我正在做这个…
1 2 3 | git branch: 'master', credentialsId: 'bitbucket', url: 'ssh://bitbucket.org/hello.git' |
但是,一旦克隆,它就不会更新子模块。
作为管道步骤的git命令非常有限,因为它提供了更复杂的checkout命令的默认实现。对于更高级的配置,您应该使用checkout命令,为此您可以传递大量参数,包括所需的子模块配置。
您想要使用的可能是这样的:
1 2 3 4 5 6 7 8 9 10 11 | 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非常好的
使用当前的Git插件,您甚至不需要它。
The GIT plugin supports repositories with submodules which in turn have submodules themselves.
This must be turned on though:in Job Configuration -> Section Source Code Management, Git -> Advanced Button (under Branches to build) -> Recursively update submodules
但运营商正在使用管道。
因此,一个简单的第一个构建步骤就足够了:
1 | git submodule update --init --recursive |
但是,OP补充道:
Yes but if I'm using
sh 'git submodule update --init --recursive' , this will use$HOME/id_rsa right? I want to pass in my private key for this command if possible.
有可能:在管道语法中,可以定义环境变量。这意味着您可以设置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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克隆将使用正确的私钥。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | checkout([ $class: 'GitSCM', branches: scm.branches, doGenerateSubmoduleConfigurations: false, extensions: [[ $class: 'SubmoduleOption', disableSubmodules: false, parentCredentials: true, recursiveSubmodules: true, reference: '', trackingSubmodules: false ]], submoduleCfg: [], userRemoteConfigs: scm.userRemoteConfigs ]) |