Вопрос или проблема
Привет, ребята. Я пытаюсь автоматизировать развертывание на сервере с помощью команды 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. Обязательно проверяйте пути, и используйте абсолютные ссылки, чтобы гарантировать корректность синхронизации файлов. Если у вас остались вопросы или требуется дополнительная помощь, не стесняйтесь обращаться.