在脚本中运行 Git 命令
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
对于某些工作流,你需要自己的生成管道运行 Git 命令。 例如,在完成基于功能分支的 CI 生成后,团队可能希望将该分支合并到主体中。
Microsoft 托管代理和本地代理上均可使用 Git。
启用脚本以运行 Git 命令
注意
在开始之前,请确保帐户的默认标识是使用以下代码设置的。 这必须作为签出代码后的第一步来完成。
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
向生成服务授予版本控制权限
通过“组织设置”>“常规”>“项目”转到组织的项目设置页面。
选择要编辑的项目。
在“项目设置”中,选择“存储库”。 选择要在其上运行 Git 命令的存储库。
选择“安全性”以编辑存储库安全性。
搜索“项目集合生成服务”。 选择标识 {{your project name}} Build Service ({your organization})(而非组 Project Collection Build Service Accounts ({your organization}))。 默认情况下,此标识可以从存储库中读取数据,但不能将任何更改推送回存储库。 授予要运行的 Git 命令所需的权限。 通常情况下,需要授予以下权限:
- 创建分支:允许
- 参与:允许
- 读取:允许
- 创建标记:允许
转到“版本控制”控制面板选项卡
Azure Repos:
https://dev.azure.com/{your-organization}/{your-project}/_admin/_versioncontrol
本地:
https://{your-server}:8080/tfs/DefaultCollection/{your-project}/_admin/_versioncontrol
如果看到此页面,请选择存储库,然后选择链接:
在“版本控制”选项卡上,选择要在其中运行 Git 命令的存储库,然后选择“项目集合生成服务”。 默认情况下,此标识可以从存储库中读取数据,但不能将任何更改推送回存储库。
授予要运行的 Git 命令所需的权限。 通常情况下,需要授予以下权限:
- 创建分支:允许
- 参与:允许
- 读取:允许
- 创建标记:允许
授予权限后,请确保选择“保存更改”。
允许脚本访问系统令牌
在“选项”选项卡上,选择“允许脚本访问 OAuth 令牌”。
确保清理本地存储库
生成管道不会自动清理对本地存储库的某些类型的更改。 因此,请确保:
- 删除创建的本地分支。
- 撤消 git 配置更改。
如果在使用本地代理时遇到问题,请确保存储库干净:
示例
列出存储库中的文件
任务 | 参数 |
---|---|
实用工具:命令行 列出 Git 存储库中的文件。 |
工具:git 参数: ls-files |
将功能分支合并到主分支
你希望通过一个 CI 生成合并到主分支(如果生成成功)。
在“触发器”选项卡上,选择“持续集成(CI)”并包括要生成的分支。
在存储库的根目录中创建 merge.bat
:
@echo off
ECHO SOURCE BRANCH IS %BUILD_SOURCEBRANCH%
IF %BUILD_SOURCEBRANCH% == refs/heads/main (
ECHO Building main branch so no merge is needed.
EXIT
)
SET sourceBranch=origin/%BUILD_SOURCEBRANCH:refs/heads/=%
ECHO GIT CHECKOUT MAIN
git checkout main
ECHO GIT STATUS
git status
ECHO GIT MERGE
git merge %sourceBranch% -m "Merge to main"
ECHO GIT STATUS
git status
ECHO GIT PUSH
git push origin
ECHO GIT STATUS
git status
在“生成”选项卡上,将此项添加为最后一个任务:
任务 | 参数 |
---|---|
实用工具:批处理脚本 运行 merge.bat。 |
路径:merge.bat |
FAQ
如果我的远程存储库位于 GitHub 或其他 Git 服务(如 Bitbucket 云)中,是否可以运行 Git 命令?
是
可以使用哪些任务来运行 Git 命令?
如何避免在脚本进行推送时触发 CI 生成?
将 ***NO_CI***
添加到提交消息。 示例如下:
git commit -m "This is a commit message ***NO_CI***"
git merge origin/features/hello-world -m "Merge to main ***NO_CI***"
将 [skip ci]
添加到提交消息或说明。 示例如下:
git commit -m "This is a commit message [skip ci]"
git merge origin/features/hello-world -m "Merge to main [skip ci]"
还可以使用这些变体中的任何一种提交到 Azure Repos Git、Bitbucket Cloud、GitHub 和 GitHub Enterprise Server。
[skip ci]
或[ci skip]
skip-checks: true
或skip-checks:true
[skip azurepipelines]
或[azurepipelines skip]
[skip azpipelines]
或[azpipelines skip]
[skip azp]
或[azp skip]
***NO_CI***
需要使用代理吗?
至少需要一个代理才能运行生成或发布。
我遇到了问题。 如何对其进行故障排除?
请查看排查生成和发布问题。
我无法选择默认代理池,无法将生成或发布排队。 如何修复此问题?
请查看代理池。
我的 NuGet 推送任务失败,出现“错误: 无法获取本地颁发者证书”错误。 如何解决此问题?
可通过添加受信任的根证书来解决此问题。 可将环境变量 NODE_EXTRA_CA_CERTS=file
添加到生成代理,也可在管道中添加任务变量 NODE.EXTRA.CA.CERTS=file
。 有关此变量的更多详细信息,请参阅 Node.js 文档。 有关在管道中设置变量的说明,请参阅在管道中设置变量。
我在本地使用 TFS,但没有看到其中某些功能。 为什么看不到?
其中某些功能仅在 Azure Pipelines 上可用,在本地尚不可用。 如果你已升级到最新版本的 TFS,则可在本地使用这些功能。