Azure DevOps: как отключить триггер CI в конвейере шаблона YAML?

В конвейерах шаблонов нельзя размещать какие-либо операторы триггера, такие как trigger: none, как указано в Microsoft docs, чтобы отключить триггер ci, поэтому мне интересно, как вы предотвращаете выполнение этих конвейеров каждый раз, когда вы обновляете их или любой другой файл yaml в та же ветка?




Ответы (3)


Определение yaml конвейера теперь поддерживает отключение всех триггеров с помощью

trigger: none

Ссылка

person Mifeet    schedule 19.02.2021

Таким образом, в конечном итоге в конвейере шаблона вы не можете указать что-то вроде trigger: none (для установки только ручного запуска), и вы не можете указать этапы или задания, разрешены только шаги (поэтому вы не можете определить какое-либо условие для предотвращения выполнения конвейера на на работе или на сцене).

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

введите описание изображения здесь

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

person whatever    schedule 12.12.2020
comment
каждый раз, когда мы создаем конвейер, мы должны это делать, и это действительно неудобно - person Blue Clouds; 07.01.2021
comment
Да, но шаблоны не нужно регистрировать как конвейеры - вы просто ссылаетесь на них как на файлы. Ошибка, которую я сделал здесь, заключалась в том, что шаблоны регистрировались как конвейеры, и, поскольку они не позволяют устанавливать trigger: none, они постоянно запускались при каждом обновлении файла. - person whatever; 09.03.2021

Если вы хотите обновить свой шаблон, не затрагивая конвейеры, использующие этот шаблон, внесите изменения в отдельную ветку и объедините его с master (или с тем, что вы используете), как только вы будете уверены, что у вас есть то, что вы хотите.

То же самое применимо, если вы используете шаблон из другого репо:

# Repo: Contoso/WindowsProduct
# File: azure-pipelines.yml
resources:
  repositories:
    - repository: templates
      type: github
      name: Contoso/BuildTemplates
      ref: refs/tags/v1.0 # optional ref to pin to

jobs:
- template: common.yml@templates  # Template reference
  parameters:
    vmImage: 'vs2017-win2016'

По умолчанию вы используете шаблон из своей основной ветки, но вы можете указать любую ветку по своему желанию. Таким образом, вы также можете проверить свои изменения на ограниченных конвейерах, поскольку вам нужно указать прямо на ветку, в которой вы изменили свой шаблон.

Допустим, у вас есть ветвление:

master
|_ feature/add-extra-step

И вы вносите изменения в шаблон, но на feature/add-extra-step, добавляя дополнительный шаг.

Теперь, когда вы запускаете конвейер, который использует этот шаблон:

  • триггер идет с master - ваш дополнительный шаг в шаблоне не будет запущен
  • триггер идет с feature/add-extra-step - ваш дополнительный шаг будет выполнен

Я внес изменения в шаблон в ветке feature/extra-step:

введите описание изображения здесь

И это изменение недоступно, когда я запускаю конвейер (даже тот же конвейер) на мастере:

введите описание изображения здесь

Если вы, например, не хотите запускать сборку ci, вносящую изменения в шаблон, просьба зафиксировать эти изменения с помощью фразы [skip ci] в сообщении git. Отметьте здесь для получения более подробной информации.

person Krzysztof Madej    schedule 11.12.2020
comment
Я полагаю, это сработает, но мне кажется, что это как-то излишне усложняет ситуацию. Я подумал, в любом случае хорошая практика - иметь файлы yaml в той же ветке или репозитории, что и исходный код, с которым они работают? Могут ли конвейеры жить в своей собственной ветке или даже в выделенном репозитории без какого-либо функционального воздействия на них (например, конвейеры ci не запускаются при обновлении исходного кода)? - person whatever; 11.12.2020
comment
Это возможно, но в этом нет необходимости. (проверьте ресурсы репозиториев здесь. Моя идея заключалась в том, что вы должны вносить изменения в ветке, а не в главном. И есть больше шансов, что у вас будет шаблон в отдельном репо (чем конвейеры, которые создают репозитории), потому что это отличная идея совместного использования общих материалов во всех репозиториях. Поскольку вы можете применять DRY на уровне репо, вы можете перейти на уровень организации и сэкономить усилия на синхронизации данных. - person Krzysztof Madej; 11.12.2020
comment
Подводя итог, если вы не видите необходимости иметь конвейер для репо, отличного от кода, который он создает, не делайте этого. Но если вы используете один и тот же код в шаблоне в разных репозиториях, рассмотрите возможность создания отдельного репо для шаблона и использования их в конвейерах. - person Krzysztof Madej; 11.12.2020
comment
В любом случае, даже имея конвейеры в их собственной ветке или в выделенном репо, конвейеры шаблонов всегда будут запускаться всякий раз, когда вы обновляете любой файл yaml, включая их самих. Единственный способ, который я вижу, чтобы остановить это, - это поставить какое-то условие на выполнение этапа / задания. Странная ситуация. - person whatever; 11.12.2020
comment
Нет. Если вы создадите отдельную ветвь и примените изменения в шаблоне в этой отдельной ветке (все, что у вас есть в одном репо), это изменение повлияет на конвейер только тогда, когда триггеры исходят из этой ветки. Пожалуйста, проверьте меня редактировать. Это объясняет вашу проблему? - person Krzysztof Madej; 11.12.2020
comment
Я понимаю то, что вы только что объяснили. Однако я пытаюсь сказать и не уверен, что вы поняли, что, поскольку конвейер шаблонов не позволяет указывать триггер и, таким образом, даже указывать операторы исключения, он всегда будет запускать себя каждый раз, когда вы его обновляете. - person whatever; 11.12.2020
comment
Если вы не хотите запускать конвейер, просто добавьте [skip ci] в комментарий git. - person Krzysztof Madej; 11.12.2020