2.19.9. Деплой с помощью GitHub Actions

GitHub Actions — это набор средств автоматизации рабочих процессов на GitHub. С их помощью можно запускать различные действия при наступлении определённых событий. Одним их примеров является автоматическая выгрузка кода проекта с GitHub на хостинг при пуше изменений в репозиторий.

Внимание!

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

Настройка автоматического деплоя на примере экшена Rsync Deployments Action.

  1. Настройте SSH-аутентификацию по ключам:
    1. Сгенерируйте и добавьте ключ в учётную запись.
    2. Привяжите ключ к хостинг-аккаунту, куда должен выполняться деплой.
  2. Откройте свой репозиторий на GitHub.
  3. Добавьте необходимые для деплоя данные в секреты:

    Как добавлять секреты:

    1. Переключитесь на вкладку «Settings».
    2. Выберите «Secrets and variables → Actions» в боковом меню.
    3. Нажмите «New repository secret».
    4. Укажите название секрета в поле «Name» и значение в поле «Value».
    5. Нажмите «Add secret».

    Каждый параметр добавляется как отдельный секрет.

    Name Value
    REMOTE_HOST Хост SSH
    REMOTE_USER Логин SSH
    REMOTE_KEY Данные приватного ключа в формате PEM (начинается с -----BEGIN RSA PRIVATE KEY-----). ⚠️ Ключ должен быть приватный, не публичный.
    REMOTE_KEY_PASS Парольная фраза приватного ключа (если не используется, можно не добавлять или добавить с любым значением).
    REMOTE_PATH Абсолютный путь к каталогу на хостинге, куда должен выполняться деплой.
  4. Настройте экшен:
    1. Переключитесь на вкладку «Actions».
    2. Нажмите «set up a workflow yourself» или сначала «New workflow», а затем «set up a workflow yourself».
    3. Замените код в поле «Edit new file» на такой:
      name: SSH deploy on push
      on:
        push:
          branches:
          - main
      jobs:
        build:
          runs-on: ubuntu-latest
          steps:
            - uses: actions/checkout@v6
            - name: rsync deploy
              uses: burnett01/rsync-deployments@v8
              with:
                switches: -avzr --delete
                path: .
                remote_host: ${{ secrets.REMOTE_HOST }}
                remote_user: ${{ secrets.REMOTE_USER }}
                remote_key: ${{ secrets.REMOTE_KEY }}
                remote_key_pass: ${{ secrets.REMOTE_KEY_PASS }}
                remote_path: ${{ secrets.REMOTE_PATH }}
    4. Нажмите «Start commit» и затем «Commit new file».
  5. Переключитесь на вкладку «Actions» и проверьте статус деплоя. Для просмотра подробностей нажмите на название рабочего процесса в списке «All workflows» и затем на «build» — в случае успеха возле каждой операции должна стоять галочка.

Внимание!

При деплое каталог на хостинге не очищается. Файлы, которых нет в репозитории, из каталога не удаляются.

Server sent FIN packet unexpectedly

Если при деплое проекта с большим количеством файлов возникает ошибка «Server sent FIN packet unexpectedly», рекомендуется перейти на использование SSH. Для FTP может помочь понижение версии экшена до 3.1.2-patch. Для этого потребуется изменить экшен: строку uses: SamKirkland/FTP-Deploy-Action@v4.3.5 заменить на uses: SamKirkland/FTP-Deploy-Action@v3.1.2-patch, параметры server, username и password переименовать в ftp-server, ftp-username и ftp-password. Также параметр server-dir в этом случае работать не будет и каталог деплоя нужно будет задавать только изменением каталога доступа FTP-пользователя.

Настройка автоматического деплоя на примере экшена FTP Deploy.

  1. Создайте на хостинге FTP-пользователя с доступом к каталогу, куда должен выполняться деплой.
  2. Отключите ограничения доступа по FTP.
  3. Откройте свой репозиторий на GitHub.
  4. Добавьте необходимые для деплоя данные в секреты:

    Как добавлять секреты:

    1. Переключитесь на вкладку «Settings».
    2. Выберите «Secrets and variables → Actions» в боковом меню.
    3. Нажмите «New repository secret».
    4. Укажите название секрета в поле «Name» и значение в поле «Value».
    5. Нажмите «Add secret».

    Каждый параметр добавляется как отдельный секрет.

    Name Value
    REMOTE_HOST Хост FTP
    FTP_USER Логин FTP
    FTP_PASSWORD Пароль FTP
    FTP_PATH Относительный путь от каталога доступа FTP к каталогу на хостинге, куда должен выполняться деплой. ⚠️ Путь обязательно должен заканчиваться слешем /. Также, если в вашем проекте есть каталоги lib или etc, каталог доступа FTP-пользователя должен быть таким, чтобы они оказались не в корне.
  5. Настройте экшен:
    1. Переключитесь на вкладку «Actions».
    2. Нажмите «set up a workflow yourself» или сначала «New workflow», а затем «set up a workflow yourself».
    3. Замените код в поле «Edit new file» на такой:
      name: FTP deploy on push
      on:
        push:
          branches:
          - main
      jobs:
        web-deploy:
          name: Deploy
          runs-on: ubuntu-latest
          steps:
          - name: Get latest code
            uses: actions/checkout@v4
          - name: Sync files
            uses: SamKirkland/FTP-Deploy-Action@v4.3.5
            with:
              server: ${{ secrets.REMOTE_HOST }}
              username: ${{ secrets.FTP_USER }}
              password: ${{ secrets.FTP_PASSWORD }}
              server-dir: ${{ secrets.FTP_PATH }}
    4. Нажмите «Start commit» и затем «Commit new file».
  6. Переключитесь на вкладку «Actions» и проверьте статус деплоя. Для просмотра подробностей нажмите на название рабочего процесса в списке «All workflows» и затем на «build» — в случае успеха возле каждой операции должна стоять галочка.
Содержание

    (3)

    Комментарии

    wladislaw353
    Можна налаштувати деплой лише при пуші в головну гілку, змінивши конфіг наступним чином

    on:
    push:
    branches:
    - main
    sanyva
    Будь ласка, додайте інструкцію для Gitlab
    webmega
    Підтримую. Цікавить інструкція для GitLab. Дякую.
    artgana
    як налаштувати деплой через sftp в GitHub Actions?
    karlov
    Спосіб «SSH» в цій статті це по суті і є такий деплой.