这就是我想要做的:每次对我的存储库中的特定分支进行提交时,我想提取该提交中更改的所有 YAML 文件,对其内容进行一些修改,然后将结果作为 PR 推送到一个新的、独立的分支。我已经弄清楚了这里的大部分步骤,但我陷入了解析提交文件内容部分。我已经尝试过
get_item_content
和
get_blob_content
提交,但没有看到任何文件被下载。所以我特别想知道:
- 是否可以从提交(不是 PR)中获取更改的文件并解析它们。
- 或者如果不能,那么至少我想从提交到新分支并创建 PR。是否可以挑选特定文件?
当然,可以使用 Azure DevOps API 和 Python 来实现这一点。以下是关于如何解决的问题的分步指南:
1. 获取提交详细信息:
首先,需要获取特定提交的详细信息,包括它更改的文件。可以使用
Commits - Get Commit
API 来实现这一点。
import base64
from azure.devops.connection import Connection
from msrest.authentication import BasicAuthentication
# 填写的个人访问令牌、组织、项目和存储库 ID
personal_access_token = 'YOUR_PERSONAL_ACCESS_TOKEN'
organization_url = 'https://dev.azure.com/YOUR_ORGANIZATION'
project_name = 'YOUR_PROJECT_NAME'
repository_id = 'YOUR_REPOSITORY_ID'
commit_id = 'YOUR_COMMIT_ID'
# 创建与 Azure DevOps 的连接
credentials = BasicAuthentication('', personal_access_token)
connection = Connection(base_url=organization_url, creds=credentials)
# 获取 git 客户端
git_client = connection.clients.get_git_client()
# 获取提交详细信息
commit_details = git_client.get_commit(repository_id, commit_id, project_name)
# 打印更改的文件
print(commit_details.changes)
2. 获取更改的文件内容:
提交详细信息包括更改的文件列表及其 blob ID。可以使用
Items - Get Item
API 及其 blob ID 检索每个文件的原始内容。
# 循环遍历更改的文件
for change in commit_details.changes:
if change.item.git_item_type == 'blob' and change.item.path.endswith('.yaml'): # 检查文件是否是 YAML 文件
# 获取文件内容
file_content = git_client.get_item_content(repository_id, change.item.path, project_name, download=True)
# 将内容解码为字符串
file_content_str = file_content.decode('utf-8')
# 在此处对 YAML 文件内容进行修改
# ...
# 使用更新后的内容创建新的提交并将文件推送到新分支
# ...
3. 创建新的提交和拉取请求:
修改 YAML 文件内容后,需要创建一个新的提交,并将更改推送到存储库中的新分支。然后,可以创建一个从新分支指向目标分支的拉取请求。
# 创建新的分支
new_branch_name = f'update-yaml-{commit_id[:7]}'
git_client.create_branch(new_branch_ref, repository_id, source_branch='main', project=project_name)
# 使用更新后的内容创建新的提交
new_commit = git_client.create_push(
[new_commit], repository_id, project_name
)
# 创建拉取请求
pr = git_client.create_pull_request(
git_pull_request, repository_id, project_name
)
请记住用自己的值替换占位符值。 此脚本概述了该过程,可能需要调整代码以适应的特定需求。
此外,请记住为的 Azure DevOps 帐户生成个人访问令牌,并具有必要的权限来访问代码和创建拉取请求。
标签:python,git,azure-devops,azure-pipelines,ado From: 78814586