Что такое действия GitHub?
Действия GitHub, функция, объявленная в октябре 2018 года во время вселенной Github, породила огромную шумиху под позиционированием APT как «швейцарский армейский нож» для автоматизации рабочего процесса Git.
Действия GitHub позволяет разработчикам автоматически выполнять задачи в рабочем процессе GitHub, например, нажимать на репозиторий, развертывая выпуск к постановке, запущенным тестам, удалению флагов функций и т. Д., С помощью простого текстового файла.
Chewy.com Например, демонстрировал действие, которое проверяет, если Номер билета JIRA включен В каждом названии запроса на тягу среди прочего, чтобы убедиться, что код, развернутый в производстве, соответствует их политике и передовым опытам.
» С действиями GitHub вы можете автоматизировать ваш рабочий процесс от идеи к производству ».
Написать Действия GitHub в Node.js
Я начал звонить с функцией, как только смогу получить доступ к частной бета-версии. Я заметил, что большинство действий написаны в скрипте Shell. Сам GitHub продвигал писать действия в Shell Script для простых действий Отказ Пока я понимаю мотивацию (так что вы можете быстро и легко начать писать действия), я чувствую, что сценарии Shell ограничены с точки зрения написания полноценного программного обеспечения.
Так как я вообще работаю в Node.js, я решил «принять вызов» и писать свои первые действия в узле. Но, но, боремся с спецификой бегущего узла .js Действия и понимание различий между простым контейнером и средой выполнения GitHub, я решил написать это руководство в надежде, что это поможет другим, которые предпочитают писать действие в JavaScript.
Настройка окружающей среды
Основная настройка проста — начните с помощью MORY Учебное пособие GitHub весь путь к enterpoint.sh раздел. Основное отличие до этого момента находится в выбранном образе докера. Я предлагаю использовать альпийское изображение , это очень легкий по сравнению с обычным Узел Image. . В любом случае, я предлагаю использовать вариант LTS, в настоящее время узел 10.
Очень важный инструмент, который помог уменьшить цикл развития с 5 минут на итерацию до нескольких секунд — Акт С Zero-Config, прост в использовании инструмент для выполнения действий локально. Он не полностью повторяет окружающую среду (по очевидным причинам, она не предоставляет токену GitHub, больше на это позже) Но это достаточно близко, чтобы ускорить процесс разработки и проверить ваше действие локально.
В конце этого шага вы должны иметь DockerFile, который выглядит так:
УСТОЙЧИНАЯ УСТАВКА НАСТРОЙКА
Это основная enterpoint.sh Файл, который будет работать для Aode.js Action:
Я выбрал NPM CI Потому что это самый простой способ убедиться, что вы всегда получаете те же версии пакетов, которые вы хотите установить. Это требует от вас package.json и Package-lock.json В вашем проекте — но это в любом случае, это лучшая практика.
Сценарий установки находится в файле точек входа, а не в DockerFile (как обычно в классическом контейнере используют случаи использования), потому что он намного проще использовать токен NPM и установить частные пакеты. Все, что вам нужно сделать, это добавить секрет NPM_Token и использовать его в файле точек входа (выше NPM CI ), добавив:
Набор настроек NPM Config//registry.npmjs.org/:_authtoken=$npm_token Узел Script.js $ * Запускает скрипт и передает действие ARGS в качестве аргументов к сценарию.
Узел сценарий Советы и основная структура
За прошедшие годы я разработал предпочтительную структуру для сценария исполняемого узла (CLI). Я поделюсь этим здесь, но с целью этого учебника эта часть полностью необязательна, и на данном этапе вы более чем готовы к разработке собственных действий в Node.js.
Сценарий выглядит так:
Важный раздел находится внизу: Если (требуется. Main)
Он проверяет, был ли файл импортирован/требуется или если это входная точка в программе. Это позволяет повторно использовать один и тот же модуль как программно, так и в качестве инструмента CLI.
Если это точка входа, я бы тогда анализировать аргументы командной строки (используя Commander ), переданный из enterpoint.sh Отказ Аргументы были введены в enterpoint.sh Github из файла рабочего процесса через контейнер (больше на это позже).
Затем я вызываю основную функцию. Поскольку это асинхронная функция, я обрабатываю его возвращаемое значение с предложением потом и обрабатывать сбой с помощью пункта CATT.
Также полезно прочитать событие, предоставляемое GitHub и использовать его в сценарии:
const.parse (fs.readfilesync (‘/github/workflow/event.json’, ‘utf8’)))
Секреты, args и среда исполнения
Действия среды требуют некоторого привыкания. Хотя GitHub предоставляет отличные учебники по всем вещам, связанным с рабочим процессом, я хотел упомянуть:
- GitHub предоставляет много Переменные среды Внутри контейнера работает действие, но большая часть информации также может быть получена из файла события (см. Раздел выше).
- Другие определяются в файле рабочего процесса, а некоторые из них предоставляются в рамках механизма секретов в GitHub.
Секреты довольно просты, вы определяете их на вкладке Настройки репо И тогда они выставляются в виде переменных среды внутри контейнера.
Определение секрета на вкладке «Настройки репо»:
Использование секрета в вашем файле рабочего процесса:
Единственным исключением является токен GitHub, который вам не нужно определять в настройках. Токен выставлен только в файле рабочего процесса, а GitHub предоставит саму токен с этими Разрешения .
Другой важный элемент для заметок — это установленная папка GitHub. Он установлен под/github и обеспечивает пару полезных вещей:
- событие под /github/workflow/event.json а также
- репо, где действие работает под /github/workspace/repo_name
Дополнительная информация о механике монтажа можно найти здесь Отказ
В этом руководстве дается хорошая отправная точка для тех, кто хочет создать свой первый Node.js действий. Мои действия можно найти здесь и код для этого здесь Отказ
Если вы заинтересованы в том, чтобы узнать больше о том, как вы можете использовать действия GitHub для автоматизации рабочих процессов Git, проверьте это Вебинар Чтобы посмотреть, как Shimon ToLts, CO-основатель Datreee.io, «Построил CI/CD DEV-трубопровод с действиями GitHub, Node.js, Docker и AWS Fargate» Отказ
Если у вас есть какие-либо вопросы, исправления или предложения, пожалуйста, прокомментируйте ниже или свяжитесь со мной напрямую.
Оригинал: «https://dev.to/datreeio/a-guide-to-github-actions-using-node-js-for-git-workflow-automation-43bc»