Автоматическое запуск конвейера выпуска Azure

#angular #azure-pipelines #azure-pipelines-release-pipeline #azure-pipelines-build-task

#angular #azure-конвейеры #azure-pipelines-release-pipeline #azure-pipelines-build-task

Вопрос:

Я нахожусь в процессе настройки конвейеров Azure для сборки и публикации проекта Angular, содержащего некоторые разработанные нами библиотеки, но у меня возникли некоторые проблемы с пониманием некоторых его частей, в частности с запуском конвейера выпуска для сборки и публикации библиотек. Я читал это руководство, чтобы узнать, как его настроить.

Конвейер (ы) сборки

В настоящее время проект Angular содержит две библиотеки. Я создал два конвейера сборки, которые устанавливают зависимости библиотеки, создают одну из библиотек соответственно, архивируют папку сборки и публикуют архив в $(Build.ArtifactStagingDirectory) . Насколько я понимаю, это должно сделать его доступным для конвейера сборки. Больше ничего не было сделано в конвейере (ах) сборки.

Создать образ конвейера

Конвейер выпуска

Далее я создал конвейер выпуска. В конвейере я добавил артефакт, установил тип источника на Build и выбрал один из конвейеров сборки. Я включил триггер непрерывного развертывания для артефакта и установил фильтр ветвей сборки для refs/tags/v* , поскольку я экспериментировал со сборкой из тегов.

Затем на этапе я добавил Extract files задачу, для которой установлено значение $(System.DefaultWorkingDirectory)extracted папка назначения. После этого я добавил npm задачу, для которой задана команда publish , в и рабочую папку, которая содержит, $(System.DefaultWorkingDirectory)extracted заданный в ,, файл package.json, и реестр в ленту артефактов Azure.

Изображение конвейера выпуска

Запуск сборки

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

Что я пробовал

Я попытался изменить триггер CD для артефакта в конвейере выпуска на master ветку и зафиксировать в ветке, но это также не запустило конвейер выпуска.

Если я запускаю конвейер сборки вручную, конвейер выпуска запускается, но завершается ошибкой

 error enoent ENOENT: no such file or directory, open 'D:ar1aextractedpackage.json'
  

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

Что бы я хотел, чтобы произошло

Для запуска конвейера выпуска при добавлении тега версии в репозиторий.

Лучшим решением для меня было бы, если бы я мог опубликовать две библиотеки в проекте Angular с разными номерами версий, но я не уверен, как это сделать, по крайней мере, если я не буду использовать теги для запуска выпусков (тег был бы, например, v0.0.1 и, следовательно, не имеет смысла, если у одной библиотеки есть версия 0.0.3 , а у другой — 0.0.1 ).).

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

Приветствуется любая помощь и советы. Если какая-либо информация отсутствует, пожалуйста, дайте мне знать.

Редактировать — Решение

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

Отсутствующей частью было добавление триггера в конвейер сборки для тегов. Для сборок на основе конструктора мне было непонятно, что это можно сделать, поскольку вам просто показаны ветви в раскрывающемся списке фильтра ветвей в триггерах для конвейера сборки, но вы можете просто ввести refs/tags/v* в поле Фильтровать мои ветви и нажать enter (также показано на рисунке ниже).

Создать изображение триггера конвейера

Спасибо @JukkaK за это.

Ответ №1:

О сборках смотрите Обновление в нижней части этого поста в блоге:

https://edsnider.net/2018/11/14/detecting-git-tag-pushes-in-azure-devops.html

Не уверен, как это будет работать с build designer, если вы не можете использовать сборки на основе yaml, но я бы попробовал использовать простой «v *» или «refs / tags / *». Если они не работают с дизайнером, одним из способов обойти проблему может быть пометка сборки (возможно, с помощью https://marketplace.visualstudio.com/items?itemName=colinsalmcorner.colinsalmcorner-buildtasks ) с условием:

 and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))
  

А затем запуск выпуска на основе тегов

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

1. Я придерживался сборки на основе конструктора, но мне удалось решить ее на основе вашего ответа, см. Редактирование в вопросе.

2. Рад, что теперь это работает; Я пропустил упоминание триггеров сборки, поскольку они не были показаны на первом изображении. Но да, сборка запускается изменениями в VC, релизы запускаются артефактом, созданным из ссылок на ветку / тег / etc триггером.