Исключить типы файлов в триггерах CI при сборке конвейеров Azure Devops

#azure-devops #azure-pipelines

#azure-devops #azure-конвейеры

Вопрос:

У меня возникли проблемы с настройкой сборки, в которой фиксации только с изменениями файлов markdown не запускают сборку.

При сборке у меня включена непрерывная интеграция с включенными фильтрами ветвей.

Чтобы исключить изменения в файлах markdown, я настраиваю один фильтр путей «исключить» **/*.md , который, исходя из моего понимания шаблонов сопоставления файлов, должен рекурсивно сопоставлять все файлы, которые заканчиваются .md . Однако, когда я просто добавляю изменения в файл markdown, сборка все равно запускается.

Я рассматривал возможность добавления фильтра пути «включить» / , но сборки по-прежнему запускаются без него.

Как мне указать, чтобы не создавать, когда был изменен только определенный тип файла?

Комментарии:

1. я думаю, что они работают немного по-другому в триггерах, можете ли вы попробовать *.md в качестве шаблона исключения? другой альтернативой является использование [skip ci] в любом месте сообщения о фиксации.

2. Просто попытался изменить его на *.md и внес изменения в уценку, и это вызвало сборку. Я не думаю, что есть какой-либо способ узнать, почему была запущена сборка?

3. на странице сборки указывается причина сборки, например, в сборке проверки PR будет сказано следующее: Validation of branch 262 triggered today at 7:21 pm for XXX targeting %reponame% %branchname%

4. Да, но при запуске скользящей сборки не указывается, какое правило ее запустило. Здесь можно было бы сказать Rolling build triggered today at HH:mm pm for XXX %reponame% %branchname% , но какое правило запустило скользящую сборку?

Ответ №1:

На данный момент подстановочные знаки не поддерживаются для этих фильтров путей к файлам.

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

Помещение .md файлов в явную структуру (например: /docs), которую вы можете исключить с помощью «шаблона», приведенного в примерах, которые вы связали exclude: docs/ .

Иллюстрация:

Учитывая:

 (repo)
src
   |d1
   |   md
   |
    d2
       md
 

Следующее не срабатывает при изменениях ни /md в одном из каталогов.

 trigger:
  branches:
    include:
      - master
  paths:
    include:
      - /src/**/md/
 

Следующее всегда срабатывает при изменениях в разделе src/ , даже для файлов в обоих .../md каталогах.

 trigger:
  branches:
    include:
      - master
  paths:
    include:
      - src/
    exclude:
      - src/**/md/
 

Следующие триггеры для изменений в разделе src/ , src/d1/ , src/d2 , .../d2/md но не для любых изменений в разделе src/d1/md/ .

 trigger:
  branches:
    include:
      - master
  paths:
    include:
      - src/
    exclude:
      - src/d1/md/
 

То же самое поведение справедливо и для вашего конкретного желания попытаться вызвать группу файлов с помощью *.md .

Учитывая, что в каждом каталоге есть [variant]_README.md файл, верно следующее:

CI срабатывает при внесении изменений в src/d1/md/f1_README.md

 trigger:
  branches:
    include:
      - master
  paths:
    include:
      - src/
    exclude:
      - src/d1/md/*.md
 

Срабатывает CI
когда вносятся изменения в src/d1/md/f1_README.md

 trigger:
  branches:
    include:
      - master
  paths:
    include:
      - src/
    exclude:
      - src/d1/md/*README.md
 

Срабатывает CI
когда вносятся изменения в src/d1/md/f1_README.md или в любой другой .md файл.

 trigger:
  branches:
    include:
      - master
  paths:
    include:
      - src/
    exclude:
      - /**/*.md
 

Срабатывает CI
когда вносятся изменения в src/d1/md/f1_README.md или в любой другой .md файл.

 trigger:
  branches:
    include:
      - master
  paths:
    include:
      - src/
    exclude:
      - /*.md
 

CI НЕ срабатывает
когда вносятся изменения в src/d1/md/f1_README.md

 trigger:
  branches:
    include:
      - master
  paths:
    include:
      - src/
    exclude:
      - src/d1/md/f1_README.md
 

Комментарии:

1. Это только я или это объяснение подразумевает, что включаемые средства не запускают, а исключающие средства запускают? Это звучит неправильно.

2. Причина, по которой это звучит так, заключается в том, чтобы подчеркнуть, что ** не представляет рекурсивный подстановочный знак.

Ответ №2:

Последнее обновление от 09.08.2021 позволило использовать подстановочные знаки в фильтре путей.

Подстановочные знаки можно использовать при указании ветвей включения и исключения для триггеров CI или PR в файле pipeline YAML. Однако их нельзя использовать при указании фильтров путей. Например, вы не можете включить все пути, соответствующие src/app//myapp* . Несколько клиентов указали на это как на неудобство. Это обновление восполняет этот пробел. Теперь при указании фильтров путей можно использовать символы подстановки (, * или ?).

Итак, теперь должно быть возможно использовать триггеры следующим образом:

 trigger:
  branches:
    include:
      - master
  paths:
    include:
      - src/
    exclude:
      - /**/*.md