Доступ к внешнему репо из azure конвейера по взаимному SSL - PullRequest
0 голосов
/ 25 февраля 2020

Есть ли возможность добавить дополнительную информацию для входа в процесс git -login, например, сертификат? Насколько я вижу, в конфигурации возможны только базовые c учетные данные. credentials

Есть ли возможность добавить еще один конфиг? может быть с azure-pipelines.yml?

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

На этапе Get source конвейера сборки в нем по умолчанию используется SSL.

Итак, здесь есть 2 метода, которые вы можете рассмотреть.

Метод 1 :

1) Сохраните сертификат SSL в Azure Key Vault.

2) Затем подключите этот Azure источник хранилища ключей к группе переменных .

3) Включите эту группу переменных, включая хранилище ключей azure.

Для выше, есть подробные шаги, описанные в этом блоге . Вы можете проверить.

Теперь, в azure devops, мы добавляем одну задачу встроенного шага Azure Key Vault при включении и связываем Azure хранилище ключей с конвейером. Кроме того, этот встроенный шаг выполняется до шага Get sources. Таким образом, в настоящее время сертификат может быть установлен и использован Get sources правильно.

enter image description here

Метод 2:

Другой метод заключается в том, что вы конфигурируете один самоагент и запускаете ниже команд на своем компьютере сборки:

git config --global http.sslBackend schannel

git config --global http.sslCAPath <the path/to/your/certificate.crt>
0 голосов
/ 06 марта 2020

получил решение следующим образом:

шаг 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 также имеет право внести свой вклад в ваше репо: enter image description here

В конце вы можете: * Отредактировать azure файл-конвейер в вашем личном репо, зафиксировать + нажать * Запустить syn c -пайплайн из шага 4 * После этого azure репо содержит обновленный конвейер- file * Вы можете запустить вашу сборку на обновленном файле

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...