web-dev-qa-db-fra.com

Gitlab CI comment déployer une application via SSH

J'utilise Hosted Gitlab pour héberger mes référentiels Git et, plus récemment, je l'utilise pour créer/déployer PHP et des applications Java sur des serveurs.

Ce que j'aimerais faire, une fois la construction terminée, déployer l'application à l'aide de SSH. Parfois, il peut s’agir simplement de télécharger le contenu de la version finale (fichiers PHP) sur un serveur via SSH, ou d’autres fois, il peut télécharger un fichier .jar compilé, puis exécuter une commande sur le serveur distant pour redémarrer un service.

J'ai configuré mon propre conteneur Docker en tant qu'environnement de construction. Cela inclut, par exemple, Java, PHP, Composer et Maven, tout ce dont j'ai besoin pour que les générations soient terminées. J'utilise cette image pour exécuter des versions.

Ce que j'aimerais savoir, c'est comment SSH puis-je utiliser un serveur externe pour effectuer des commandes de déploiement que je peux spécifier dans mon fichier gitlab-ci.yaml?

10
SheppardDigital

Vous pouvez stocker votre clé SSH en tant que variable secrète dans gitlab-ci.yaml et l'utiliser lors de votre construction pour exécuter des commandes SSH. Pour plus d'informations, consultez notre documentation ici

Une fois que vous avez accès à SSH, vous pouvez utiliser des commandes telles que rsync et scp pour copier des fichiers sur votre serveur. J'ai trouvé un exemple de cela dans un autre post ici que vous pouvez utiliser comme référence.

S'il vous plaît laissez-moi savoir comment vous allez.

Merci,

Adam 

Service Engineer @ Gitlab

25
Adam Mulvany

À titre d'exemple, supposons qu'un serveur avec des exigences déjà installées et que vous souhaitez déployer sur ce serveur à l'aide de 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

Premièrement, dans cet exemple, nous utilisons l’image Ubuntu. Notez également que nous utilisons certaines variables secrètes gitlab. $ QA_URL, $ PRIVATE_KEY, $ DB_CONNECTION, $ QA_SERVER. Les plus importants sont $ PRIVATE_KEY et QA_SERVER. La clé privée est celle dont vous avez besoin pour vous authentifier auprès de QA_SERVER (si vous utilisez une clé privée). Et évidemment, QA_SERVER est l'adresse à laquelle vous souhaitez déployer votre code.

Pour créer un nouvel accès variable gitlab-> Paramètres-> CI/CD.



Dans before_script, nous créons et ajoutons la clé ssh. Nous désactivons également la ligne de commande pour demander un mot de passe. 'StrictHostKeyChecking no'

ssh-add <(echo "$PRIVATE_KEY")

Ajoutez la clé ssh à l'agent.

ssh -o StrictHostKeyChecking=no user@"$QA_SERVER" 'rm -rf /var/www/html/*'

Non requis: cette ligne utilise ssh pour supprimer tout fichier situé dans /var/www/html scp -P22 -r. ubuntu @ "$ QA_SERVER":/var/www/html Enfin, les fichiers sont copiés du répertoire en cours vers/var/www/html.

Soyez prudent avec les autorisations, cela dépend du répertoire que vous souhaitez copier.

4
Johan Durán

Traiter avec ssh sur gitlab.com n’est pas simple.

C'est pourquoi j'ai écrit un assistant SSH pour .gitlab-ci.yml.
Vous pouvez le vérifier ici https://gitlab.com/x4v13r/gitlab-ci

Juste include: le à votre .gitlab-ci.yml et ensuite vous pouvez aller avec: 

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

0
Xavier D