Выполнить шаблоны YAML из конвейера Azure DevOps classi c - PullRequest
0 голосов
/ 12 февраля 2020

Я бы поставил свои вопросы по следующим пунктам, надеюсь, теперь все ясно:

  1. Исходный код приложения находится в репозитории application_code.
  2. Код конвейера (YAML) находится в конвейер_код репо. Потому что я бы хотел его версию и не хотел бы хранить в репозитории application_code. Просто чтобы не дать контроль команде разработчиков для управления ею.

Постановка задачи:

  • Конвейер YAML не будет запущен, если он не находится в репозитории исходного кода на основе событий pr, commit et c.
  • Можем ли мы запускать или запускать файл YAML, который находится в pipe_repo, когда происходит событие, инициированное в репозитории application_code?

Я пытался достичь выше, используя конвейер Classi c и шаблон YAML, но это не работает вместе. Поскольку я могу выполнить шаблон YAML из конвейера YAML только не из конвейера classi c, как показано ниже:

#azure-pipeline.yaml
jobs:  
  - job: NewJob
  - template: job-template-bd1.yaml 

Есть идеи или лучшее решение, чем указано выше?

1 Ответ

0 голосов
/ 16 февраля 2020

Функция Поддержка нескольких репозиториев для конвейеров YAML скоро будет доступна для службы azure devops. Эта функция будет поддерживать запуск конвейеров на основе изменений, сделанных в одном из нескольких хранилищ. Пожалуйста, отметьте Azure DevOps Feature Timeline или здесь . Ожидается, что эта функция будет развернута в первом квартале 2020 года для сервиса azure devops.

В настоящее время вы можете выполнить приведенный ниже обходной путь, чтобы достичь выше, используя Завершение сборки (конвейер будет запущен при завершении другой сборки).

1, Настройка запускающий конвейер

Создайте пустой конвейер classi c для репозитория application_code в качестве запускающего конвейера, который всегда будет успешным и ничего не будет делать.

И отметьте Включить непрерывную интеграцию в Триггеры вкладка и настройка Фильтры Bracnh enter image description here

2, настройте запущенный конвейер

В репозитории pipe_code, используя от Checkout до Проверьте несколько репозиториев в вашем конвейере . Вы можете специально проверить исходный код репозитория application_code для сборки. Ниже приведен пример:

steps: 
  - checkout: git://MyProject/application_code_repo@refs/heads/master # Azure Repos Git repository in the same organization

  - task: TaskName
     ...

Затем в конвейере yaml страница редактирования , нажмите 3dots в правом верхнем углу и нажмите Триггеры . Затем нажмите + Добавить рядом с Завершение сборки и выберите вышеуказанный запускающий конвейер, созданный на шаге 1, как запускающую сборку .

enter image description here

После выполнения вышеупомянутых двух шагов, когда будут внесены изменения в репозиторий application_code, запускающий конвейер будет выполнен и завершен с успехом. Затем запущенный конвейер будет запущен для запуска реального задания сборки.

Обновление:

Показать Azure DevOps Построить состояние конвейера в Bitbucket.

Вы можете добавить задачу скрипта python в конце конвейера yaml, чтобы обновить состояние сборки Bitbucket. Вам нужно установить condtion: always(), чтобы всегда запускать эту задачу, даже если другие задачи не выполнялись.

Вы можете получить статус сборки с переменной env Agent.JobStatus. Пример ниже:

Для получения дополнительной информации, пожалуйста, обратитесь к документу Интегрируйте свою систему сборки с Bitbucket Cloud , а также этот поток .

  - task: PythonScript@0
      condition: always()
      inputs: 
        scriptSource: inline
        script: |
          import os
          import requests

          # Use environment variables that your CI server provides to the key, name,
          # and url parameters, as well as commit hash. (The values below are used by
          # Jenkins.)
          data = {
              'key': os.getenv('BUILD_ID'),
              'state': os.getenv('Agent.JobStatus'),  
              'name': os.getenv('JOB_NAME'),
              'url': os.getenv('BUILD_URL'),
              'description': 'The build passed.'
          }

          # Construct the URL with the API endpoint where the commit status should be
          # posted (provide the appropriate owner and slug for your repo).
          api_url = ('https://api.bitbucket.org/2.0/repositories/'
                    '%(owner)s/%(repo_slug)s/commit/%(revision)s/statuses/build'
                    % {'owner': 'emmap1',
                        'repo_slug': 'MyRepo',
                        'revision': os.getenv('GIT_COMMIT')})

          # Post the status to Bitbucket. (Include valid credentials here for basic auth.
          # You could also use team name and API key.)
          requests.post(api_url, auth=('auth_user', 'auth_password'), json=data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...