Я недавно создал «Unanet-Summarizer», небольшая утилита, чтобы дать моим коллегам некоторую дополнительную информацию о своих расходах Отказ У него было немного больше внимания, чем я ожидал, но лучше всего, что он получил других, желающих помочь, и кодовая база выросла быстро.
Это было время для системы сборки и развертывания, и я влюблен в Azure DevOps Поэтому я хотел воспользоваться этой возможностью, чтобы записать процесс и документировать его для моих коллег и других.
Цели
Я хотел достичь следующего для этого проекта JS:
- Сборка, которая работает как часть каждого запроса на тягу, поэтому мы можем обнаружить какие-либо изменения в разрыв
- Производственный выпуск, который выводит артефакты в местоположение хостинга (в этом случае, простой кабин хранения на Azure)
- Значки состояния для сборки и релизов
- Я хочу, чтобы кто-то сможет просмотреть сборки и развертывание
Прохождение
Ниже приведено полный прохождение, в комплекте с некоторой борьбой, потому что я хочу, чтобы это было ясно, когда вы можете пропустить вещи или бежать в запутанные шаги.
Настройка проекта
- Я иду в http://dev.azure.com И войти с моей учетной записью Excella.
- Я создаю новый проект:
- Я даю ему имя и выбираю варианты, сохраняя его публику, чтобы кто-то сможет просматривать сборки и релизы:
- В левой навигации я нажимаю трубопроводы, которые говорят мне (неудивительно), что не существует трубопроводов. Я нажал, чтобы создать один:
- Я выбираю GitHub для расположения кода:
- Я выбираю все репозитории из раскрывающегося списка (так как это не мое репо, а скорее
Excellabs
). Затем я ищу unanet и щелкнул проект Summarizer.
- Я аутентифицию с GitHub
- В GitHub я попросил дать разрешение на приложение Azure Pobelines для доступа к репо. Я одобряю. 👍.
- Я тогда попросил аутентифицироваться с моей учетной записью Excella снова. Не имею, почему.
Настройка трубопровода
- Я вернулся на страницу трубопроводов, где я нахожусь на шаге «Конфигурация» и теперь могу выбрать, какой трубопровод я хочу. Я выбираю
node.js
потому что я думаю, что это будет наиболее подходящим
- Привет, Cool, Azure DevOps создает файл YAML, который имеет создание настроек для нас, которая срабатывает на любом PR и в любое время, мы нажимаем на мастер. Работает
Установка NPM
иNPM Build
Отказ Это кажется красивым на.
- Azure DevOps также имеет эту приятную кнопку сохранения и запуски, которая зафиксирует файл YAML обратно в наше репо и начать процесс сборки. Поэтому я нажимаю, чтобы сохранить его.
- Нам дают варианты того, как совершить репо. Я решил обнимать непосредственно мастеру, потому что я живу на краю. Нет, шучу, но я выбираю это, потому что я вижу содержимое и знаю, что совершил, чтобы совершить мастера, позволит построить, чтобы выгнать.
- Агент готовит себя, а затем управляет работой . Это успех! Мы просто ничего не делаем с выходом.
Значок статуса
Далее я хотел бы создать значок статуса для сборки, которые я могу показать в Readme
файл.
Я иду в определение сборки
В спуске справа я выбираю
Значок статуса
:
- Я выбираю ветку, а затем скопируйте предусмотренную markdown (что приятно):
- Я проверяю эту оценку здесь: (потому что почему нет?)
- Хороший! Я создам PR и добавить это в
Readme
Отказ
Вывод файлов распределения
- Я создаю PR, который добавляет следующее в файл лазурных трубопроводов. Ямл будет (я думаю) взять
Dist
Папка нашей сборки и вывод ее, но только тогда, когда ветка является главной веткой. Я выбралDist
Папка, поэтому нам не придется иметь дело сnode_modules.
и я выбрал толькоМастер
ветвь, потому что мы действительно сделаем только что-нибудь с выходом, когда это главная ветвь, которую мы строим, поскольку это то, что мы выпустим.
- task: PublishPipelineArtifact@0 displayName: Publish Pipeline Artifacts inputs: targetPath: $(Build.ArtifactStagingDirectory)/dist condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
Знаешь что. Создание этого PR заставляет меня понять, что мы никогда не включались на лазурные трубопроводы для PR сборки в Github. Так что давайте сделаем это.
… Подожди, никогда не надо. Лазурные трубопроводы уже установили это.
- Я смотрю на работу на лазурных трубопроводах, и это полностью! …. не удается. Ой, я думаю, что я выбрал неправильный каталог?
Интересный. В самом выходе в построении я вижу /home/vsts/Работа/1/с
вместо А
Отказ Может быть, я использую неправильную переменную сборки?
… О, упс. Для того, чтобы опубликовать промежуточное содержание, мы, вероятно, должны были поставить что-то там сначала, не так ли? Поэтому я добавлю ниже в PR:
- task: CopyFiles@2 inputs: sourceFolder: $(Build.SourcesDirectory)/dist contents: '**\*' targetFolder: $(Build.ArtifactStagingDirectory) displayName: Copy Files to Staging Directory
Хорошо, хорошо, это было на самом деле немного странно. Оказывается, что каталоги сборки в переменной, кажется, являются C: \ Agent
и Т. Д. Но в Ubuntu VM это /home/vsts/Работа/1/с
. Поэтому мне нужно было сложно, чтобы найти файлы. По умолчанию не работает. Странный.
… А когда я изменился на это, это все еще не сработало. Лазурные трубопроводы не находят выходные файлы.
Хорошо, хм, вдруг это работает, и я не знаю почему. Я вижу в журналах:
Копирование/home/vsts/work/1/s/dist/unanet-summarizer-relase.js to/home/vsts/work/1/a/dist/unanet-summarizer-relase.js
И он скопировал 6000 файлов, включая Node_Modules и т. Д.
Так что я собираюсь обновить его сейчас, чтобы выводить из Dist
Отказ Очень интересная проблема.
По какой-то причине это оказалось задачей, чтобы сделать это:
- task: CopyFiles@2 inputs: sourceFolder: '/home/vsts/work/1/s/dist' #For some reason, I think we need to hard-code this. targetFolder: '$(Build.ArtifactStagingDirectory)' displayName: 'Copy Files to Staging Directory'
Я до сих пор не понимаю, что было окончательное изменение, которое сделало его работать, но это по крайней мере имеет смысл для меня.
Далее!
Создание контейнера для хранения
ЗАМЕТКА: Это только один из способов, среди многих, чтобы сделать это. Возможно, вы захотите нажимать файлы на страницы GitHub, NetLify и т. Д. — Это просто случилось для меня.
Следующим шагом будет создать Azure Blob, а затем развернуть выпущенную JS к нему.
- Я вошел в портал Azure, используя мой аккаунт Excella
- Я ориентируюсь на группу ресурсов, которую мы используем для этих вещей
- Я нажимаю «Добавить», чтобы добавить ресурс.
- Я введите «хранение» и выберите «учет учетной записи»
- Я нажимаю «Создать» на экране Intro.
- Я даю имя, область и тип для хранения BLOB:
- На экране обзора я нажимаю create.
- Когда создание завершается, я нажимаю, чтобы перейти на ресурс.
- У меня пока нет контейнеров, поэтому я нажимаю, чтобы добавить один:
- Я предоставляю имя и выберите анонимный доступ на уровне контейнера, поскольку наше намерение явно служит нашим сценариям для всего мира.
- После создания контейнера я нажимаю в него.
- Затем я щелкнул свойства в левом меню и получите URL https://unanetsummarizer.blob.core.windows.net/unanet-summarizer. :
Это где мы в конечном итоге развернут.
Создание развертывания
Говоря о том, звучит так, как мы должны пойти, создать это развертывание!
- Вернуться в Azure DevOps, я выбираю Релизы из левого меню. У меня еще нет, что имеет смысл. Я решил создать новый.
- Мне предложили начать с шаблона, но потому что мы выводят в BLOB, я думаю, что пустая работа, вероятно, имеет самый смысл.
- Я получаю этап по умолчанию (что вы можете сделать для разных сред, и т. Д.). В нашем случае на данный момент у нас есть только один этап: «Развернуть к производству BLOB». Так что я даю сцену имя.
- Я на самом деле не вытягиваю в любые артефакты, которые станут выпустить релиза еще, поэтому нажал, чтобы сделать это:
- Я говорю о выпуске, что я хочу, чтобы он использовал артефакты из последней сборки
Мастер
ветвь, и я нажимаю Сохранить:
- Обратите внимание на молния болт на артефактах. Это означает, что в любое время появляется новый из этих артефактов, выпуск будет создан и выполнен.
- Я нажал, чтобы просмотреть задачи для сцены, так как мы еще не добавили:
- Я нажал, чтобы добавить задачу на работу агента:
- В задачах, список, я ищу «BLOB» (это буквально мой первый раз, когда это делает), и omsomely, «Azure File Copy» возникает. Я нажал, чтобы добавить его.
- Я вижу, что «некоторые настройки нуждаются в моем внимании», поэтому я нажимаю в него:
- Мне нужно выбрать источник. К счастью, есть меню ELLIPSIS, которое позволяет мне выбрать местоположение на основе моего артефакта.
- Я выбираю папку «Артефакт», которую я хочу скопировать из:
- Я выбираю ID подписки (пропуская это здесь), а затем нажмите
Авторизуйтесь
Разрешить Azure DEVOPS, чтобы получить доступ к им потребности:
… и я получаю ошибку. Что справедливо, потому что я использую ресурс компании и не имею полных прав администратора там (что я в порядке с). Обычно на личных подписках это просто работает ™ ️.
Итак, я уйду здесь пока, пока мой его отдел не сможет разблокировать меня.
Примечание о разрешениях подписки Azure
И мы вернулись! Забавный факт: нажатие на кнопку «Авторизация» пытается сделать это для целой подписки, но если вы нажмете параметры расширенных:
Вы можете выбрать группу ресурсов, а затем она будет работать, так как у меня есть доступ к группе ресурсов:
… Хорошо, вернитесь к нашему регулярному шоу.
Выбор пункта назначения развертывания и развертывание
- Я выбираю тип назначения и укажите его к созданию учетной записи хранилища:
- Хорошо, я думаю, что это в значительной степени это И я готов спасти релиз и посмотреть, как это разработано.
- Давайте дадим это выстрел! Я добрался до страницы выпуска и нажмите, чтобы создать релиз:
- Я даю релиз описания, а затем нажмите
Создать
:
- Похоже, это работало!
- Я возвращаюсь к Azure Portal, чтобы проверить, вот и вот, это там!
- Просто проверять, я получаю URL-адрес BLOB ( https://unanetsumbalizer.blob.core.windows.net/unanet-summarizer/unanet-summarizer-relase.js ) И я ударил его в моем браузере. Оно работает!
Добавление значка выпуска
Теперь релизы для прохладастые, поэтому я хочу показать их публично. Как мне это сделать?
- Я Откройте определение выпуска в Azure DevOps Отказ Я нажимаю параметры, интеграции, включите значок состояния, скопируйте URL, а затем сохраните параметры выпуска:
Мы можем проверить это здесь:
Сладкий! Я думаю, что я добавлю его в readme.
Ой: давайте на самом деле непрерывно Развертывать
К сожалению, последняя вещь: я перепутал на вариант триггера непрерывного развертывания ранее. Когда я сказал, что это будет так постоянно, я забыл, что вам пришлось четко включить, что первым (что имеет смысл и я ценю.)
- Я редактирую определение выпуска
- Я нажимаю на болт молнии, включить непрерывное развертывание и добавить фильтр для ветви:
- Я экономлю выпуск.
… сейчас Это развертывает автоматически. По-настоящему на самом деле.
Результаты
Теперь я вижу:
- ✅ Сборка отделки
- ✅ релиз создал себя
- ✅ Релиз разворачивает BLOB соответствующим образом
- ✅ Timestamps на Blob обновляются
- ✅ Индикаторы состояния на
Readme
верны.
И с этим наша работа сделана!
Оригинал: «https://dev.to/seankilleen/adding-public-ci-cd-to-a-node-project-with-azure-pipelines-471d»