Gitlab CI как развернуть приложение через SSH

Я использую Hosted Gitlab для размещения своих репозиториев Git, а совсем недавно я использовал его для создания/развертывания приложений PHP и Java на серверах.

Что бы я хотел сделать, так это когда сборка завершена, разверните приложение, используя SSH. Иногда это может быть просто загрузка содержимого окончательной сборки (файлов PHP) на сервер через SSH, или в других случаях это может быть загрузка скомпилированного файла .jar, а затем выполнение команды на удаленном сервере для перезапуска службы.

Я установил свой собственный контейнер Docker в качестве среды сборки, включая такие вещи, как Java, PHP, Composer и Maven, которые мне нужны для сборки. Я использую это изображение для запуска сборки.

Я хотел бы знать, как я могу использовать SSH на внешнем сервере в другом для выполнения команд развертывания, которые я могу указать в файле gitlab-ci.yaml?

Ответ 1

Вы можете сохранить свой ключ SSH в качестве секретной переменной в gitlab-ci.yaml и использовать его во время сборки для выполнения команд SSH, подробнее см. нашу документацию здесь.

Получив доступ по SSH, вы можете использовать такие команды, как rsync и scp, чтобы скопировать файлы на ваш сервер. Я нашел пример этого в другом посте здесь, который вы можете использовать в качестве ссылки.

Ответ 2

В качестве примера, давайте предположим, что у вас есть сервер с уже установленными требованиями, и вы хотите выполнить развертывание на этом сервере с помощью 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 [email protected]"$QA_SERVER" 'rm -rf /var/www/html/*'
    - scp -P22 -r . [email protected]"$QA_SERVER":/var/www/html

Во-первых, в этом примере мы используем изображение Ubuntu. Также обратите внимание, что мы используем некоторые секретные переменные gitlab. $ QA_URL, $ PRIVATE_KEY, $ DB_CONNECTION, $ QA_SERVER. Важными из них являются $ PRIVATE_KEY и QA_SERVER. Закрытый ключ - это тот, который вам нужен для аутентификации с помощью QA_SERVER (если вы используете закрытый ключ). И, очевидно, QA_SERVER - это адрес, по которому вы хотите развернуть свой код.

Для создания новой переменной перейдите в gitlab-> settings-> CI/CD.



 В рамках before_script мы создаем и добавляем ключ ssh, а также отключаем командную строку для запроса пароля. 'StrictHostKeyChecking no'

ssh-add <(echo "$PRIVATE_KEY")

Добавьте ключ ssh к агенту.

ssh -o StrictHostKeyChecking=no [email protected]"$QA_SERVER" 'rm -rf /var/www/html/*'

Не требуется: эта строка использует ssh для удаления любого файла в /var/www/html   scp -P22 -r. убунту @"$ QA_SERVER":/вар/WWW/HTML Наконец, файлы копируются из текущего каталога в /var/www/html

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

Ответ 3

Работа с ssh на gitlab.com не так проста.

Вот почему я написал SSH помощник для .gitlab-ci.yml.
Вы можете проверить это здесь https://gitlab.com/x4v13r/gitlab-ci

Просто включите: это в ваш .gitlab-ci.yml, и тогда вы можете пойти с:

ssh_run root myhostname $MYHOST_PKEY "touch foo; cp foo bar; ls -al; rm foo bar; ls -al"