Jenkins 管道子模块身份验证



我有一个包含子模块的存储库。这些是在可公开访问的 GitHub 存储库中开发的。但是,我的最终部署是在断开连接的环境中进行的,GitLab 中具有镜像的 GitHub 存储库,这些存储库都需要身份验证。

我的.gitmodules文件包含公开可用的存储库的 URL。我在工作中做了一些sed替换,可以正确更新它们,但不幸的是,我随后无法进行身份验证,因为它是与git url:....步骤分开的操作。

我可以使用以下命令克隆项目:

git url: "git@my.gitlab.secure", branch: "master", credentialsId: "somecredentialid"

不幸的是,这不会更新我的子模块。而且由于我需要身份验证。

我也可以使用checkout进行克隆:

checkout([                                                            
$class: 'GitSCM',                                                   
branches: [[name: 'master']],                               
doGenerateSubmoduleConfigurations: true,                            
extensions: [[$class: 'SubmoduleOption',                            
disableSubmodules: false,                                         
parentCredentials: true,                                          
recursiveSubmodules: true,                                        
reference: '', trackingSubmodules: true]],                        
submoduleCfg: [],                                                 
userRemoteConfigs: [[credentialsId: 'somecredentialid',         
url: 'git@my.gitlab.secure']]                                            
])                                                                    
}                                                                       
}

从文档中我不清楚doGenerateSubmoduleConfigurations: true,submoduleCfg:的用途。

我觉得checkout方法可能是解决方案,但我无法弄清楚如何更新.gitmodules以反映子模块的安全 URL。

这在我的情况下对我有用,类似于您在这里尝试做的事情; 看看这是否有帮助。

checkout changelog: true, poll: true, scm: [
$class: 'GitSCM',
branches: [[name: "master"]],
doGenerateSubmoduleConfigurations: false,
extensions: [[$class: 'SubmoduleOption', recursiveSubmodules: true, parentCredentials: true], [$class: 'PruneStaleBranch']],
submoduleCfg: [],
userRemoteConfigs: [[name: 'origin', url: "Git ssh URL/${projectName}.git", credentialsId: 'Git credential']]
]

我也用头抨击了一段时间,这是我的发现。

doGenerateSubmoduleConfigurations被公开为scm.doGenerateSubmoduleConfigurations,这表明它调用了SubmoduleCombinator。这看起来根本不像你想要的。该选项可能应该是 (a( 在扩展中而不是核心插件中,以及 (b( 被称为doGenerateSubmoduleCombinationMatrix或其他东西。

submoduleCfg在 git 插件中似乎没有得到太多明显的使用。我发现的只是空的测试。

功能似乎已进入SubmoduleOption。这具有调用git.submoduleUpdate(...)的方法onCheckoutCompleted(...)

因此,AFAICSSubmoduleOption类的extensions条目是您想要的。而且文档有点特别。

最新更新