Gitlab CI - Развертывание через SSH на удаленный сервер

12

У меня есть среда Gitlab, использующая Gitlab CI, для нового проекта для проверки скомпилированных файлов и копирования через rsync на рабочий сервер.

Машина, на которой сборка этих ресурсов - exec, является образом docker (узел 6), но теперь мне нужно скопировать полученные файлы из этой команды Docker контейнера на сервер, используя Linux ... Моя проблема - подключиться через ssh через Rsync.

В настоящее время у меня есть следующее:

stages:
  - deploy

before_script:
    - npm i
    - npm run build

job_deploy:
  stage: deploy
  script:
    - ssh-keygen -t rsa -b 4096 -C '' -f ~/.ssh/deploy_rsa
    - ssh-keyscan -H 8.8.8.8 >> ~/.ssh/known_hosts
    - ssh-copy-id -i ~/.ssh/deploy_rsa.pub $SERVER_USER@8.8.8.8
    - rsync -avuz $CI_PROJECT_DIR/dist/ $SERVER_USER@8.8.8.8:/var/wwww/example.com
  only:
    - master

По этому я получаю:

    /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
    /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
    Permission denied, please try again.
    Permission denied, please try again.
    Permission denied (publickey,password).
Родриго Морено
источник
3
Есть кое-что, что я не понимаю здесь: вы генерируете новый ключ ssh на лету, каждый билд не так? Где смысл использовать ssh-ключи, когда вам нужен pwd для развертывания ключа pub?
lrkwz
Как и @lrkwz, я также упускаю смысл посылать новый ключ при каждой сборке, когда вас все равно попросят ввести пароль. Кроме того, я хотел бы видеть файл
Fábio Duque Silva

Ответы:

3

ssh-copy-id запрашивает пароль. Вы можете использовать sshpass -eи установить переменную окружения SSHPASS в Gitlab.

user1973167
источник
Вы тоже можете добавить пример?
Яшу Миттал
1

Вы не передаете ключ ssh в rsync. Вы должны сделать что-то вроде этого, чтобы выполнить команду ssh, чтобы правильно определить ключ ssh:

rsync -avuz -e 'ssh -i ~/.ssh/deploy_rsa' $CI_PROJECT_DIR/dist/ $SERVER_USER@8.8.8.8:/var/wwww/example.com
Яшар Шентюрк
источник