получил решение следующим образом:
шаг 1
создал файл шаблона для задания-клона:
parameters:
- name: RepoUrl
type: string
- name: cloneIntoDir
type: string
steps:
- task: DownloadSecureFile@1
name: cainfo
displayName: 'Download cainfo'
inputs:
secureFile: 'cainfo.cert'
- task: DownloadSecureFile@1
name: cert
displayName: 'Download cert.crt'
inputs:
secureFile: 'cert.crt'
- task: DownloadSecureFile@1
name: keypem
displayName: 'Download key.pem'
inputs:
secureFile: 'key.pem'
- script: mkdir ${{ parameters.cloneIntoDir }}
displayName: creating directory ${{ parameters.cloneIntoDir }}
- script: |
cd ${{ parameters.cloneIntoDir }}
git config --global http.sslCAInfo "$(cainfo.secureFilePath)"
git config --global http.sslCert "$(cert.secureFilePath)"
git config --global http.sslKey "$(keypem.secureFilePath)"
git clone https://$(User):$(Password)@${{ parameters.RepoUrl }} .
Этот шаблон выполняет все git -magi c с файлами, загруженными из библиотеки конвейера.
step 2
использовал файл шаблона в build-yml
trigger: none
strategy:
matrix:
linux:
imageName: 'ubuntu-latest'
windows:
imageName: 'windows-2019'
pool:
vmImage: $(imageName)
variables:
- group: Credentials
steps:
- template: ../templates/clone-repo-template.yml
parameters:
RepoUrl: 'www.repos_url.com/project.git'
cloneIntoDir: 'myRepoDir'
Важно здесь : Группа переменных для учетных данных должна быть включена в этот файл, хотя учетные данные необходимы только в шаблоне (причины: переменные не могут быть расположены в шаге)
На этом этапе код из вашего репо сейчас в myRepoDir
. Вы можете расширить файл на шаге 2 с помощью указанных вами c build-команд. Но вы можете go сделать еще один шаг: возможно, вы хотите встроить свой build-yml в репозиторий, и, возможно, событие для разработчиков не имеет доступа к azure -repo, но должно иметь возможность редактировать build-yml , Для этого:
шаг 3
создать еще один шаблон
parameters:
- name: RepoUrl
type: string
- name: copyScript
type: string
jobs:
- job: SyncRepos
pool:
vmImage: 'ubuntu-latest'
variables:
- name: remoteRepoDir
value: 'DirectoryToCloneInto'
- group: Credentials
steps:
- template: ../templates/clone-repo-template.yml
parameters:
RepoUrl: ${{ parameters.RepoUrl }}
cloneIntoDir: $(remoteRepoDir)
- script: 'git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" clone $(Build.Repository.Uri)'
displayName: 'Clone Azure-Repo $(Build.Repository.Uri)'
- script: |
cd '$(Build.Repository.Name)'
${{ parameters.copyScript }}
displayName: 'Copy file to direcorty $(Build.Repository.Name)'
- script: |
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
displayName: 'Configure Git for commit'
- script: |
cd '$(Build.Repository.Name)'
git add -A
git commit -m "auto commit from azure sync"
git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" push
displayName: 'push changes'
Как видите, этот шаблон также использует шаблон шага 1
4
trigger: none
jobs:
- template: ../templates/sync-repo-files-template.yml
parameters:
copyScript: |
cp -f ../$(remoteRepoDir)/azure-pipeline.yml .
RepoUrl: 'www.repos_url.com/project.git'
Запуск этого yml в конвейере клонирует ваше репо, клонирует azure -репо, копирует файл azure-pipeline.yml
из вашего репо в репозиторий azure, sta sh , commit и pu sh.
Вы просто должны убедиться, что пользователь Build Service
также имеет право внести свой вклад в ваше репо:
В конце вы можете: * Отредактировать azure файл-конвейер в вашем личном репо, зафиксировать + нажать * Запустить syn c -пайплайн из шага 4 * После этого azure репо содержит обновленный конвейер- file * Вы можете запустить вашу сборку на обновленном файле