Conseils pour créer des scripts de tâches grâce à Bitbucket Pipelines

Découvrez nos cinq conseils pour automatiser les tâches manuelles grâce à Bitbucket Pipelines. 

Sten Pittet Sten Pittet

Grâce à Bitbucket Pipelines, vous pouvez rapidement adopter un workflow d'intégration ou de livraison continue pour vos dépôts. Une partie essentielle de ce processus consiste à transformer les processus manuels en scripts qui peuvent être exécutés automatiquement par une machine sans nécessiter d'intervention humaine. Néanmoins, l'automatisation des tâches peut parfois s'avérer délicate, car vous pouvez rencontrer des problèmes d'authentification, d'installation de dépendances ou de remontée. Ce guide vous fournira quelques conseils pour écrire vos scripts !

Exigences

Durée :

30 minutes

Public :

Vous êtes novice en matière de déploiement continu et/ou vous débutez dans Bitbucket Pipelines.

Prérequis :

Essayez-le gratuitement

Conseil n° 1 : N'enregistrez pas les informations sensibles !

Avant de plonger plus en détail dans le monde de l'automatisation, vous devez examiner vos journaux et vous assurer que vous ne produisez pas de données sensibles telles que des clés d'API, des informations d'identification ou toute autre information susceptible de compromettre votre système. Dès que vous commencerez à utiliser Bitbucket Pipelines pour exécuter vos scripts, les journaux seront stockés et lisibles par toute personne ayant accès à votre dépôt.

Conseil n° 2 : Utilisez les clés SSH pour vous connecter à des serveurs distants

L'authentification est souvent l'une des parties qui posent le plus de problèmes dans l'automatisation. Les clés SSH ont le double avantage de faciliter la gestion des connexions aux serveurs distants et d'être très sécurisées. Grâce à Bitbucket Pipelines, vous pouvez facilement générer une paire de clés qui peut être utilisée à chaque exécution de pipeline pour se connecter à des serveurs distants.

Générer des clés SSH directement à partir de Bitbucket Pipelines

Vous devrez simplement copier la clé publique dans votre serveur distant pour pouvoir vous y connecter à partir de votre pipeline en cours d'exécution. Par exemple, une fois que les clés SSH sont configurées pour l'utilisateur sur le serveur (vous pouvez utiliser une URL ou une adresse IP), le script ci-dessous listera les fichiers sous le répertoire /var/www sans avoir besoin de fournir un mot de passe.

bitbucket-pipelines.yml

image: node:4.6.0
   pipelines:
      default:
        - step:
           script:
              - ssh <user>@<server> ls -l /var/www

N'oubliez pas d'enregistrer tous les serveurs auxquels vous devez vous connecter dans la section Known hosts (Hôtes connus). Si vous ne le faites pas, votre pipeline sera bloqué, en attente d'approbation, lorsque vous essaierez de vous connecter au serveur distant.

Conseil n° 3 : Utilisez des variables d'environnement sécurisées pour les clés d'API et les informations d'identification

Si vous devez utiliser une API distante dans le cadre de vos scripts, il est fort probable que votre fournisseur d'API vous permette d'utiliser ses ressources protégées avec une clé d'API. Vous pouvez alors ajouter en toute sécurité des informations d'identification dans Bitbucket Pipelines à l'aide de variables d'environnement sécurisées. Une fois sauvegardées, vous pouvez les appeler dans vos scripts, et elles resteront masquées dans la sortie de journal.

Bitbucket Pipelines permet de masquer les variables sécurisées dans les journaux

Conseil n° 4 : Exécutez des commandes en mode non interactif

Si vous devez installer des dépendances dans le cadre de votre script, assurez-vous qu'il n'invite pas l'utilisateur à valider ou à saisir des données. Consultez la documentation sur les commandes que vous utilisez pour voir s'il existe un flag qui vous permet de les exécuter de manière non interactive.

Par exemple, le flag -y dans la commande ci-dessous installera PostgreSQL sur un serveur Debian.

apt-get install -y postgresql

Le flag -q vous permet d'exécuter les commandes du SDK Google Cloud de manière non interactive.

gcloud -q app deploy app.yaml

Conseil n° 5 : Créez vos propres images Docker qui sont prêtes à l'emploi

L'installation des dépendances nécessaires à l'exécution de votre pipeline peut être extrêmement longue. Vous pourriez gagner beaucoup de temps d'exécution en créant votre propre image Docker grâce aux outils et packages de base nécessaires pour builder et tester votre application.

Par exemple, dans la configuration Pipelines suivante, nous installons la ligne de commande AWS au début afin de l'utiliser plus tard pour déployer l'application vers AWS Elastic Beanstalk.

bitbucket-pipelines.yml

image: node:7.5.0
   pipelines:
      default:
       - step:
          script: # Modify the commands below to build your repository.
           - apt-get update && apt-get install -y python-dev
           - curl -O https://bootstrap.pypa.io/get-pip.py
           - python get-pip.py
           - pip install awsebcli --upgrade
           - npm install
           - npm test
           - eb init helloworld-beanstalk-bbp -r eu-west-1 -p node
           - eb deploy hw-eb-tutorial

Le problème ici est que la ligne de commande AWS n'est pas modifiée à chaque commit, ce qui signifie que nous perdons du temps à installer une dépendance qui pourrait être intégrée par défaut.

Le document Dockerfile suivant peut être utilisé pour créer une image Docker personnalisée prête pour les déploiements d'Elastic Beanstalk.

Dockerfile

FROM node:7.5.0 
RUN apt-get update \   && apt-get install -y python-dev \   && cd /tmp \   && curl -O https://bootstrap.pypa.io/get-pip.py \   && python get-pip.py \   && pip install awsebcli --upgrade \   && apt-get clean \   && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

Si je le pushe sous la référence spittet/my-custom-image, je peux alors simplifier ma configuration Bitbucket Pipelines pour qu'elle ne contienne que les commandes nécessaires pour builder, tester et déployer mon application.

bitbucket-pipelines.yml

image: spittet/my-custom-image
   pipelines:
     default:
       - step:
            script: # Modify the commands below to build your repository.
              - npm install
              - npm test
              - eb init helloworld-beanstalk-bbp -r eu-west-1 -p node
              - eb deploy hw-eb-tutorial

Si je le pushe sous la référence spittet/my-custom-image, je peux alors simplifier ma configuration Bitbucket Pipelines pour qu'elle ne contienne que les commandes nécessaires pour builder, tester et déployer mon application.

Un dernier mot : les scripts sont aussi du code

En suivant ces conseils, vous devriez pouvoir transformer des tâches manuelles en processus automatisés, qui peuvent être exécutés de manière répétée et fiable par un service comme Bitbucket Pipelines. Au final, ces outils puissants seront les gardiens de vos livraisons et seront capables de déclencher le déploiement de vos environnements de production dans leur ensemble sur plusieurs serveurs et plateformes.

C'est pourquoi vous devez traiter vos scripts d'automatisation comme du code et les soumettre au même processus de revue et de qualité que pour votre code. Heureusement, Bitbucket vous permet de le faire facilement, car la configuration de votre pipeline sera archivée avec votre code, ce qui vous permettra de créer des pull requests dans le bon contexte.

Enfin, n'oubliez pas d'exécuter les scripts dans un environnement de test avant de les appliquer à la production. Ces minutes supplémentaires pourraient vous éviter d'effacer des données de production par inadvertance.