Возможно ли, чтобы Azure Pipeline изменил README.md при коммите? - PullRequest
1 голос
/ 14 апреля 2020

Я пытаюсь автоматически генерировать и обновлять документацию для своего кода в Azure Репо DevOps. Я настроил конвейер для запуска скрипта 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()

1 Ответ

2 голосов
/ 15 апреля 2020

Вполне возможно, полностью следовать этому плану действий , задавать вопросы, если таковые имеются.

  1. Перед преобразованием файла и сразу после извлечения добавьте сценарий 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)

Предварительные условия :

  1. Вам необходимо , чтобы включить использование токена OAuth для вашего конвейера, это аутентифицирует операцию pu sh обратно в ваше Git репо. Для конвейеров YAML необходимо добавить явный шаг Checkout в качестве первого шага с параметром persistCredentials , установленным в true , например,
- checkout: self
  persistCredentials: true
Операция pu sh будет использовать разрешения удостоверения службы построения , области проекта или коллекции. Эти удостоверения не не имеют Contribute generi c разрешений по умолчанию, поэтому вам необходимо предоставить их им. К вашему сведению, эти идентификаторы используются в всех ваших конвейеров в Azure DevOps. Ваши имена имеют следующие имена:

Область организации: Служба сборки коллекций проектов ( {OrgName} )
Область проекта: {Имя проекта} Служба сборки ( {Имя организации} )

Предоставьте им разрешение Contribute в Настройках проекта -> Хранилища

enter image description here

Бывший Azure DevOps и инженер поддержки GitHub. Я извлекаю Python из инструкции для шагов commit и pu sh, хотя, возможно, это будет определенно труднее устранить, чем Bash.

...