# Инструкция: Удалённое выполнение команд по SSH из GitLab CI и Jenkins ## Подготовка Перед запуском обоих пайплайнов необходимо: 1. Убедиться, что на **билдере** (удалённой машине) доступен `ssh` по ключу. 2. Сгенерировать ключ на runner/агенте (если его ещё нет): ```bash ssh-keygen -t rsa -b 4096 -C "ci-key" ``` 3. Копировать **публичный ключ** на билд-машину: ```bash ssh-copy-id @ ``` 4. Убедиться, что `.ssh/id_rsa` и `.ssh/id_rsa.pub` доступны у пользователя runner/агента (например, `gitlab-runner` или `jenkins`). 5. Проверить подключение: ```bash ssh -i ~/.ssh/id_rsa @ ``` --- ## GitLab CI: `.gitlab-ci.yml` ```yaml stages: - remote-exec ssh_execute: stage: remote-exec tags: - script: - | SSH_HOST="@" SSH_KEY="$HOME/.ssh/id_rsa" COMMANDS=$(cat <`, ``, ``. --- ## Jenkins Groovy Pipeline ```groovy pipeline { agent { label '' } environment { SSH_HOST = "@" SSH_KEY = "$HOME/.ssh/id_rsa" } stages { stage('SSH Execute') { steps { script { sh ''' ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no "$SSH_HOST" << 'EOF' echo "Адрес билдера $SSH_HOST" echo "Запуск сборки проектов." /opt/global/gsf-cli/manage.sh --all build EOF ''' } } } } } ``` **Важно:** - Агент Jenkins должен быть с `shell` или `ssh` executor. - Ключи должны быть в `$HOME/.ssh/` у пользователя, от имени которого работает Jenkins agent. - Можно использовать Jenkins Credentials Plugin (SSH Key credentials) вместо `-i "$SSH_KEY"` — если нужно, напиши, сделаю вариант с credentialsId. --- ## Проверка 1. Закоммитьте `.gitlab-ci.yml` в репозиторий GitLab — пайплайн сработает автоматически. 2. Для Jenkins — создайте новый Pipeline Job и вставьте groovy-код в разделе **Pipeline Script**. Запустите вручную.