В рамках DevOps попытку отправить контент в существующий репозиторий git можно выполнить с помощью общих команд git:
git init
git config --global user.email "[email protected]"
git config --global user.name "DevOps Upload"
git remote add devops https://[email protected]/org/Project/_git/$Repo
git add -A
git commit -m "Terraform Scaffolding"
git push -u devops --all
Однако для этого необходимо пройти аутентификацию:
steps:
- checkout: self
persistCredentials: true
Что сбивает с толку, так это то, что конвейер игнорирует параметр persistCredentials
:
fatal: Cannot prompt because user interactivity has been disabled.
fatal: could not read Password for 'https://[email protected]/org/Project/_git/Repo': terminal prompts disabled
Решение этой проблемы с git есть здесь, однако оно ссылается на устаревшую версию DevOps и, похоже, сегодня не работает так же. Я установил все разрешения для службы сборки и даже попытался передать $System_AccessToken
для git remote
, но, похоже, ничто не передает учетные данные в конвейер.
Любая сегодняшняя информация о том, почему этот процесс не работает, будет полезна.
Чтобы отправить коммиты через конвейер, вы можете использовать два метода, описанных ниже.
steps:
- checkout: self
persistCredentials: true
- bash: |
echo $(Build.BuildId) >> NewFile-$(Build.BuildId).txt
displayName: Create a new file to be pushed by pipeline
- bash: |
git checkout -b $(Build.SourceBranchName)
git config --global user.email "$(Build.RequestedForEmail)"
git config --global user.name "Pipeline-$(Build.DefinitionName)"
git add .
git commit -m "Push commits by pipeline $(Build.DefinitionName) in build $(Build.RequestedForEmail)"
git push origin $(Build.SourceBranchName)
displayName: Push commits to source repo (self)
steps:
- checkout: self
- bash: |
echo $(Build.BuildId) >> NewFile-$(Build.BuildId).txt
displayName: Create a new file to be pushed by pipeline
- bash: |
git checkout -b $(Build.SourceBranchName)
git remote set-url origin https://$(System.AccessToken)@dev.azure.com/$(AzureDevOpsOrgName)/$(TheProjectName)/_git/$(TheRepoName)
git config --global user.email "$(Build.RequestedForEmail)"
git config --global user.name "Pipeline-$(Build.DefinitionName)"
git add .
git commit -m "Push commits by pipeline $(Build.DefinitionName) in build $(Build.RequestedForEmail)"
git push origin $(Build.SourceBranchName)
displayName: Push commits to source repo (self)
Я волновался, что ему придется пройти через Bash. Вместо этого я запускаю команды git через файл PowerShell. Я попробую выполнить дополнительные задачи.