是否可以让 Azure Pipeline 在提交时修改 README.md?
Is it possible to have a Azure Pipeline modify a README.md on commit?
我正在尝试为我在 Azure DevOps Repo 中的代码自动生成和更新文档。在提交到主分支时,我已经将管道配置为 运行 python 脚本。该脚本从存储库中的文件中提取相关信息并创建一个 markdown 文件并将输出存储为 README.md
然而,当我运行管道时什么也没有发生。作业注册为已完成,但 README.md 文件未更改。我没有出现错误或任何错误,所以不太确定出了什么问题,也许是权限问题。有人知道解决这个问题的方法吗?
管道代码:
trigger:
- master
pool:
vmImage: 'ubuntu-latest'
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.8'
- script: |
python -m pip install --upgrade pip
pip install -r requirements.txt
python generate-documentation.py
displayName: 'Generate Documentation'
Python 脚本:
import yaml
file = open('single-source.yaml')
documentation = yaml.load(file, Loader=yaml.FullLoader)
productdetails = documentation["product details"]
specifications = documentation["specifications"]
prerequisites = documentation["prerequisites"]
requiredinputs = documentation["required inputs"]
selfservice = documentation["self service"]
costsandcharging = documentation["costs and charging"]
f = open("README.md","w")
for x in productdetails.values():
f.write(x+"\n" )
f = open("README.md","a")
if "specifications" in documentation:
for x in specifications.values():
f.write(x+"\n")
if "prerequisites" in documentation:
for x in prerequisites.values():
f.write(x+"\n")
if "requiredinputs" in documentation:
for x in requiredinputs.values():
f.write(x+"\n")
if "selfservice" in documentation:
for x in selfservice.values():
f.write(x+"\n")
if "costsandcharging" in documentation:
for x in costsandcharging.values():
f.write(x)
f.close()
完全有可能,完全遵循此行动计划,post 如有问题。
- 在文件转换发生之前和签出之后,添加一个 bash 脚本,内联以下代码:
git checkout $(Build.SourceBranchName)
无论您在 Python 中处理它后进行何种转换,并使用管道中的内联 bash script 步骤验证它,如下所示:
cat README.md
如果您在管道日志中看到 README.md
文件的预期状态,则只需添加第二个内联 bash 脚本,如下所示:
git add README.md
git config --global user.name "$(Build.RequestedFor)"
git config --global user.email "$(Build.RequestedForEmail)"
git commit -m "$(Build.BuildId)"
git push origin $(Build.SourceBranchName)
先决条件:
- 您需要 为您的管道启用 OAuth 令牌,这将对返回到您的 Git 存储库的推送操作进行身份验证。对于 YAML 管道,您需要添加一个明确的 Checkout 步骤作为第一步,并将选项 persistCredentials 设置为 true,例如
- checkout: self
persistCredentials: true
- 推送操作将使用 Build Service identity、项目或集合范围内的权限。默认情况下,这些身份不具有贡献通用权限,因此您需要将其授予。仅供参考,这些身份在 Azure DevOps 中的 所有 管道中使用。您的身份命名如下:
组织范围:项目集合生成服务 ({OrgName})
项目范围:{项目名称}构建服务({组织名称})
从项目设置 -> 存储库
授予他们 Contribute 权限
前 Azure DevOps 和 GitHub 支持工程师。我将 Python 排除在提交和推送步骤之外,尽管它可能比 Bash.
更难排除故障
我正在尝试为我在 Azure DevOps Repo 中的代码自动生成和更新文档。在提交到主分支时,我已经将管道配置为 运行 python 脚本。该脚本从存储库中的文件中提取相关信息并创建一个 markdown 文件并将输出存储为 README.md
然而,当我运行管道时什么也没有发生。作业注册为已完成,但 README.md 文件未更改。我没有出现错误或任何错误,所以不太确定出了什么问题,也许是权限问题。有人知道解决这个问题的方法吗?
管道代码:
trigger:
- master
pool:
vmImage: 'ubuntu-latest'
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.8'
- script: |
python -m pip install --upgrade pip
pip install -r requirements.txt
python generate-documentation.py
displayName: 'Generate Documentation'
Python 脚本:
import yaml
file = open('single-source.yaml')
documentation = yaml.load(file, Loader=yaml.FullLoader)
productdetails = documentation["product details"]
specifications = documentation["specifications"]
prerequisites = documentation["prerequisites"]
requiredinputs = documentation["required inputs"]
selfservice = documentation["self service"]
costsandcharging = documentation["costs and charging"]
f = open("README.md","w")
for x in productdetails.values():
f.write(x+"\n" )
f = open("README.md","a")
if "specifications" in documentation:
for x in specifications.values():
f.write(x+"\n")
if "prerequisites" in documentation:
for x in prerequisites.values():
f.write(x+"\n")
if "requiredinputs" in documentation:
for x in requiredinputs.values():
f.write(x+"\n")
if "selfservice" in documentation:
for x in selfservice.values():
f.write(x+"\n")
if "costsandcharging" in documentation:
for x in costsandcharging.values():
f.write(x)
f.close()
完全有可能,完全遵循此行动计划,post 如有问题。
- 在文件转换发生之前和签出之后,添加一个 bash 脚本,内联以下代码:
git checkout $(Build.SourceBranchName)
无论您在 Python 中处理它后进行何种转换,并使用管道中的内联 bash script 步骤验证它,如下所示:
cat README.md
如果您在管道日志中看到 README.md
文件的预期状态,则只需添加第二个内联 bash 脚本,如下所示:
git add README.md
git config --global user.name "$(Build.RequestedFor)"
git config --global user.email "$(Build.RequestedForEmail)"
git commit -m "$(Build.BuildId)"
git push origin $(Build.SourceBranchName)
先决条件:
- 您需要 为您的管道启用 OAuth 令牌,这将对返回到您的 Git 存储库的推送操作进行身份验证。对于 YAML 管道,您需要添加一个明确的 Checkout 步骤作为第一步,并将选项 persistCredentials 设置为 true,例如
- checkout: self
persistCredentials: true
- 推送操作将使用 Build Service identity、项目或集合范围内的权限。默认情况下,这些身份不具有贡献通用权限,因此您需要将其授予。仅供参考,这些身份在 Azure DevOps 中的 所有 管道中使用。您的身份命名如下:
组织范围:项目集合生成服务 ({OrgName})
项目范围:{项目名称}构建服务({组织名称})
从项目设置 -> 存储库
授予他们 Contribute 权限前 Azure DevOps 和 GitHub 支持工程师。我将 Python 排除在提交和推送步骤之外,尽管它可能比 Bash.
更难排除故障