我有一个托管在Enterprise GitHub实例中的项目。该项目引用同一实例中的子模块。
为访问主项目,我在Github存储库中配置了“ DeployKey_1”。
为访问子模块项目,我在Github存储库中配置了“ DeployKey_2”。
注意:我不能在GitHub Enterprise上使用相同的部署密钥:Key Already in Use
Jenkins作业定义为多分支管道,我在Jenkinsfile中使用checkout
命令:
checkout([
$class: 'GitSCM',
branches: scm.branches,
doGenerateSubmoduleConfigurations: scm.doGenerateSubmoduleConfigurations,
extensions: [[$class: 'SubmoduleOption', disableSubmodules: false, parentCredentials: false, recursiveSubmodules: true, reference: '', trackingSubmodules: false]],
userRemoteConfigs: scm.userRemoteConfigs
])
我尝试了两个选项:设置parentCredentials: true
和parentCredentials: false
,但是在执行作业时都导致此错误:
hudson.plugins.git.GitException:命令“ git子模块更新--init --recursive my-submodule“返回状态码1:stdout:stderr:克隆到 '/ private / tmp / workspace / project_develop / my-submodule'... git@github.mycompany.com:权限被拒绝(公钥)。致命的:不能 从远程存储库读取。
请确保您具有正确的访问权限和存储库 存在。致命:克隆 'git@github.mycompany.de:myorga / my-submodule.git' 进入子模块路径 '/ private / tmp / workspace / project_develop / my-submodule' 失败无法克隆“我的子模块”。重试计划的克隆 进入 '/ private / tmp / workspace / project_develop / my-submodule'... git@github.mycompany.de:权限被拒绝(公钥)。致命的:不能 从远程存储库读取。
请确保您具有正确的访问权限
Jenkins均提供了两个部署密钥。那么,如何检出子模块?检出子模块时,如何告诉checkout
命令使用特定的credentials-id
?
答案 0 :(得分:1)
我认为这完全取决于git配置,并且SCM无法支持太多的边缘用例。
关于submoduleCfg
中带有GitSCM的选项,但它只允许您完成设置子模块的名称和分支的工作。
package hudson.plugins.git;
public class SubmoduleConfig implements java.io.Serializable {
private static final long serialVersionUID = 1L;
String submoduleName;
String[] branches;
如果您要从使用密钥转到使用凭据,则可以使用硬编码的用户名/密码来更新子模块配置。
git submodule init
git config submodule.my_submodule.url "https://username:password@url/my_submodule.git"
git submodule update