Вложенный рекурсивный путь файла в Github Actions после команды Rsync

Вопрос или проблема

Привет, ребята. Я пытаюсь автоматизировать развертывание на сервере с помощью команды rsync в GitHub Actions, и у меня возникает проблема, из-за которой путь рекурсивно вложен в себя.

Вот команда rsync, которую я использую на сервере, опуская конфиденциальную информацию:

            # Используйте rsync для синхронизации файлов между репозиторием и каталогом сайта WordPress
            rsync -avz --delete --no-links \
            --exclude 'tmp/' \
            --exclude '.git/' \
            --exclude '.github/' \
            --exclude 'README.md' \
            --exclude '.well-known/' \
            --exclude 'bin/' \
            --exclude 'wp-admin/' \
            --exclude 'wp-includes/' \
            --exclude 'wp-content/plugins/' \
            --exclude 'wp-content/ai1wm-backups/' \
            --exclude 'wp-content/themes/tseg-blank/' \
            --exclude 'wp-content/themes/twentytwentyone/' \
            --exclude 'wp-content/themes/twentytwentytwo/' \
            --exclude 'wp-content/themes/twentytwentythree/' \
            --exclude 'wp-content/themes/twentytwentyfour/' \
            --exclude 'wp-content/themes/web\.site/' \
            --exclude '*.php' \
            --exclude '!wp-config.php' \
            ./ \
            /home/username/www/web\.site/public_html/test-folder

Так что после этого, каждый раз, когда я захожу на сервер, я вижу

www/web.site/public_html/test-folder/www/web.site/public_html/test-folder/www/web.site/public_html/test-folder/www/web.site/public_html/test-folder…

Я использую appleboy/[email protected] для SSH-подключения, поэтому я запускаю команду rsync после того, как SSH-соединение установлено.

Кроме того, если я хочу изменить путь в GitHub, вместо использования “./” что мне использовать? Если я изменю его на “/wp-content/” или “./wp-content/”, он не находит правильные файлы.

Вещи, которые я пробовал:

  • использование чистой команды rsync с SSH-соединением, но у меня есть парольная фраза на ключе, поэтому это не работало
    -использование других библиотек для команды rsync, но ни одна из них не принимала ключ с паролем

Редактирование: забыл сказать, что ssh-action использует appleboy/drone-ssh

Спасибо, ребята.

Ответ или решение

Проблема с рекурсивным вложением пути при использовании команды rsync в GitHub Actions может возникнуть по нескольким причинам. Давайте рассмотрим, как ее можно устранить, и предложим соответствующие рекомендации по изменению пути и синхронизации файлов.

1. Причина проблемы

Основная причина рекурсивного вложения заключается в том, что для команды rsync указаны неправильные пути, что приводит к многократному копированию данных в одну и ту же иерархию. В вашем случае, использование ./ указывает на текущую директорию, и, скорее всего, в процессе выполнения команды rsync она копирует содержимое в директорию назначения, которая сама по себе указывает на текущую директорию, что и приводит к рекурсии.

2. Решение проблемы

Чтобы устранить проблему с рекурсивным вложением, важно правильно указать путь к исходным файлам, которые необходимо синхронизировать. Вот несколько рекомендаций:

  • Используйте абсолютные пути: Вместо использования ./, попробуйте указать полный путь к директории, например, /home/username/your-repo/wp-content/. Это предотвратит путаницу с относительными путями.

  • Проверьте структуру директорий: Убедитесь, что ваш целевой путь (/home/username/www/web.site/public_html/test-folder) правильно указывает на нужную папку и что никакие другие пути не перекрывают действия rsync.

3. Изменение пути в GitHub Actions

Если вы хотите изменить исходный путь в GitHub Actions, вам следует обратить внимание на структуру директорий вашего проекта. Если вы хотите скопировать файлы, находящиеся в поддиректории wp-content, вы можете использовать следующий подход:

rsync -avz --delete --no-links \
--exclude 'tmp/' \
--exclude '.git/' \
--exclude '.github/' \
--exclude 'README.md' \
--exclude '.well-known/' \
--exclude 'bin/' \
--exclude 'wp-admin/' \
--exclude 'wp-includes/' \
--exclude 'wp-content/plugins/' \
--exclude 'wp-content/ai1wm-backups/' \
--exclude 'wp-content/themes/tseg-blank/' \
--exclude 'wp-content/themes/twentytwentyone/' \
--exclude 'wp-content/themes/twentytwentytwo/' \
--exclude 'wp-content/themes/twentytwentythree/' \
--exclude 'wp-content/themes/twentytwentyfour/' \
--exclude 'wp-content/themes/web\.site/' \
--exclude '*.php' \
--exclude '!wp-config.php' \
/home/username/your-repo/wp-content/ \
/home/username/www/web.site/public_html/test-folder

4. Использование SSH и управление ключами

Для успешного использования команды rsync через SSH с ключами с паролем рекомендуется:

  • Используйте агенты SSH: Установите свой SSH-агент (например, ssh-agent) и добавьте свой ключ с помощью ssh-add. Это позволит вам не вводить пароль каждый раз, когда вы запускаете команду rsync.

  • Настройте GitHub Actions: Убедитесь, что ваш секрет SSH правильно настроен в GitHub Actions.

5. Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...