Gitlab CI - Déployer via SSH sur un serveur distant


12

J'ai un environnement Gitlab utilisant Gitlab CI, pour un nouveau projet pour témoigner sur les fichiers compilés et les copier via rsync sur un serveur de production.

La machine où la construction de ces ressources est exécutée est une image de docker (noeud 6), mais maintenant je dois copier les fichiers résultants de la commande Docker de ce conteneur sur le serveur en utilisant linux ... Mon problème est de me connecter via ssh via rsync.

Actuellement, j'ai les éléments suivants:

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

Par cela, je reçois:

    /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
C'est quelque chose que je ne sous-estime pas ici: vous générez une nouvelle clé ssh à la volée à chaque génération n'est-ce pas? Quel est l'intérêt d'utiliser des leys ssh pour you.need pwd pour déployer la clé pub?
lrkwz

Comme @lrkwz, je manque également le point d'envoyer une nouvelle clé sur chaque build, quand on vous demandera quand même un mot de passe. J'aimerais aussi voir le fichier authorized_keys sur le serveur distant ...
Fábio Duque Silva

Réponses:


3

ssh-copy-id demande un mot de passe. Vous pouvez utiliser sshpass -eet définir la variable d'environnement SSHPASS dans Gitlab.


Pouvez-vous également ajouter un exemple?
Yashu Mittal

1

Vous ne passez pas la clé ssh à rsync. Vous devriez faire quelque chose comme ça qui exécute la commande ssh pour identifier correctement la clé ssh:

rsync -avuz -e 'ssh -i ~/.ssh/deploy_rsa' $CI_PROJECT_DIR/dist/ $SERVER_USER@8.8.8.8:/var/wwww/example.com
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.