Azure devops 是否可以让Azure管道在提交时修改README.md?

Azure devops 是否可以让Azure管道在提交时修改README.md?,azure-devops,azure-pipelines,azure-repos,Azure Devops,Azure Pipelines,Azure Repos,我正在尝试在Azure DevOps Repo中自动生成和更新代码文档。我已经配置了一个管道,以便在提交到主分支时运行python脚本。该脚本从存储库中的文件中提取相关信息,创建一个标记文件,并将输出存储为README.md 然而,当我运行管道时,什么也没有发生。作业注册为已完成,但README.md文件保持不变。我没有发现任何错误,所以我不确定出了什么问题,可能是权限问题。有人知道这有什么解决办法吗 管道代码: trigger: - master pool: vmImage: 'ubun

我正在尝试在Azure DevOps Repo中自动生成和更新代码文档。我已经配置了一个管道,以便在提交到主分支时运行python脚本。该脚本从存储库中的文件中提取相关信息,创建一个标记文件,并将输出存储为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()

完全可能,完全遵循此行动计划,,如果有问题,请发布问题

  • 在文件转换之前和签出之后,添加一个内嵌以下代码的bash脚本:
  • git checkout$(Build.SourceBranchName)

    无论您在进行什么转换,都要在Python中处理它,并在管道中使用内联步骤进行验证,如下所示:

    cat README.md
    
    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)
    
    如果在管道日志中看到
    README.md
    文件的预期状态,只需添加第二个内联bash脚本,如下所示:

    cat README.md
    
    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 repo的身份。对于YAML管道,您需要添加一个显式步骤作为第一步,并将选项persistCredentials设置为true,例如
  • 推送操作将使用、项目或集合范围的权限。默认情况下,这些标识没有“贡献通用”权限,因此您需要将其授予它们。仅供参考,这些标识在Azure DevOps中的所有管道中使用。您的身份命名如下:
  • 组织范围:项目集合生成服务({OrgName})
    项目范围:{Project Name}生成服务({Org Name})

    从项目设置->存储库授予他们“贡献”权限


    前Azure DevOps和GitHub支持工程师。我正在将Python从提交和推送步骤的ecuation中移除,尽管这可能比Bash更难排除故障。

    完全可能,完全遵循此行动计划,如果有问题,请发布问题

  • 在文件转换之前和签出之后,添加一个内嵌以下代码的bash脚本:
  • git checkout$(Build.SourceBranchName)

    无论您在进行什么转换,都要在Python中处理它,并在管道中使用内联步骤进行验证,如下所示:

    cat README.md
    
    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)
    
    如果在管道日志中看到
    README.md
    文件的预期状态,只需添加第二个内联bash脚本,如下所示:

    cat README.md
    
    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 repo的身份。对于YAML管道,您需要添加一个显式步骤作为第一步,并将选项persistCredentials设置为true,例如
  • 推送操作将使用、项目或集合范围的权限。默认情况下,这些标识没有“贡献通用”权限,因此您需要将其授予它们。仅供参考,这些标识在Azure DevOps中的所有管道中使用。您的身份命名如下:
  • 组织范围:项目集合生成服务({OrgName})
    项目范围:{Project Name}生成服务({Org Name})

    从项目设置->存储库授予他们“贡献”权限


    前Azure DevOps和GitHub支持工程师。我正在将Python从提交和推送步骤的ecuation中移除,尽管这可能比Bash更难排除故障。

    您可以添加Python脚本吗?您的意思是标记没有改变吗?您是否尝试在管道末尾的脚本任务中对Readme.md文件进行cat,以查看其实际内容?抱歉,我添加了python脚本以尝试增加一些清晰度。我的意思是,存储库中的自述文件没有更改。你能写下你是如何检查自述文件的吗?你能添加Python脚本吗?你的意思是标记没有更改吗?您是否尝试在管道末尾的脚本任务中对Readme.md文件进行cat,以查看其实际内容?抱歉,我添加了python脚本以尝试增加一些清晰度。我的意思是存储库中的自述文件没有被纸条改变。你能写下你是如何准确地检查自述文件的吗?谢谢你提供了非常详细的答案。我已经尝试了您的解决方案,它看起来更接近,但是第二个bash脚本导致了一个错误:
    fatal:您当前不在分支上。要立即将导致当前(分离头)状态的历史记录推送到当前状态,请使用git push origin HEAD:##[error]Bash退出,代码为“128”。
    My bad,签出后,在文件转换之前,您需要在另一个Bash脚本中使用这一行。
    git checkout$(Build.SourceBranchName)
    。也编辑了主要答案。像做梦一样工作!!非常感谢你的邀请help@Ryan如果Aram的答案有帮助,请将其标记为答案,只需单击类似的选项。因此,这将有助于其他遇到相同问题的成员轻松找到解决方案。感谢您提供了非常详细的答案。我已经尝试了您的解决方案,它看起来更接近,但是第二个bash脚本导致了一个错误:
    fatal:您当前不在分支上。要立即将导致当前(分离头)状态的历史推送,请使用git push origin HEAD:##[error]Bash退出,代码为“128”。
    My bad,在文件转换完成之前,在另一个Bash脚本中需要这一行