Я недавно перестроил свой личный веб-сайт в GATSBY, ранее он был вручен вручную HTML и CSS.
Я не хотел создавать артефакты на моей машине и вручную загрузить файлы в S3. Я сделал это раньше, и он всегда чувствует себя хрупким и плохо документированным.
GATSBY, являющийся генератором статического сайта, управляемый данными, я хотел бы обновить данные, толкать код в GitHub, и вывод доставляется в AWS S3 без меня, чтобы не забывать делать что-либо.
Действия GitHub — это способ, которым я могу получить это поведение бесплатно без необходимости настроить учетные записи и интеграции за пределами GitHub.
Действиями являются код, которые запускаются по отношению к событиям, связанным с репозиторий GitHub. Они могут сделать целый множество вещей, которые помогут автоматизировать рабочие процессы вокруг взаимодействия на репозитории Git.
Общий корпус использования, а тот, который я смотрю, устанавливает непрерывную интеграцию (CI) и конвейер непрерывной доставки (CD). Я полагаю, что это большой шанс для меня, чтобы впервые играть с Действием GitHub.
Действия настроены с использованием Ямл
Файлы в /github/workflows
папка.
Каждый из этих файлов представляет собой одно действие, которое может быть запущено событием в GitHub. Каждое действие может иметь больше нескольких заданий, которые могут иметь несколько шагов в моем случае, я бы хотел начать с выполнения шагов сборки и тестирования на всех ветках с развертыванием только на мастере.
Для достижения этого я разделил процесс на две работы. Первые запускаются все шаги по сборке и пакету. Второе делает развертывание.
Добавление задания сборки относительно проходит вперед. Это одна работа с серией шагов для установки узлов модулей, запускающихся подвижным, красивее и построить GATSBY.
Использование Node.js.
Первое, что нужно сделать, это убедиться, что правильная версия Node.js доступна. Это можно сделать, используя Действие Github настроек-узла Отказ
steps: - uses: actions/checkout@v2 # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/setup-node@v2-beta with: node-version: "12"
Установить, тестировать, построить и, Lint
Установка, тестирование, сборка и шаги с линтами все используют сценарии, которые настроены в package.json
файл.
- name: NPM Install run: npm install # - name: Run Jest #:( WHy no tests klee # run: npm test - name: Run Lint run: npm run lint - name: Run Prettier run: npm run prettier:check - name: Gatsby Build run: npm run build
Храните скомпилированные файлы
После того, как этап сборки выполнен, созданный выход должен быть доступен для задания выпуска. Для этого я связываю завершенные артефакты в архив на молнии на один шаг, а затем загрузка, что артефакт, чтобы построить артефакты, используя действие, поставляемое github на следующем шаге. Этот артефакт затем доступен для загрузки и использование последующих рабочих мест.
- name: zip build resulit run: tar -czvf build.tar.gz public - name: archive zip uses: actions/upload-artifact@v2 with: name: build path: build.tar.gz
Цепочка рабочих мест
По умолчанию две работы будут бегать асинхронно. Чтобы получить вторую работу, на самом деле во-вторых, он должен явно настроить, чтобы зависеть от завершения первого. Это сделано с использованием удачно по имени нужно
Недвижимость с массивом заданий, которые необходимо завершить до того, как эта работа может работать. В моем случае это выглядит:
deploy: needs: - build
Получить артефакты
Для скачивания артефактов из я использую действие Скачать Artifacts Action Действия/Скачано-артефакт @ v2
Затем извлечение файлов из архива, чтобы сделать его доступным на шаг загрузки.
- name: download artifact uses: actions/download-artifact@v2 with: name: build - name: extract build run: tar -xzvf build.tar.gz
Загрузка на S3
Я использую 2 шага, чтобы получить содержимое архива в AWS S3, чтобы его можно было подавать публику.
Настроить AWS SDK
AWS обеспечивает действие для настройки AWS CLI на агенте так, чтобы его можно было использовать в последующих шагах.
- name: Set AWS credentials uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: ${{ secrets.AWS_DEFAULT_REGION }}
Этот шаг требует, чтобы секреты о учетной записи AWS доступны. Они сделаны доступными путем загрузки через консоль GitHUB. После загрузки эти секреты доступны в действии.
Загрузить с помощью AWS CLI
Последний шаг в процессе является синхронизация выхода API с ведром S3.
- name: Deploy to S3 run: aws s3 sync ./public s3://kleeut.com --acl public-read
С этим каждый фиксирует и публикует AWS. Это круто Но я не хочу, чтобы каждая ветвь толчок дует код, развернутый из Главная
ветвь.
Ограничение развертывания задания на главную ветку
Чтобы ограничить выполнение задания на одном филиале GitHub Действия предоставляет Если
Недвижимость на рабочих местах. Это позволяет мне предоставить условное утверждение, которое определяет, следует ли выполнять работу. В этом случае:
if: github.ref == 'refs/heads/main'
Это выполняется только в том случае, если текущий филиал является Главная
ветвь.
С этой моей целевой системой CI/CD для этого сайта была установлена. Я могу построить кодовую базу, запускающую головокружение, и если бы я не был таким ленивым тестам против каждой ветви. Совмещенный вывод доступен для скачивания, чтобы я мог проверить код филиала, прежде чем объединиться в главный
и когда код сливается в главный
Это развертывается в S3 без меня, нужно что-либо делать.
Я немного опоздал на вечеринку, но Действия GitHub являются отличным инструментом. Тот факт, что они свободны (до точки) для проектов, разработанных в открытом воздухе, означает, что у меня нет оправдания, не включающих Ci и CD в рамках моего процесса сборки для каждого глупого малообеспеченного проекта.
Оригинал: «https://dev.to/kleeut/deploying-gatsby-to-s3-my-first-time-with-github-actions-11ga»