在Visual Studio Team Services中的构建作业中执行git命令(是VSO)

Yut*_*ang 23 git azure-devops azure-pipelines

[环境:团队服务,GIT,托管构建代理]

我想创建一个能够执行以下操作的Team Services构建定义:

  1. 执行脚本以根据仓库中的现有文件生成一些新文件

  2. 将生成的文件提交/推送回repo

我可以毫无问题地做#1.但我不知道我怎么做#2.

我发现我实际上能够从构建作业中运行git.exe.但我不确定如何将凭证传递给git.基于构建日志,它失败了,因为它试图从stdin获取用户名.

我尝试在构建定义中添加一个步骤,例如"git config --global user.name xxxx",但它仍然没有帮助.

这是一个受支持的场景吗?有什么建议?

谢谢!


编辑

我在构建脚本中尝试了以下方法:

git -c http.extraheader="AUTHORIZATION: bearer %SYSTEM_ACCESSTOKEN%" pull ...
Run Code Online (Sandbox Code Playgroud)

它似乎适用于拉等等命令.但是当我试图推动更改时,我得到以下错误:

fatal: unable to access 'https://example.visualstudio.com/SampleTeam/_git/SampleRepo/': SSL read: error:00000000:lib(0):func(0):reason(0), errno 10054
Run Code Online (Sandbox Code Playgroud)

思考?

Yut*_*ang 39

很抱歉在这里回答我自己的问题......

我刚从一些TFS专家那里得到了一些提示,他向我指出了这篇文章:https://www.visualstudio.com/en-us/docs/build/scripts/git-commands,它完美地解决了我的问题.

我想我应该分享它,以帮助那些可能遇到与我相同情况的人.

这里我引用了关键步骤(重新格式化了一下):

授予构建服务的版本控制权限

转到"版本控制"控制面板选项卡

  • 团队服务:https:// {your-account} .visualstudio.com/DefaultCollection/{your-team-project}/_admin/_versioncontrol

  • 内部部署:https:// {your-server}:8080/tfs/DefaultCollection/{your-team-project}/_admin/_versioncontrol

在" 版本控制"选项卡上,选择要在其中运行Git命令的存储库,然后选择" 项目集合构建服务"(account_name).授予您要运行的Git命令所需的权限.通常,您需要授予:

  • 分支创建:允许
  • 贡献:允许
  • 阅读:继承允许
  • 标签创建:继承允许

完成授予权限后,请务必单击" 保存更改".

启用构建定义以运行Git.exe

  • 变量选项卡上设置此变量:system.prefergit = true
  • 选项选项卡上,选择允许脚本访问OAuth令牌.

使用这些设置,无需安装Git Build Tools扩展或调整Credential Manager.您也不需要为OAuth令牌显式设置额外标头.我觉得这确实是一个非常巧妙的解决方案.:)

但真的很感谢Eddie和VonC的帮助!

  • 对我来说,OAuth复选框位于:任务 - >阶段(在代理上运行) - >允许脚本访问OAuth令牌.谢谢/sf/answers/3464298841/. (4认同)

Pot*_*mer 5

Visual Studio Team Services(VSTS)现在具有内置功能来执行此操作:

  1. 向帐户Project Collection Build Service(account_name)授予对VSTS中相应存储库的访问权限。
  2. 在代理阶段,选中允许脚本访问OAuth令牌框。
  3. 现在,在任务中,您可以引用变量SYSTEM_ACCESSTOKEN以访问git存储库: git clone https://randomusername:${SYSTEM_ACCESSTOKEN}@instance.visualstudio.com/proj1/_git/repo

参考:https : //github.com/Microsoft/vsts-tasks/issues/962

  • 选项现在处于Agent阶段...我在寻找此复选框时死亡:-D (4认同)