VSTS Build:Git子模块自动化

时间:2017-08-22 14:33:07

标签: git azure-devops azure-pipelines

我们从TFS切换到GIT。 我们每次启动新版本时都会尝试更新子模块。

我们遵循了本指南:https://www.visualstudio.com/en-us/docs/build/scripts/git-commands#enable

我们在第49行发生错误。

我们认为实际上我们需要进行身份验证。但我们不确定。 我们使用:git pull,它的工作原理 但是当我们这样做时:git submodule foreach git pull origin master。 我们有消息"进入"并没有任何反应

有人已经有这个问题吗?你是怎么解决的?

VSTS BUILD

4 个答案:

答案 0 :(得分:1)

这似乎是由使用带子模块的git命令构建VSTS的方式引起的。

我发布了VSTS build hang up when execute git commands related to git submoudle,您可以跟进此问题。

顺便说一句,对于OAuth,您可以在.gitmodules中添加凭证。

答案 1 :(得分:1)

这是一个身份验证问题。您需要将OAuth令牌放入每个子模块存储库中。

确保您已启用允许脚本访问OAuth令牌的构建定义设置。如文档所述,这会将令牌填充到名为System.AccessToken的变量中。它还会将令牌填充到git配置设置中,当您在启用设置后运行它时,您将在获取源步骤结束时看到该设置。这就是git对VSTS进行身份验证的方式。您需要为每个repos构建一个config语句,并且您需要cd进入该子模块以在该repo中发布它。

以下是我使用的Powershell脚本:

$mods = (git submodule status) | % { ($_.Trim() -split " ")[1] }
$baserepo = ($env:BUILD_REPOSITORY_URI).TrimEnd($env:BUILD_REPOSITORY_NAME)
foreach($mod in $mods)
{
cd $mod
$cmd = 'git config http.' + $baserepo + $mod + '.extraheader "AUTHORIZATION: bearer ' + $env:System_AccessToken + '"'
write $cmd
iex $cmd
cd ..
}

然后运行cmd或powershell步骤:

git submodule update --remote

最后,您应该在完成后清理令牌,因此OAuth不会在构建代理程序的.git / config文件中挂起:

$mods = (git submodule status) | % { ($_.Trim() -split " ")[1] }
$baserepo = ($env:BUILD_REPOSITORY_URI).TrimEnd($env:BUILD_REPOSITORY_NAME)
foreach($mod in $mods)
{
cd $mod
$cmd = 'git config --unset-all http.'+ $baserepo + $mod + '.extraheader'
write $cmd
iex $cmd
cd ..
}

答案 2 :(得分:0)

刚刚通过谷歌搜索发现了这个问题: 您可以使用相对路径,例如:

origin  ssh://USERNAME@vs-ssh.visualstudio.com:22/PROJECT/_ssh/REPO (fetch)

.gitmodules可以包含:

[submodule "SUBMODULE"]
    path = SUBMODULE
    url = ../SUBMODULE

Source

祝你有美好的一天:)

答案 3 :(得分:0)

在您的.gitmodules文件中,您可以尝试在网址中添加组织名称(区分大小写)

[submodule "MySubModule"]
path = MySubModule
url = https://<Organization Name>@dev.azure.com/<Organization Name>/_git/<Project Name>