1 minute read

Задача

Предположим, что репозиторий имеет три папки:

app
extensions
checker

Папка app - это фронтенд и GH-action обновляет её при обновлении ветки deploy

Папка extensions может обновляться когда угодно, т.к. без отдельной команды деплоя она не будет учтена.

Таким образом action может обновлять две папки - app и extensions, а папка checker должна быть проигнорирована, т.к. бекенд чекер может иметь незавершённые процессы и его обновление - это отдельный процесс: сначала нужно заблокировать возможность создавать задачи на фронте, т.е. перевести в maintenance mode, долждаться завершения всех задач, потом обновить checker и снова активировать функции добавления на фронте.

Ранее action копировал полностью весь репозиторий в папку public (nginx/nextjs). Теперь же нам нужно модифицировать его, чтобы он копировал только две вышеуказанные папки.

Решение

Нужно использовать две отдельные команды rsync для копирования только нужных папок.

Вот как это можно реализовать:

      - name: Stop the pm2 and move the files, ~ dir
        working-directory: /home/appuser
        run: |
          sudo pm2 stop app-name-app
          sudo pm2 delete app-name-app
          sudo rsync -av --checksum --inplace --progress actions-runner-easy-embed/_work/repo-name/repo-name/app/ /usr/share/nginx/domains/domain.com/public/app/
          sudo rsync -av --checksum --inplace --progress actions-runner-easy-embed/_work/repo-name/repo-name/extension/ /usr/share/nginx/domains/domain.com/public/extension/

Альтернативный вариант с исключением:

Если вы хотите использовать одну команду с исключением папки checker:

      - name: Stop the pm2 and move the files, ~ dir
        working-directory: /home/appuser
        run: |
          sudo pm2 stop app-name-app
          sudo pm2 delete app-name-app
          sudo rsync -av --checksum --inplace --progress --exclude='checker/' actions-runner-easy-embed/_work/repo-name/repo-name/ /usr/share/nginx/domains/domain.com/public/

Рекомендация:

Лучше использовать первый вариант с двумя командами, так как он:

  • Более явно показывает что именно копируется
  • Легче контролировать и отлаживать
  • Избежите случайного копирования других файлов из корня