我想在git clone上更新子模块。
有没有办法用Jenkins管道Git命令做到这一点?
目前我正在这样做......
git branch: 'master',
credentialsId: 'bitbucket',
url: 'ssh://bitbucket.org/hello.git'
然而,克隆后不会更新子模块
答案 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_COMMAND
(with 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