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 [email protected]
    - rsync -avuz $CI_PROJECT_DIR/dist/ [email protected]:/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).
Rodrigo Moreno
la source
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.

user1973167
la source
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/ [email protected]:/var/wwww/example.com
Yaşar Şentürk
la source