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

будьте осторожны с разрешения, это зависит от каталога, который вы хотите скопировать.