GitLab CI как развернуть приложение через SSH
Я использую Hosted Gitlab для размещения моих репозиториев Git, и в последнее время я использую его для создания/развертывания приложений PHP и Java на серверах.
Что я хотел бы сделать, это после завершения сборки развернуть приложение с помощью SSH. Иногда это может быть просто загрузка содержимого окончательной сборки (PHP-файлов) на сервер через SSH, или в других случаях это может быть загрузка скомпилированного .файл jar, а затем выполнение команды на удаленном сервере для перезапуска услуга.
Я установил свой собственный контейнер Docker в качестве среды сборки, это включает в себя такие вещи, как Java, PHP, Composer и Maven все, что мне нужно для завершения сборки. Я использую этот образ для запуска сборок.
Что я хотел бы знать, как я могу SSH на внешний сервер в другом для выполнения команд развертывания, которые я могу указать в моем gitlab-ci.файл yaml?
2 ответов
вы можете сохранить свой SSH-ключ как секретную переменную в gitlab-ci.yaml
и используйте его во время сборки для выполнения команд SSH, для получения более подробной информации см. нашу документацию здесь.
как только у вас есть доступ к SSH, вы можете использовать такие команды, как rsync
и scp
для копирования файлов на сервер. Я нашел пример этого в другом посте здесь, который вы можете использовать в качестве ссылки.
пожалуйста, дайте мне знать, как вы идти.
спасибо,
Адам
Инженер По Обслуживанию @ Gitlab
в качестве примера предположим, что у вас уже установлен сервер с требованиями, и вы хотите развернуть его на этом сервере с помощью ssh.
image: ubuntu:latest
stages:
- deploy
deploy_QA:
stage: deploy
environment:
name: Staging
url: "$QA_URL"
before_script:
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
- mkdir -p ~/.ssh
- eval $(ssh-agent -s)
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
script:
- ssh-add <(echo "$PRIVATE_KEY")
- ssh -o StrictHostKeyChecking=no user@"$QA_SERVER" 'rm -rf /var/www/html/*'
- scp -P22 -r . ubuntu@"$QA_SERVER":/var/www/html
во-первых, в этом примере мы используем ubuntu image. Также обратите внимание, что мы используем некоторые секретные переменные гитлаб. $QA_URL, $PRIVATE_KEY, $DB_CONNECTION, $QA_SERVER. Важными из них являются $PRIVATE_KEY и QA_SERVER. Закрытый ключ-это тот, который вам нужно аутентифицировать с помощью QA_SERVER (если вы используете закрытый ключ). И очевидно, что QA_SERVER-это адрес, который вы хотите развернуть свой код.
для создания новой переменной доступа gitlab - > настройки - >CI / CD.
В before_script мы создаем и добавляем ssh-ключ, а также отключаем командную строку для запроса пароля. 'StrictHostKeyChecking no'
ssh-add <(echo "$PRIVATE_KEY")
добавить ключ ssh к агенту.
ssh -o StrictHostKeyChecking=no user@"$QA_SERVER" 'rm -rf /var/www/html/*'
не требуется: эта строка использует ssh для удаления любого файла внутри /var / www / html УПП-П22-р. ubuntu@ "$QA_SERVER":/var / www / html Наконец, файлы копируются из текущего каталога в /var/www / html
будьте осторожны с разрешения, это зависит от каталога, который вы хотите скопировать.