#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