Рубрики
Uncategorized

Добавление публичных Ci / CD в проект узла с помощью лазурных трубопроводов

Я недавно создал «Unanet-Summarizer», небольшую утилиту, чтобы дать моим коллегам в некоторых дополнительных резюме … Теги с Azure, DevOps, трубопроводы, узлом.

Я недавно создал «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.
  • Когда создание завершается, я нажимаю, чтобы перейти на ресурс.
  • У меня пока нет контейнеров, поэтому я нажимаю, чтобы добавить один:
  • Я предоставляю имя и выберите анонимный доступ на уровне контейнера, поскольку наше намерение явно служит нашим сценариям для всего мира.

Это где мы в конечном итоге развернут.

Создание развертывания

Говоря о том, звучит так, как мы должны пойти, создать это развертывание!

  • Вернуться в Azure DevOps, я выбираю Релизы из левого меню. У меня еще нет, что имеет смысл. Я решил создать новый.
  • Мне предложили начать с шаблона, но потому что мы выводят в BLOB, я думаю, что пустая работа, вероятно, имеет самый смысл.
  • Я получаю этап по умолчанию (что вы можете сделать для разных сред, и т. Д.). В нашем случае на данный момент у нас есть только один этап: «Развернуть к производству BLOB». Так что я даю сцену имя.
  • Я на самом деле не вытягиваю в любые артефакты, которые станут выпустить релиза еще, поэтому нажал, чтобы сделать это:
  • Я говорю о выпуске, что я хочу, чтобы он использовал артефакты из последней сборки Мастер ветвь, и я нажимаю Сохранить:
  • Обратите внимание на молния болт на артефактах. Это означает, что в любое время появляется новый из этих артефактов, выпуск будет создан и выполнен.
  • Я нажал, чтобы просмотреть задачи для сцены, так как мы еще не добавили:
  • Я нажал, чтобы добавить задачу на работу агента:
  • В задачах, список, я ищу «BLOB» (это буквально мой первый раз, когда это делает), и omsomely, «Azure File Copy» возникает. Я нажал, чтобы добавить его.
  • Я вижу, что «некоторые настройки нуждаются в моем внимании», поэтому я нажимаю в него:
  • Мне нужно выбрать источник. К счастью, есть меню ELLIPSIS, которое позволяет мне выбрать местоположение на основе моего артефакта.
  • Я выбираю папку «Артефакт», которую я хочу скопировать из:
  • Я выбираю ID подписки (пропуская это здесь), а затем нажмите Авторизуйтесь Разрешить Azure DEVOPS, чтобы получить доступ к им потребности:

… и я получаю ошибку. Что справедливо, потому что я использую ресурс компании и не имею полных прав администратора там (что я в порядке с). Обычно на личных подписках это просто работает ™ ️.

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

Примечание о разрешениях подписки Azure

И мы вернулись! Забавный факт: нажатие на кнопку «Авторизация» пытается сделать это для целой подписки, но если вы нажмете параметры расширенных:

Вы можете выбрать группу ресурсов, а затем она будет работать, так как у меня есть доступ к группе ресурсов:

… Хорошо, вернитесь к нашему регулярному шоу.

Выбор пункта назначения развертывания и развертывание

  • Я выбираю тип назначения и укажите его к созданию учетной записи хранилища:
  • Хорошо, я думаю, что это в значительной степени это И я готов спасти релиз и посмотреть, как это разработано.
  • Давайте дадим это выстрел! Я добрался до страницы выпуска и нажмите, чтобы создать релиз:
  • Я даю релиз описания, а затем нажмите Создать :
  • Похоже, это работало!
  • Я возвращаюсь к Azure Portal, чтобы проверить, вот и вот, это там!

Добавление значка выпуска

Теперь релизы для прохладастые, поэтому я хочу показать их публично. Как мне это сделать?

Мы можем проверить это здесь:

Сладкий! Я думаю, что я добавлю его в readme.

Ой: давайте на самом деле непрерывно Развертывать

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

  • Я редактирую определение выпуска
  • Я нажимаю на болт молнии, включить непрерывное развертывание и добавить фильтр для ветви:
  • Я экономлю выпуск.

сейчас Это развертывает автоматически. По-настоящему на самом деле.

Результаты

Теперь я вижу:

  • ✅ Сборка отделки
  • ✅ релиз создал себя
  • ✅ Релиз разворачивает BLOB соответствующим образом
  • ✅ Timestamps на Blob обновляются
  • ✅ Индикаторы состояния на Readme верны.

И с этим наша работа сделана!

Оригинал: «https://dev.to/seankilleen/adding-public-ci-cd-to-a-node-project-with-azure-pipelines-471d»