Как настроить передачу команд на удаленный сервер с использованием yml?

Как настроить автодеплой на удаленном сервере через команды Git? У меня есть .yml файл, который создает файл welcome.txt на сервере при пуше ветки. Мне необходима помощь с пониманием некоторых аспектов этого файла. Например, зачем нужен image: alpine:latest и можно ли обойтись без него? Какую роль играет раздел artifacts: paths: - public и как правильно понять, что каждая команда нужно отправлять через ssh $SSH_USER@$VM_IPADDRESS "command"?
  • 9 января 2024 г. 10:28
Ответы на вопрос 2
Чтобы настроить передачу команд на удаленный сервер с использованием YAML-файла, обычно используются такие инструменты, как Ansible или системы непрерывной интеграции и доставки (CI/CD), например GitLab CI/CD, GitHub Actions и другие.

Прежде всего, давайте разберем YAML-файл, который, как я предполагаю, используется в контексте GitLab CI/CD:

1. `image: alpine:latest`: Этот фрагмент указывает, что для выполнения вашего CI/CD пайплайна будет использоваться образ Docker с Alpine Linux последней версии. Alpine Linux - это легковесный дистрибутив, который часто используется для минималистичных инсталляций. Указание образа необходимо для создания рабочего окружения, в котором будут выполняться команды пайплайна.

2. `artifacts: paths: - public`: Этот фрагмент определяет артефакты, которые будут сохранены после выполнения задачи. Артефакты - это файлы или директории, которые создаются во время выполнения задачи и могут быть использованы в последующих стадиях пайплайна или сохранены после его выполнения. В примере `public` - это папка, которая будет сохранена как артефакт.

Теперь по поводу передачи команд на удаленный сервер:

В пайплайнах CI/CD часто используется SSH для выполнения команд на удаленном сервере. Здесь переменные `SSH_USER` и `VM_IPADDRESS` должны быть предварительно заданы в настройках CI/CD как переменные окружения, содержащие имя пользователя и IP-адрес удаленного сервера соответственно.

Команда `ssh $SSH_USER@$VM_IPADDRESS "command"` используется для подключения к удаленному серверу по SSH и выполнения там команды, которая находится внутри кавычек. Примером такой команды может быть `ssh [email protected] "touch welcome.txt"`, которая создаст файл `welcome.txt` на удаленном сервере под пользователем `user` и с IP-адресом или доменным именем `example.com`.

Автодеплой с использованием Git:

Для автодеплоя на удаленном сервере, скорее всего, необходимо будет настроить webhook с вашим репозиторием Git, чтобы при выполнении push в репозиторий запускался процесс деплоя. В вашем CI/CD файле должны быть задачи, которые могут выполнять деплой, в том числе, например, клонирование репозитория на сервер, установку зависимостей, миграции баз данных, перезагрузку сервера и так далее.

Помните, что для безопасности, вам следует предварительно настроить безпарольную аутентификацию по SSH с использованием публичных и приватных ключей и добавить публичный ключ CI/CD сервера в список разрешенных ключей на удаленном сервере.
Правильно понимаю, что каждую команду придется отправлять с
- ssh $SSH_USER@$VM_IPADDRESS "command"


Неправильно. Отправить можно скрипт целиком. Например, мне надо было настроить в пайплайне сборку и запуск docker compose , фрагмент пайплайна:


Сам скрипт docker_compose.sh сначала отладил на сервере, потом добавил в пайплайн.
Похожие вопросы