Невероятно мощный инструмент, который сэкономит ваше время и избавит от головной боли при настройке!

Это сообщение отражено в моем блоге chrisfrew.in, где поддержка фрагментов кода значительно улучшена, а также есть другие забавные полезности!

Узнайте все, что подробно описано в этом сообщении, и многое другое в моем полном курсе «Освоение конвейеров Bitbucket для CI и CD», доступном на Skillshare и Udemy:





Вы всегда входите на свой сервер по SSH и боретесь со своими сборками и развертываниями?

Вы попали в правильный пост. Этот пост будет посвящен Bitbucket Pipelines.

Полное раскрытие информации: мне не платили и не спонсировали иным образом Atlassian, чтобы написать это, я просто давно пользуюсь Bitbucket и также считаю их инструмент CI / CD, Pipelines, невероятно мощным и полезным!

У меня также есть курс по Skillshare и Udemy, который шаг за шагом углубляется во все темы в этом посте и многое другое!

В качестве полностью бесплатной альтернативы (Bitbucket Pipelines предоставляется бесплатно только в течение определенного количества минут сборки в месяц) вы можете воспользоваться GitHub Actions для инструмента CI и CD, ориентированного на проекты с открытым исходным кодом. Хотя в этом посте будут использоваться синтаксис и соглашения для Bitbucket Pipelines, многие концепции могут быть перенесены в мир GitHub Actions.

Bitbucket Pipelines?

Так что же такое Bitbucket Pipelines? Bitbucket Pipelines - это еще один инструмент CI / CD, такой же, как CircleCI или Travis CI: это среда, в которой вы можете настраивать и выполнять определенные операции в своих репозиториях каждый раз, когда вы отправляете код в источник. Мы можем запускать тесты, сборки и даже SSH на наших производственных серверах, перемещать код или перезапускать процессы, при этом мы подключены к перехватчикам обмена сообщениями, чтобы оставаться в курсе, в то время как Pipelines делает всю работу за вас!

Если вы искали более настраиваемый инструмент для сборки и развертывания помимо автоматизированных инструментов, таких как Heroku и Netlify, Bitbucket Pipelines для вас! (Например, при развертывании с этим блогом я использую gzip файлов, чтобы сделать его еще быстрее! 🔥 Хотя здесь я использую GitHub Actions.)

Достаточно домашнего хозяйства; давайте начнем с этого руководства.

Файл конвейеров Bitbucket «Hello World»

Для начала создадим «Hello World» версию файла конфигурации Bitbucket pipelines. Все файлы конфигурации Bitbucket Pipelines должны иметь имя bitbucket-pipelines.yml и располагаться в корне вашего репозитория.

Затем мы запускаем YAML-файл с директивами pipelines: и branches: и называем нашу ветку. Это будет ветвь, которая при нажатии запускает последующие шаги в нашем файле Pipelines.

Обратите внимание, что вы можете указать несколько веток! Это мощная функция конвейеров, как мы увидим, для нескольких сред, например, когда у вас есть как тестовый, так и производственный сайт. На данный момент я буду использовать имя ветки git по умолчанию master для нашего конвейера hello world. Объединяя все упомянутые директивы, наш файл конвейеров Hello World выглядит так:

Итак, после наименования ветки master я создал так называемый step. Эти шаги кажутся разделенными и помечены name в пользовательском интерфейсе конвейеров. Для каждого шага мы также можем видеть результат того, что было сделано на данном шаге, что позволяет легко отслеживать любую сборку или интеграцию позже:

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

Проверка и проверка файлов конвейера

Bitbucket также предоставляет инструмент для проверки вашего YAML-файла конвейера. Проверьте это, скопируйте и вставьте указанный выше файл YAML, чтобы проверить!

В качестве примера неправильно отформатированного файла YAML попробуйте скопировать и вставить его в:

Ха ... этот файл выглядит практически так же, как и другой, верно ?! Вы видели ошибку, выделенную валидатором? Да, в нашей директиве script: неверный отступ:

В 99% случаев ваши проблемы с файлами YAML будут связаны с форматированием и отступами. Я рекомендую использовать хороший редактор и, возможно, библиотеку YAML, чтобы избежать этих проблем с отступами, и часто вызывать функцию «форматирования» в вашем редакторе для форматирования отступа YAML.

Хватит новичков! Давайте создадим файл конвейеров для настоящей сборки!

Хорошо, запускать команду bash в наших конвейерах - это здорово и все такое, но давайте сделаем настоящую сборку.

Предположим, мы запускаем приложение React с использованием TypeScript, где нам нужно выполнить некоторые «настоящие» команды. Такой конвейер может выглядеть так:

Где наш скрипт узла build будет не чем иным, как вызовом tsc, определенного в package.json следующим образом:

...
"scripts": {
"build": "tsc"
}
...

Сохранение артефактов в папке Dist и модулях NPM

Итак, мы настроили несколько настоящих команд сборки, и теперь нам нужно что-то сделать с тем, что было построено! Это требует использования так называемых артефактов. Артефакты - это файлы или папки, созданные на шаге, и они сообщают Bitbucket, что эти файлы или папки следует использовать на более поздних этапах, например, для отправки этих файлов или папок на ваш сервер!

Обычный шаблон для TypeScript - поместить все артефакты сборки в папку dist/ (через outDir config setting), поэтому предположим, что у нас есть такие настройки. Мы будем использовать директиву artifacts сразу после директивы script в нашей конфигурации конвейеров, чтобы сообщить Bitbucket, что мы хотим сохранить как папки dist/, так и node_modules/.

Предположим также, что мы создали простой статический сервер с помощью Express и поместили его в index.js файл. Этот файл не будет создан во время процесса, это будет обычный файл, зарегистрированный в нашем репозитории - файлы, которые уже существуют в вашем репозитории, также можно объявить как артефакты! 😄

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

SCP для копирования артефактов на выбранный вами сервер

Итак, у нас есть процесс установки и сборки, и у нас есть артефакты от обоих процессов. Чтобы продолжить этот пример, предположим, что мы хотим что-то сделать с этими артефактами - в этом случае мы отправим их на выбранный сервер с помощью SCP:

Обратите внимание, что для этого требуются дополнительные действия за пределами файла pipelines.yml! Вам нужно будет добавить переменные USER и SERVER (указанные выше как $USER и _22 _ ) как переменные конвейера! Здесь вы можете увидеть подробные инструкции по настройке переменных конвейера.

SSH для входа на выбранный вами сервер

Теперь, когда наши артефакты находятся в папке var/www/your-first-pipeline-site на сервере, мы войдем на сервер по SSH и запустим index.js с node index.js.

К счастью, мы можем использовать те же самые переменные $USER и $SERVER из последнего раздела нашей команды SSH:

Обратите внимание, что этот тип конвейера также потребует дополнительных шагов: вам нужно будет настроить свой сервер для приема SSH-подключений из вашего репозитория! «Вы можете увидеть, как подробно настроить SSH-ключи для вашего репозитория. здесь."

Ура! Теперь у нас есть полнофункциональная CI: мы устанавливаем, строим, сохраняем и развертываем наши артефакты на сервере и даже запускаем сам сервер. Потрясающий! 🚀

Здесь все еще есть небольшая проблема с запуском node index.js на сервере в нашем конвейере, но вам нужно пройти полный курс, чтобы узнать об этом!

Бонус: многоотраслевая и многопользовательская система

Давайте посмотрим на файл Pipelines, который поддерживает несколько сред. Как я упоминал ранее, возможно, у вас есть тестовый сайт и рабочий сайт, которые соответствуют ветвям staging и master соответственно. Такой файл конфигурации конвейеров может выглядеть так:

Вы заметите, что здесь я запускаю команду cp, которая копирует соответствующее окружение для данной ветки (впоследствии сборка будет использовать только значения из .env.json во время следующих шагов). Обычно у меня есть следующая папка и файлы для установки среды:

env
├── .env.develop.json
├── .env.json
├── .env.production.json
└── .env.staging.json

В качестве альтернативы вы можете создать серию файлов TypeScript, каждый из которых содержит класс с public static readonly переменными в нем - хотя это, очевидно, гораздо больше зависит от того, действительно ли вы находитесь в проекте, использующем TypeScript. 😄

Обратите внимание, что любой из этих файлов env или config должен быть зарегистрирован в git, поэтому они действительны только для общедоступных переменных - возможно, заголовков, стилей и т. Д. Для секретных переменных вам все равно нужно будет использовать другие инструменты, такие как dotenv или переменные среды bash (например, process.env в Node.js).

Бонус: добавьте Slack Bot и веб-перехватчик сообщений

Интересно включить в Bitbucket Pipelines Slack-бот с веб-перехватчиком, с помощью которого вы можете отправлять сообщения на различных этапах процесса сборки или интеграции, а также в моменты, когда что-то идет не так.

Самый простой (хотя, возможно, не самый чистый) способ сделать это - добавить команду curl прямо в ваш файл Pipelines, которая вызывает URL-адрес веб-перехватчика Slack с нужным сообщением:

Plug Time: узнайте все это и многое другое на моем курсе Bitbucket Pipelines Mastery!

Мой курс Освоение конвейеров Bitbucket для CI и CD доступен на Skillshare Premium и за 20 долларов на Udemy:





Если вы хотите пройти предварительный просмотр первых нескольких уроков курса, то это на YouTube:

Мои курсы всегда включают в себя полный репозиторий кода, пошаговые видеоролики, пошаговые инструкции, конфигурации, живое тестирование, примеры и многое другое!

Спасибо!

Как всегда, спасибо за чтение, и я надеюсь, что вы кое-что узнали о Bitbucket Pipelines!

-Ваше здоровье! 🍺

Крис