Créer un pipeline de construction avec Travis CI

Créer un pipeline de construction avec Travis CI

1. introduction

Dans le développement logiciel moderne, le termepipeline est beaucoup utilisé. Mais qu'est-ce que c'est?

De manière générale,a build pipeline is a set of automated steps that move code from development to production.

Les pipelines de construction sont parfaits pour la mise en œuvre de flux de travail d'intégration continue pour les logiciels. Ils nous permettent debuild smaller changes with greater frequency, dans le but de trouver plus tôt les bogues et de réduire leur impact.

Dans ce didacticiel, nous allons voir comment créer un pipeline de construction simple à l'aide deTravis CI.

2. Étapes dans un pipeline de construction

Un pipeline de construction peut comporter de nombreuses étapes différentes, mais au minimum, il doit inclure:

  • Compiling code: dans notre cas, cela signifie compiler le code source Java en fichiers de classe

  • Executing tests: comme exécuter des tests unitaires et éventuellement des tests d'intégration

  • Deploying artifacts: empaquetage du code conforme dans des artefacts, par exemple dans des fichiersjar, et leur déploiement

Si une application utilise des technologies différentes, alorsadditional steps can be included in the build pipeline. Par exemple, nous pourrions avoir une étape supplémentaire qui minimise les fichiers JavaScript ou publie la documentation mise à jour de l'API.

3. Qu'est-ce que Travis CI?

Pour notre exemple de pipeline de build, nous utiliseronsTravis CI, a cloud-based continuous integration tool.

Cela comporte un certain nombre de fonctionnalités qui en font un excellent choix pour commencer à utiliser des pipelines de construction:

  • S'intègre rapidement à n'importe quel référentiel GitHub public

  • Prend en charge tous les principaux langages de programmation

  • Se déploie sur plusieurs plateformes cloud différentes

  • Offre une variété d'outils de messagerie et d'alerte

À un niveau élevé, cela fonctionne en surveillant un référentiel GitHub pour les nouveaux commits.

Quand une nouvelle validation est effectuée, il exécute les étapes du pipeline de construction telles que définies dans un fichier de configuration (plus de détails ci-dessous). Si une étape échoue, le pipeline se termine et il nous en informe.

Par défaut, Travis CI nécessite très peu de configuration. The only required configuration is specifying the programming language.

Nous pouvons toujours fournir plus de configuration pour adapter notre pipeline si nécessaire. Par exemple, nous pouvons limiter le nombre de branches qui déclenchent des générations, ajouter des étapes supplémentaires au pipeline, etc.

3.1. Versions gratuites et payantes

Il est important de savoir que Travis CI propose actuellement 2 offres: une version gratuite et une version payante.

La version gratuite, désignée par le nom de domaine.org, offre toutes les fonctionnalitésfor any public GitHub repository. Il n'y a pas de limite au nombre de builds ou de référentiels, bien que des limites de ressources soient imposées lors de l'exécution de votre pipeline.

La version payante, qui utilise le nom de domaine.com, est requise pour les référentiels GitHub privés. Il offre également plus de versions simultanées et un nombre de minutes de construction illimité par rapport au forfait gratuit. Il existe un essai gratuit pour les 100 premières versions afin de tester la version payante.

4. Création d'un pipeline de construction avec Travis CI

Pour ce didacticiel, nous utiliserons la version gratuite mentionnée ci-dessus. Tout référentiel public peut être utilisé pour créer un pipeline libre.

Tout ce que nous avons à faire est de vous connecter à Travis CI avec notre compte GitHub et de l’autoriser:

image

Une fois que nous avons accordé des autorisations à notre compte GitHub, nous sommes prêts à commencer à configurer notre pipeline de build.

4.1. Configuration du référentiel

Initialement, tous nos référentiels publics sont considérés comme inactifs. Pour résoudre ce problème,we need to enable our repository from the account settings page.

Ceci répertorie tous nos référentiels publics, avec un bouton bascule. Cliquez sur le bouton bascule pour configurer Travis CI pour commencer à surveiller ce référentiel pour les nouveaux commits, en utilisant la branche par défaut demaster:

image

Notez que chaque référentiel a également un boutonSettings. C'est ici que nous pouvons configurer différents comportements de pipeline:

  • Définir les événements qui déclenchent le pipeline (poussées, demandes d'extraction, etc.)

  • Définir les variables d'environnement qui sont transmises au pipeline

  • Annulation automatique des constructions lorsque de nouveaux événements sont déclenchés

Pour ce tutoriel, les paramètres par défaut fonctionneront correctement. Plus tard, nous verrons comment remplacer certains des comportements par défaut.

4.2. Création de la configuration Travis

L'étape suivante consiste à créer un nouveau fichier nommé.travis.yml dans le répertoire racine de notre référentiel. Ce fichier contient toutes les informations nécessaires à la configuration d'un pipeline. Without this file, the pipeline will not execute.

Pour ce tutoriel, nous devons simplement inclure la configuration minimale, qui spécifie le langage de programmation:

language: java

C'est ça! Sans fournir plus d'informations, Travis CI exécutera un pipeline simple qui:

  • Compile notre code source

  • Exécute nos tests

Une fois que nous avons validé le fichier.travis.yml, Travis lancera notre première compilation. Toute autre validation dans la branchemaster déclenchera des builds supplémentaires. Le tableau de bord nous permet également de déclencher manuellement le pipeline à tout moment sans nécessiter de demande de validation ou d'extraction.

5. Configuration additionnelle

Dans la section précédente, nous avons vu qu’une seule ligne de configuration est tout ce dont nous avons besoin pour exécuter notre pipeline de construction. Mais la plupart des projets nécessiteront une configuration supplémentaire pour mettre en place un pipeline significatif.

Cette section présente certaines des configurations les plus utiles que nous pourrions vouloir ajouter à notre pipeline.

5.1. Changer la commande de construction par défaut

La commande par défaut utilisée pour construire des projets Maven est:

mvn test -B

Nous pouvons changer cela en n'importe quelle commande en définissant la directivescript dans.travis.yml:

script: mvn package -DskipTests

Il est possible d’enchaîner plusieurs commandes dans une seule lignescript à l’aide de l’opérateur&&.

Certaines commandes de construction sont complexes et peuvent s'étendre sur plusieurs lignes ou avoir une logique complexe. Par exemple, ils peuvent effectuer différentes actions en fonction de variables d'environnement.

In these cases, it’s recommended to place the build command in a stand-alone script, et appelez ce script depuis le fichier de configuration:

script: ./build.sh

5.2. Code de déploiement

Les paramètres de construction par défaut pour les projets Java compilent simplement le code et exécutent des tests. Les artefacts résultants (fichiers .jar, etc.) sont ignorés à la fin du pipeline, sauf si nous les déployons quelque part.

Travis CI prend en charge une variété de services tiers bien connus. Les artefacts peuvent être copiés vers de nombreux systèmes de stockage en nuage populaires tels qu'Amazon S3, Google Cloud Storage, Bintray, etc.

Il peut égalementdeploy code directly to most popular cloud computing platforms comme AWS, Google App Engine, Heroku et bien d'autres.

Vous trouverez ci-dessous un exemple de configuration montrant comment nous pouvons nous déployer sur Heroku. Pour générer des propriétés chiffrées, nous devons utiliser lesTravis CLI tool.

deploy:
  provider: heroku
  api_key:
    secure: "ENCRYPTED_API_KEY"

De plus, il fournit une option de déploiement générique qui nous permet d'écrire notre propre script de déploiement. Ceci est utile si nous devons déployer des artefacts sur un système tiers non pris en charge de manière native.

Par exemple, nous pourrions écrire un script shell qui copie de manière sécurisée les artefacts sur un serveur FTP privé:

deploy:
  provider: script
  script: bash ./custom-deploy.sh

5.3. Gestion des branches qui déclenchent le pipeline

Par défaut, le pipeline s'exécutera pour toute validation surmaster. Cependant, la plupart des grands projets utilisent une forme de branche git pour gérer les cycles de développement.

Travis CI supports both white and blacklisting of git branches pour déterminer quels commits doivent déclencher le pipeline.

A titre d'exemple, considérons la configuration suivante:

branches:
  only:
  - release
  - stable
  except:
  - master
  - nightly

Cela ignorerait les commits sur les branchesmaster etnightly. Les validations dans les branchesrelease etstable déclencheraient le pipeline. Notez que la directiveonly a toujours la priorité sur la directiveexcept.

Nous pouvons également utiliser des expressions régulières pour contrôler les branches qui déclenchent le pipeline:

branches:
  only:
  - /^development.*$/

Cela ne démarrerait le pipeline que pour les commits sur les branches commençant pardevelopment.

5.4. Ignorer des commits spécifiques

We can use the git commit message to skip individual commits. Travis CI examinera le message pour rechercher les modèles suivants:

  • ignorer

  • ignorer

est l'une des valeurs suivantes:

  • ci

  • travis

  • travis ci

  • Travis-ci

  • Travisci

Si le message de validation correspond à l'un de ces modèles, le pipeline ne s'exécutera pas.

5.5. Utilisation de différents environnements de construction

L’environnement de construction par défaut pour les projets Java est Ubuntu Linux. Les pipelines peuvent également s'exécuter sur Mac OSX ou Windows Server en ajoutant la configuration suivante dans.travis.yml:

os: osx # can also be 'windows'

Même avec Linux, il existe 3 distributions différentes parmi lesquelles nous pouvons choisir:

os: linux
  dist: xenial # other choices are 'trusty' or 'precise'

Lebuild platform documentation couvre tous les environnements disponibles et leurs différences.

N'oubliez pas que si nous changeons la plate-forme, nous pourrions également avoir besoin de modifier les scripts personnalisésbuild oudeploy pour assurer la compatibilité. Il y a plusieurs manières dehandle multiple operating systems dans la configuration.

5.6. Utiliser différentes versions du JDK

Nous pouvons également tester une version spécifique du JDK en définissant la configuration suivante dans le fichier.travis.yml:

jdk: oraclejdk8

Gardez à l'esprit que différents environnements de construction, même les différentes distributions Linux, peuvent avoir différentes versions de JDK disponibles. Consultez la documentation de chaque environnement pour voir la liste complète des versions de JDK.

6. Construire des matrices

Par défaut, chaque fois que notre pipeline est exécuté, il est exécuté en tant que tâche unique. Cela signifie que toutes les phases du pipeline s'exécutent de manière séquentielle sur une seule machine virtuelle avec les mêmes paramètres.

Mais l'une des grandes fonctionnalités de Travis CI est la possibilité de créer une matrice de construction. Cela nous permet d'exécuter plusieurs tâches pour chaque commit, en utilisant des valeurs différentes pour certains des paramètres que nous avons vus précédemment.

Par exemple, nous pouvons utiliser une matrice de construction pour exécuter notre pipeline sous Linux et Mac OSX, ou avec JDK 8 et 9.

There are two ways to create build matrices. Tout d'abord,we can provide an array of values pour une ou plusieurs des configurations de langage et d'environnement que nous avons vues précédemment. Par exemple:

language: java
jdk:
  - openjdk8
  - openjdk9
os:
  - linux
  - osx

En utilisant cette approche, Travis CI étendra automatiquement chaque combinaison de configuration pour former plusieurs tâches. Dans l'exemple ci-dessus, le résultat serait quatre emplois au total.

The second way to create a build matrix is to use the matrix.include directive. Cela nous permet de déclarer explicitement les combinaisons que nous voulons exécuter:

language: java
matrix:
  include:
  - jdk: openjdk8
    os: linux
  - jdk: openjdk9
    os: osx

L'exemple ci-dessus entraînerait deux emplois.

Encore une fois, si nous construisons sur plusieurs systèmes d'exploitation, nous devons veiller à ce que nos scriptsbuild etdeployment fonctionnent dans tous les cas. Les scripts shell ne fonctionneront pas sous Windows, par exemple. Nous devons utiliser les instructions conditionnelles appropriées pour gérer différents systèmes d'exploitation.

Il existe desmore options qui fournissent un contrôle plus granulaire sur les tâches à créer et sur la manière de gérer les échecs.

7. Conclusion

Dans cet article, nous avons créé un pipeline de construction simple à l'aide de Travis CI. En utilisant principalement une configuration prête à l'emploi, nous avons créé un pipeline qui génère du code et exécute des tests.

Nous avons également vu un petit échantillon de la configuration configurable de Travis CI. Il fonctionne avec une variété de langages de programmation et de plates-formes cloud tierces. L'inconvénient est qu'il ne fonctionne actuellement qu'avec les référentiels GitHub.