Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020
Git 命令可用于在 Microsoft托管 代理和 自承载 代理上生成工作流。 例如,在功能分支上完成持续集成(CI)生成后,可以将分支合并到主分支。 本文介绍如何在 Azure Pipelines 生成脚本中运行 Git 命令。
启用脚本以运行 Git 命令
确保 GitHub 使用 Azure DevOps 帐户的默认标识。 如有必要,请将 GitHub 用户设置为签出后的第一步。
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
向生成服务授予权限
项目生成服务必须有权写入源存储库。 按如下所示设置所需的权限:
在项目的“项目设置”中,选择 Repos 下的存储库。
在“ 所有存储库 ”页上,选择“ 安全性 ”以设置项目中所有存储库的权限。 或者,选择要在其中运行 Git 命令的存储库,然后选择该存储库页面上 的安全性 。
显示选择存储库安全性的截图。
在 “用户权限 ”页上,选择 “生成服务 标识”。 请务必在<下选择>项目名称< 生成服务(>组织),而不是“项目集合生成服务帐户”。 默认情况下,此标识可以从存储库读取,但无法向存储库推送任何更改。
下拉列表,选择 Git 命令所需的每个权限旁边的允许,通常包括创建分支、贡献、读取和创建标记。
允许脚本访问系统令牌
若要允许脚本访问 GitHub OAuth 令牌,请执行以下作:
在您的 YAML 管道中添加一个 checkout 步骤,设置 persistCredentials 为 true。
steps:
- checkout: self
persistCredentials: true
有关步骤 checkout 的详细信息,请参阅 steps.checkout 定义。
清理本地存储库
生成管道不会自动清理对本地存储库的某些更改,例如删除本地分支或撤消本地 git config 更改。 如果使用自承载代理遇到问题,可以在运行生成之前清理存储库。
一般情况下,为了提高自承载代理的性能,请不要清理存储库。 清理对于Microsoft托管代理无效,因为它们每次都使用新代理。 有关详细信息,请参阅 清理代理上的本地存储库。
在运行生成之前清理存储库:
在clean步骤中将true设置为checkout。 此选项在提取之前先运行 git clean -ffdx,然后再运行 git reset --hard HEAD。
steps:
- checkout: self
clean: true
在管道编辑器中选择 变量 ,创建或修改 Build.Clean 变量,并将其值设置为 source。
Git 命令示例
以下示例在 命令行 任务和 Batch 脚本 任务中运行 Git 命令。
列出存储库中的文件
若要列出 Git 存储库中的文件,请使用 YAML 管道中的 命令行 任务,如下所示:
- task: CmdLine@2
inputs:
script: 'git ls-files'
将功能分支合并到 main
以下经典管道示例在CI构建成功时将其合并到main。
使用以下内容在存储库的根目录中创建名为 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在经典管道中的 “触发器 ”选项卡上,选中“ 启用持续集成”复选框。
在 “分支筛选器 ”和 “路径”筛选器下,选择要从生成 中包含 或 排除 的分支和路径。
将 Batch 脚本 添加为管道中的最后一个任务。
在任务配置中的 “路径” 下,输入 merge.bat 文件的位置和名称。
FAQ
如果我的远程存储库位于 GitHub 或其他 Git 服务(例如 Bitbucket Cloud)中,是否可以运行 Git 命令?
是的,如果远程存储库位于 GitHub 或其他 Git 服务(例如 Bitbucket Cloud)中,则可以运行 Git 命令。
可以使用哪些任务来运行 Git 命令?
可以使用以下 Azure Pipelines 任务来运行 Git 命令:
如何避免在脚本推送时触发 CI 生成?
为了避免在脚本推送时触发 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 文档中 的 NODE_EXTRA_CA_CERTS=file 。 有关在管道中设置变量的说明,请参阅 在管道中设置变量。
为什么在本地 Azure DevOps Server 中看不到其中一些功能?
其中一些功能仅适用于 Azure DevOps Services ,不适用于本地 Azure DevOps Server。 某些功能仅在最新版本的 Azure DevOps Server 中可用。