Многоступенчатый конвейер YAML Azure DevOps: как оформить заказ на несколько репозиториев?

Мой конвейер Azure DevOps использует шаблоны yaml из двух разных репозиториев, которые настроены следующим образом.

  1. Есть репозиторий приложений, в котором есть развертываемое приложение и один yaml-файл - "корневой" шаблон конвейера.
  2. Репозиторий шаблонов. Корневой шаблон вызывает другие шаблоны и этапы из репозитория шаблонов. Затем шаблоны из этого репозитория вызывают другие шаблоны и скрипты (из того же репозитория)

Репозиторий шаблонов упоминается как ресурс в корневом шаблоне. Я не нашел способа проверить репозиторий шаблонов только один раз, а затем использовать шаблоны и скрипты на всех этапах конвейера. На данный момент мне нужно вручную клонировать репозиторий шаблонов на каждом этапе, когда мне нужно использовать дополнительные шаблоны или скрипты. В конце каждого этапа Azure Devops очищает клонированное репо. Есть ли простой способ проверить репозиторий шаблонов только один раз или как-то еще ссылаться на его ресурсы с подэтапов?

1 ответ

Решение

Я не уверен, поскольку вы не показывали свой файл YAML, но вы использовали этап проверки:

resources:
  repositories:
    - repository: devops
      type: github
      name: kmadof/devops-templates
      endpoint: kmadof

steps:
- checkout: self
- checkout: devops
- script: |
    echo $(Build.SourcesDirectory)
    ls $(Build.SourcesDirectory) *
- template: templates/template.yaml@devops
  parameters:
    repo: devops-templates

Выше скрипта показаны два репозитория. Вdevops-templates У меня есть шаблон, который используется в основном файле yaml сборки (расположен в self репо).

Пожалуйста, посмотрите также здесь

РЕДАКТИРОВАТЬ

Я немного поработал с этим и попробовал несколько вещей. Позвольте мне сначала описать отношения между файлами:

  • build.yaml (основное репо)
    • templates / start.yml (репозиторий шаблона - шаблон с этапами)
      • задание первое - templates / process.yaml (репозиторий шаблонов)
        • шаги - templates / another-template.yaml (репозиторий шаблонов)
      • задание два - шаги, прямо определенные в start.yaml

И вам не нужно фактически проверять репозиторий шаблонов, потому что при запуске все шаблоны обрабатываются и создается план сборки. Вам нужно только проверить репозиторий шаблонов, если вы собираетесь запускать некоторые сценарии (например, сценарии PowerShell). Вот мои файлы yaml:

build.yaml

resources:
  repositories:
    - repository: devops
      type: github
      name: kmadof/devops-templates
      endpoint: kmadof

stages:
- template: templates/start.yaml@devops
  parameters:
    repo: devops-templates
    buildSteps:
      - checkout: self
      - checkout: devops
      - bash: echo Test #Passes
        displayName: succeed
      - bash: echo "Test"
        displayName: succeed

start.yaml

# File: start.yml
parameters:
- name: repo  # defaults for any parameters that aren't specified
  default: ''
- name: buildSteps # the name of the parameter is buildSteps
  type: stepList # data type is StepList
  default: [] # default value of buildSteps
stages:
- stage: secure_buildstage
  pool: Hosted VS2017
  jobs:
  - template: process.yaml
    parameters:
      pool:   # this parameter is called `pool`
        vmImage: ubuntu-latest  # and it's a mapping rather than a string
  - job: secure_buildjob
    steps:
    - script: echo This happens before code 
      displayName: 'Base: Pre-build'
    - script: echo Building
      displayName: 'Base: Build'

    - ${{ each step in parameters.buildSteps }}:
      - ${{ each pair in step }}:
          ${{ pair.key }}: ${{ pair.value }}     

    - script: echo This happens after code
      displayName: 'Base: Signing'

process.yaml

parameters:
- name: 'pool'
  type: object
  default: {}

jobs:
- job: build
  pool: ${{ parameters.pool }}
  steps:
  - template: another-template.yaml
    parameters:
      repo: devops-templates

другой-template.yaml

parameters:
- name: repo  # defaults for any parameters that aren't specified
  default: ''

steps:
  - pwsh: Write-Host 'Hello form another template'

Взгляните сюда:

В задании сборки используется шаблон из репозитория DevOps-template, но я не проверяю репо в этом задании.

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

Вот несколько ссылок:

Последнее замечание: вам действительно нужно проверить репо с помощью шаблонов, когда вы шаблон вызываете файл из этого репо. Например:

steps:
  - task: PowerShell@2
    inputs:
      filePath: /scripts/myscript.ps1
Другие вопросы по тегам