我有一个包含子模块的存储库。这些是在可公开访问的 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
条目是您想要的。而且文档有点特别。