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@v4
            - name: rsync deploy
              uses: burnett01/rsync-deployments@7.0.2
              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» в цій статті це по суті і є такий деплой.