Déployer automatiquement un site à l'aide des pipelines Bitbucket

Déployer automatiquement un site à l'aide des pipelines Bitbucket

Imaginez le truc : vous faites vos commit sur votre branche dev, à un moment vous pushez les modifications sur bitbucket et votre serveur de développement se met automatique à jour. Puis un jour vous voudrez merger votre branche dev sur la master, un push et paf ! Une mise en prod ! Utile non ?

(Utile pour les petites infrastructures, on ne va pas faire ça sur un site pro, avec une garantie de service … c’est pas sérieux …)

Pipeline de 50 minutes

Un super outil : le pipeline. On le configure à l'aide d'un simple .yml sur la racine de votre git, vous allez pouvoir demander à bitbucket d'exécuter des tâches aprés vos pushs, ici on détourne juste l'outil pour s'en servir de « deployeur ».

Il vous faudra donc un fichier bitbucket-pipelines.yml à la racine de votre git. Nous le configurerons plus tard.

Toutefois attention, un pipeline met du temps à s’exécuter et vous n’avez que 50 minutes gratuites par mois.

les clés SSH

Globalement ici tout va se faire par clés ssh. Il va vous en falloir 2 : La clé publique de votre serveur qui vous permettra d’aller chercher votre git sans besoin de mot de passe et la clé publique qui sera généré par bitbucket pour se connecter à votre serveur et faire des trucs.

la clé de votre serveur

Générez une clé ssh via votre terminal et copiez la clef publique ‘id_rsa.pub’. Lancez votre navigateur et allez sur votre compte bitbucket, rentrez dans les « Bitbucket settings » et trouvez l’onglet « Clés SSH » section sécurité. Ajoutez-y votre clés publique ssh avec un petit nom.

Comment savoir si ça marche

Via le serveur que vous venez d’ajouter, essayez de cloner un git en sélectionnant l’adresse ssh et non l’adresse https. Si aucun mot de passe ne vous est demandé et si vous pouvez pull et push sans identification, c’est que ça marche.

la clé de bitbucket

Allez maintenant chercher le repo qui vous intéresse dans ces paramètres vous aurez un onglet pipeline, tout y est très bien expliqué. Il faudra activer le pipeline pour accéder à l’onglet ‘SSH keys’.

Ici copiez la clé publique et collez là dans le fichier ‘~/.ssh/authorized_keys’ de votre serveur.

Avant de partir entrez dans le champ ‘Host address’ l’adresse d’accès ssh de votre serveur. Soit ‘monadresse.com’ si votre port ssh est 22 et est ouvert. Si vous n’utilisez pas le port 22 mais un autre, entrez celui ci comme ceci : monadresse.com:8888 (pour le port 8888)

Enfin cliquez sur ‘Fetch’ puis ‘Add Host’ quand votre Fingerprint apparait.

Configuration du Pipeline

Bitbucket utilise des conteneurs docker pour exécuter les instructions que vous lui demandez. Viens la partie honnête : Ce bout de configuration je ne l’ai pas écrite, c’est un ami qui me l’a passé et j’ai modifié.

Voici donc une configuration qui marche

carbon

Ici vous voyez quoi ?

  • On charge un container php 7.1.1
  • Dans le cadre de notre pipeline
  • On va surveiller les branches
    • Pour la branche ‘dev’ :
      • On y execute une commande
    • Pour la branche ‘master’ :
      • On y execute une commande

Commande à executer

Ce qui est parfait dans ce sytème c’est que le pipeline est exécuté juste après l'enregistrement de votre push sur les serveurs de bitbucket, donc à ce moment si je me connecte en ssh, je peux faire un cd vers le repertoire de mon git et executer un simple git pull.

C'est ce que je fais ma commande est 'git repertoire && git pull'

En conclusion

C’est une solution pratique et vraiment pas chère (puisque c’est gratuit) pour faire du déploiement automatique. Si jamais vous utilisez cette méthode avec un container plus adapté que php 7.1.1 faites-le-moi savoir. ;-)

Code

image: php:7.1.1
pipelines:
 branches:
     dev:
 	- step:
            script:
      		- 'which ssh-agent || ( apt-get update -yqq && apt-get install openssh-client -yqq )'
      		- eval $(ssh-agent -s)
      		- ssh **monuserdev**@**monsitedev.com** -p 7722 ‘**commande à executer**’
	master:
            - step:
      		script:
                    - 'which ssh-agent || ( apt-get update -yqq && apt-get install openssh-client -yqq )'
                    - eval $(ssh-agent -s)
                    - ssh **monuserprod**@**monsiteprod.com** '**commande à executer**'

Attention comme pour un Makefile les tabulations sont importantes et j’ai peut-être fait n’importe quoi !! N’hésitez pas à utiliser l’éditeur en ligne de bitbucket.

Afficher les commentaires