В данной статье вы узнаете как сделать деплой сайта при помощи GitHub Action. Инструкция очень простая, задача состоит в копировании файлов из репозитория GitHub на production сервер с сайтом.
Видео урок: Как сделать деплой сайта
Что такое GitHub Actions и для чего он?
GitHub Actions – это сервис GitHub, который позволяет автоматизировать задачи, связанные с разработкой и развертыванием вашего проекта. С помощью Actions вы можете:
- Создавать workflows: наборы автоматизированных задач, которые выполняются при определенных событиях, например, при push в ветку master, создании pull request или по расписанию.
- Использовать готовые actions: множество готовых действий для различных задач, таких как сборка кода, тестирование, деплой, уведомления и многое другое.
- Создавать свои actions: писать свои собственные действия на JavaScript, Python, Docker и других языках.
- Интегрировать с другими сервисами: подключать GitHub Actions к другим сервисам, таким как AWS, Google Cloud Platform, Docker Hub и другим.
Преимущества использования GitHub Actions:
- Автоматизация: автоматизируйте рутинные задачи, чтобы освободить время для более важных дел.
- Сокращение ошибок: автоматизация помогает уменьшить количество ошибок, которые могут быть допущены при ручной работе.
- Повышение скорости: автоматизация позволяет ускорить процесс разработки и развертывания.
- Улучшение контроля: отслеживайте ход выполнения workflows и получайте уведомления о завершении.
GitHub Actions – это мощный инструмент, который может помочь вам повысить эффективность разработки и развертывания вашего проекта. В этой статье мы рассмотрим, как использовать GitHub Actions для автоматического деплоя сайта.
Пишем YAML инструкцию для GitHub Actions
Первым делом в корне репозитория нужно создать каталог с названием .github
и в нем каталог workflows
. Именно в данном каталоге и нужно размещать файлы инструкций, которые пишутся на языке YAML. Название файлов произвольные, важно чтобы у них были расширение .yml
или .yaml
. Если вы указали верные названия для файлов, GitHub автоматически найдет в нем инструкции.
Приступим к заполнению инструкций. Поскольку они используют синтаксис YAML важен каждый пробел, поскольку данный код конвертируется в массивы и объекты, и следовательно лишний пробел может как испортить инструкцию, так и изменить ее логику.
Инструкция должна иметь название:
name: Deploy to Server
Второй важный параметр это условия при котором нужно запускать данную инструкцию для автоматизации. Они еще называются Events, и делятся на различные категории по типу. В моем случае я хочу запускать автоматизацию в момент когда происходит push на ветку main, то есть когда обновляю код репозитория в основной ветке.
on:
push:
branches:
- main
Последний и не менее важный шаг, это сами инструкции, которые называются Jobs. Job может быть один или несколько, а так же запускаться могут параллельно или последовательно по определенным инструкциям. Job можно себе представить как виртуальную машину, на которой и будет происходить процесс автоматизации.
Для каждого Job-а мы указываем операционную систему и GitHub поднимет инфраструктуру специально под нашу задачу (если нужен определенный набор софта или определенные версии — это легко настроить).
В моем случае для того чтобы просто скопировать файлы репозитория, нужно создать виртуальную машину, на нее скопировать файлы с самого репозитория, и далее уже с виртуальной машины отправить файлы на production сервер с сайтом. Моя инструкция использует только один job, который имеет ИД — deploy (данный ид вы вольны сами указывать)
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@master
- name: Copy files to server
uses: appleboy/scp-action@master
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USERNAME }}
password: ${{ secrets.SERVER_PASSWORD }}
port: ${{ secrets.SERVER_PORT }}
rm: true
source: "./*"
target: "public_html/working_directory"
Обратите внимание что в моем коде используется один Job, но в нем есть несколько шагов, которые выполняются последовательно.
На первом шагу я специальным actions копирую файлы в рабочий каталог на виртуальную машину uses: actions/checkout@master
а вторым шагом так же специальным actions uses: appleboy/scp-action@master
копирую файлы на сервер.
Actions — это отдельные скрипты которые помогают решить 90% задач. Их можно найти на маркетплейсе GitHub и они абсолютно бесплатны.
Вот код моего workflow целиком:
name: Deploy to Server
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@master
- name: Copy files to server
uses: appleboy/scp-action@master
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USERNAME }}
password: ${{ secrets.SERVER_PASSWORD }}
port: ${{ secrets.SERVER_PORT }}
rm: true
source: "./*"
target: "public_html/working_directory"
Заключение
В данной статье вы увидели простую инструкцию которая демонстрирует простоту использование и полезность данного инструмента. Если вы хотите подробнее погрузиться в возможности GitHub Actions, можете пройти мой курс по GitHub Actions либо на Udemy либо прямо на данной платформе он доступен в Клубе.