Рубрики
Uncategorized

Ultimate (бесплатный) CI / CD для ваших проектов с открытым исходным кодом

История сопровождающей стойки OSS с размещенными услугами CI для GitHub и пошагового учебника для добавления трубопроводов Azure в ваш репозиторий. Теги от Opensource, Github, DevOps, Azure.

Я провожу хорошую часть моего свободного времени, работая над программным обеспечением с открытым исходным кодом (OSS) на Github, и я делаю это (в основном) для удовольствия и изучения новых вещей. Но одна вещь, которую я могу сказать, вам не весело, теряет время охотничьих жуков, которые я не могу воспроизвести … Или боевые действия с инструментами, которые должны помочь вам, как ваша система непрерывной интеграции (CI).

Вы когда-нибудь задавались вопросом, на котором решение CI/CD вы должны инвестировать свое время? Вы пришли в нужное место!

Обязательное раскрытие: я сейчас работаю на Microsoft, но я начал думать о миграции CI, прежде чем переключать работу, и я не был вынужден это делать. Мой опыт работы с проектами OSS возвращается далеко перед моей нынешней работой, и я попытался поставить мою честную обратную связь в качестве сопровождающего OSS в этой статье.

TL; доктор

  • Если вы планируете поддерживать проект с открытым исходным кодом в долгосрочной перспективе, что вы должны сделать автоматизировать
  • Худший способ потерять время — это когда ваши автоматические сборки не работают, как предполагается: вспышность, ненадежные сборки, а кросс-платформы могут (воли)
  • Прагматизм должен быть ваш главный водитель здесь, стремиться заработать работу в течение наименьшего времени в инвестировании

Исходя из этого, я обнаружил, что Лазурные трубопроводы В настоящее время предлагает лучшие Время инвестиции/преимущества Соотношение на мой взгляд.

Что может измениться один раз Действия GitHub CI/CD Решение становится доступным для всех (запланированных на 13 ноября). Но до тех пор я буду придерживаться пробуримого и проверенного решения, который позволяет мне проводить больше времени с моими близкими, чем бороться с проблемами сборки 🍸

Что вы узнаете здесь?

  • Как настроить Лазурные трубопроводы Для проекта с открытым исходным кодом размещены на GitHub (Node.js в этом случае, но это работает для любого стека)
  • Почему это может помочь вам сэкономить некоторые из ваших ограниченных рабочих времени OSS

Если вам все равно, что на задней истории вы можете прыгать прямо в действие.

Полная история

Это было несколько лет, когда я поддерживал несколько проектов с открытым исходным кодом на GitHub, и через годы я пришел к этому выводу:

  • 🔥 Быть сопровождающим трудно (без шуток!)
  • ⏲ Требуется много свободного времени (что вы, возможно, иногда предпочитаете расходы с семьей и друзьями)
  • 😭 резки углов, чтобы набрать время в краткосрочной перспективе почти всегда приводит к тому, что в долгосрочной перспективе … (как с любым программным обеспечением)

Помимо шутит, последний момент легко упускать из виду, и я упал в это слишком много раз, не добавляя правильные тесты или CI, как:

» Я делаю это в основном для себя, но я поделюсь этим, если это может быть полезно другим »

Упс, не планировал это 😱

БОЛЬШАЯ ОШИБКА. Как только выпуски и PRS приходят, это Слишком поздно Отказ Просмотр, тестирование и развертывание исправлений и новых функций из ваших участников становится черным отверстием потерянного времени.

Через несколько проектов.

Тогда это было хорошо. Как-то.

Несколько лет назад был не так много выбора, если вы хотите бесплатное размещенное решение CI для проекта с открытым исходным кодом. Я был счастлив, что некоторые решения существовали, учитывая, что это было, ну … бесплатно.

Вот как я закончил использовать самые популярные решения, такие как Трэвис СИ , Опдерер и Circleci . Каждый из них встречается с особой необходимостью, но ни одно из них идеально, к сожалению.

Трэвис СИ 5 одновременных рабочих мест, поделились между всеми вашими репозиториями Linux + Mac сборки Простейший и самый распространенный способ начать работу с CI на Github.
Опекун 1 одновременная работа Windows + Linux строит. Долгое время это была единственная платформа CI, предоставляющая бесплатный уровень для сборки Windows.
Circleci 1 параллельная работа 1000 строит минут / месяц Linux только сборки Самое гибкое решение этих 3, как вы можете использовать свой собственный контейнер, но это также самый сложный для настройки

Красные сборки и проблемы

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

Матрица сборки

Сначала возникает проблема окружающей среды: я разрабатываю на Mac OS, CI работает на Linux … и проблемы отображаются в Windows. Вот как я оказался с использованием комбинации TRAVIS CI + APPVOREOR, например, многие проекты.

Тогда есть проблема совместима с несколькими версиями платформы. Например, проект поддерживает Node.js > = 8 Будут мудрым тестировать на всю версию LTS вместе с последней стабильной версией: это будет означать в это время 8.x. , 10.x и 12.x Отказ

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

Но когда вы начинаете иметь Многие проекты И у каждого есть Множественные сборки Общее время сборки начинает становиться проблемой: мне уже пришлось ждать дни (!), чтобы иметь возможность объединить некоторые PR, потому что многие пришли одновременно на разных проектах (и все разделяли тот же предел работника). Когда ваш трубопровод уже довольно длинный (вроде 1H для постройки PR), он может быть проблематичным действительно быстро.

Неопределенность не приветствуется

Наконец, есть самая страшная проблема, которая забрала бесчисленные часы моей жизни в течение ничего: Flaky Builds 😱.

Иногда для Нет веских причин один или многие из ваших сборных терпят неудачу. А вы (или ваши вкладчики) теряете время расследования проблемы, обнаружив, что сервис CI является проблемой, а не код.

Если только один раз в то время и вы подозритете, вы просто перезапускаете сборку, и он проходит. Но иногда нет, заставляя вас тратить драгоценное время, пытаясь исправить CI, потому что:

  • К сожалению, обновленная (ошибка) была выдвинута ( Shit происходит , но как только это было там несколько недель)
  • Создание контейнерных изображений были настраиваются (и ваш CI идет 💥)
  • » В настоящее время мы испытываем технические трудности »
  • Нет причин… 😞

И со временем это заставляет вас настороженно о своем собственном CI, что не очень хорошая вещь.

Я знаю, что я мог просить слишком много, и большинство проектов OSS просто отлично используют эти решения. И быть полностью справедливым, учитывая, что все эти услуги предоставляются бесплатно, это трудно жаловаться.

Встретить лазурных трубопроводов

Некоторое время назад я обнаружил, что Jipster Мигрировал все его CI в Лазурные трубопроводы Отказ Я знал этот проект долгое время, и его сложность Ci нечего смеяться над тем, что много комбинированных путей и огромных времен строя. Так что это заинтересовало меня, и я пытался перенести некоторые проекты, чтобы проверить его.

Ну, я был удивлен, увидев, что лазурные трубопроводы дают вам довольно много бесплатно По сравнению с другими решениями:

  • Он может нацелиться на любую ОС (Windows/Mac/Linux)
  • Это быстро (10 Parallels работников на организацию для OSS уровня)
  • Кажется более надежным (из моего собственного опыта и дискуссий с сопровождающими Jipster)
  • Это довольно легко настроить и работать (немного сложнее, чем Трэвис, но с большей гибкостью)

Я начал мигрировать тесты A Простой Node.js проект моего. Существующая комбинация TRAVIS/APPVORYOR была заменена одним лазурным конвейером для тестирования на Windows/Mac/Linux, как это сделано в этот PR Отказ Мне пришлось отключить Git Autocrlf Вариант для Красивее Проверьте, чтобы быть счастливыми в Windows, но кроме того, что миграция была тривиальной.

После этого первого успеха я переехал, чтобы мигрировать гораздо более сложный и требовательный CI Генератор-NGX-Rocket И вот результат.

Лазурный трубопроводы Трэвис + Опповедник + Круг CI с пользовательским документом Docker Услуга
83 сборки (Linux / Windows * 2 версии узла + Mac / Android) 40 сборки на Трэвисе (Linux * 2 версии узла) 20 сборки на Appveyor (Windows) 1 Создание на CIRCLECI (Android) Комбинации
~ 1H для PR (~ 30min, если ограничивается предыдущим сценарием Travis) ~ 1H для PR (~ 50min Travis, ~ 1H Appveyor, ~ 5min circleci) Время сборки

Миграция не была тривиальной на этот раз, когда я должен был использовать Шаблон Для генерирования матрицы комбинаций, но результат велик:

  • Только один конфигурация для управления (и не нужно создавать дополнительный документ докера для Android)
  • Больше комбинаций проверены в то же время
  • Какой-то бонус, как публикация Android, построил APKS непосредственно как артефакт сборки

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

Эй, подожди, но как насчет нового Действия GitHub для CI/CD Удар

Я даю вам, что это выглядит потрясающе, особенно oss уровня 😍 Как только он станет доступным для всех 13 ноября, он, вероятно, станет лучшим решением там (и эта статья будет обновлена в этом случае 😉).

Две вещи, чтобы все еще учитывали лазурные трубопроводы, хотя:

  • Если вы не приглашены в качестве одного из бета-тестеров, вы не сможете использовать действия GitHub сейчас. Но в то же время вы, вероятно, хотите работать рабочее решение CI!
  • Действия GitHub для CI/CD основаны на частях стека лазурных трубопроводов, поэтому миграция должна быть ветером, если вы уже используете последние

Давай сделаем это!

На данный момент вы можете попробовать это для себя. Мы пройдемся по шагам, чтобы поставить на место настроек Azure Pipeline CI для вашего проекта Node.js (не уходите, если вы используете другой стек, это не сильно отличается, и я дам несколько указателей 😉).

Вы можете увидеть пример результата На этом репозитории Отказ

Требования:

  • Azure Evops Счет (Вы можете использовать свой аккаунт GitHub, чтобы войти в систему)
  • Репозиторий GitHub с некоторыми тестами, которые вы хотите автоматизировать

1. Подготовьте свой репозиторий

Во-первых, вы должны подготовить свои тестовые скрипты для CI.

Для проекта Node.js он обычно делается, добавив Тест Сценарий в вашем package.json файл:

{
  "scripts": {
    "test": "jest"
  }
}

В этом примере Jest будет использоваться для запуска агрегатов.

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

2. Создайте проект Azure DEVOPS

В вашем аккаунте Esure DEVOPS создайте новый проект и дайте ему имя:

3. Настройка трубопровода

После этого перейдите к Трубопроводы Раздел слева:

Затем нажмите Новый трубопровод Чтобы начать процесс установки:

Выберите Github (Ямл) Затем следуйте процессу, чтобы связать свой аккаунт с помощью Azure DEVOPS:

Выберите свой репозиторий, затем авторизуйте приложение на GitHub.

После этого выберите первый Node.js Опция (или любой другой вариант для вашего технологического стека):

Для других стеков и языков, таких как C #, Java, Go, Python, и поэтому вы должны посмотреть на соответствующую страницу в Экосистемная секция документов. Вы получите конкретные намеки на то, как вы можете настроить свою сборку с любимой техникой.

Вы можете найти много примеров YAML файлов в Этот репозиторий Отказ

4. Настроить YAML

Затем вы будете представлены этот файл YAML в редакторе:

# Node.js
# Build a general Node.js project with npm.
# Add steps that analyze code, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/javascript

trigger:
  - master

pool:
  vmImage: 'ubuntu-latest'

steps:
  - task: NodeTool@0
    inputs:
      versionSpec: '10.x'
    displayName: 'Install Node.js'

  - script: |
      npm install
      npm run build
    displayName: 'npm install and build'

На данный момент вам нужно только изменить последнюю часть для запуска команды NPM тест вместо NPM запустить сборку :

- script: |
    npm install
    npm test
  displayName: 'npm install and test'

Нажмите Сохранить и запустить Затем выберите, следует ли обнимать напрямую на Мастер Или создайте новую ветку с пр.

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

После этого нажмите Сохранить и запустить Опять же, то убедите, что все работает нормально.

5. Добавление матрицы сборки

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

Выберите Редактировать трубопровод В меню вернуться к редактору YAML:

Сначала добавьте эту матрицу в верхней части вашего файла:

strategy:
  matrix:
    linux-node-10:
      imageName: 'ubuntu-latest'
      nodeVersion: '10.x'
    linux-node-latest:
      imageName: 'ubuntu-latest'
      nodeVersion: '>=12.x'
    mac-node-10:
      imageName: 'macos-latest'
      nodeVersion: '10.x'
    mac-node-latest:
      imageName: 'macos-latest'
      nodeVersion: '>=12.x'
    windows-node-10:
      imageName: 'windows-latest'
      nodeVersion: '10.x'
    windows-node-latest:
      imageName: 'windows-latest'
      nodeVersion: '>=12.x'

Это позволит вашим тестам работать на Windows, Linux и Mac OS, используя 2 разных версиях Node.js каждый раз, в общей сложности 6 сборки.

Затем обновите Бассейн Раздел Чтобы использовать имя изображения текущей сборки:

pool:
  vmImage: $(imageName)

Наконец обновите Узел Задача сделать то же самое для версии Node.js:

- task: NodeTool@0
  inputs:
    versionSpec: $(nodeVersion)
  displayName: 'Install Node.js'

Нажмите Сохранить Тогда Беги Чтобы проверить обновленный трубопровод, и вы закончите.

Если вы создали ветку с PR при сохранении конфигурации трубопровода в первый раз, вам также необходимо отправиться на GitHub и сначала объединить этот PR, чтобы активировать трубопровод для новых коммитов и PRS.

Не забудьте взглянуть на полный Документация , чтобы увидеть все задачи и функции доступны.

6. Добавить значок состояния (необязательно)

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

  • Это поддерживается, и вы заботитесь о своем качестве
  • Вкладчики могут с уверенностью PR

Чтобы сделать это, вернитесь к своим трубопроводам сборки и нажмите Значок статуса в меню:

Затем скопируйте код Markdown с помощью кнопки и вставьте его в верхнюю часть вашего readme.md Файл в корне вашего репозитория:

Как только это привержено Мастер Филиал Это станет видимым на документации Github вашего проекта. Статус значка будет обновлен автоматически в соответствии с последним коммитаром на Мастер Отказ

Чтобы завершить этот статус значок с некоторыми другими, посмотрите на https://shields.io Отказ Вы даже можете построить свой собственный:

7. Наслаждайтесь своими вечерами

Вот и все!

Как только новый коммит или PR будет подталкиваться на ваш репозиторий, CI позаботится об этом и покажет результат непосредственно на GitHub:

Теперь вы можете расслабиться и наслаждаться свободным временем снова 🍻.

Для дополнительного спокойствия, я предлагаю вам включить Требуемый статус Проверить С новой CI, поэтому только PRS, проходящие выбранные проверки, могут быть объединены.

Не забудьте поделиться своими отзывами и опытом в комментариях!

Идти дальше

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

Есть также гораздо больше, что вы можете сделать с помощью лазурных трубопроводов (Я упоминал компакт-диск где-то?) Но давайте сохраним это на потом 😉.

Следуй за мной на Twitter Я был бы рад обсудить и принимать ваши предложения!

Оригинал: «https://dev.to/itnext/the-ultimate-free-ci-cd-for-your-open-source-projects-3bkd»