Pipelines
Un pipeline est un document YAML dans votre dépôt. Cette page décrit ce que contient ce document ; la page d'installation par pipeline s'en sert pour déployer Aetheus lui-même.
Où vit la définition
Les définitions de pipelines sont lues depuis le dépôt, sous .pipeline/<slug>.yaml. Le backend relit le fichier depuis le dépôt canonique à chaque lancement : la définition présente sur la branche par défaut est donc toujours celle qui s'exécute. Modifier un pipeline depuis l'interface web réécrit le YAML dans le dépôt et le commite, ce qui implique de récupérer les modifications sur un clone local avant de pousser à la main.
Squelette
name: mon-application-deploy
trigger: manual
variables:
APP_VERSION: "1.0.$(BUILD_PIPELINE_RUNNUMBER)"
DEPLOY_ROOT: "/srv/mon-application"
stages:
- name: Build
os: linux
steps:
- name: Compiler
checkout: true
working_directory: "$(WORKSPACE)"
timeout_seconds: 1800
shell: |
set -eu
./build.sh
- name: Deploy
os: linux
depends_on:
- Build
steps:
- name: Publier sur l'hôte
shell: sh deploy/publish.sh
Étapes
Une étape est l'unité d'ordonnancement. Elle est distribuée en bloc à un agent éligible, et déclare ses besoins :
os:linuxouwindows, utilisé pour sélectionner un agent ;depends_on: une liste de noms d'étapes. Les étapes sans dépendance non satisfaite s'exécutent en parallèle ; cette liste est la seule chose qui les sérialise ;group: un regroupement d'affichage dans la vue d'exécution, par exempleDeploy. Sans effet sur l'ordonnancement ;artifacts: les chemins que cette étape publie une fois ses tâches réussies. Les étapes suivantes, et les exécutions ultérieures, les restaurent par leur nom ;execution_role: contrainte de routage facultative quand les agents sont spécialisés.
Tâches
Les tâches d'une étape s'exécutent dans l'ordre, sur le même agent et dans le même espace de travail. Les champs courants sont :
| Champ | Signification |
|---|---|
name | Libellé affiché dans la chronologie d'exécution et dans les journaux. |
shell | Le script à exécuter. Un bloc littéral garde lisibles les scripts multi-lignes. |
checkout | À vrai, clone la révision source épinglée dans l'espace de travail avant l'exécution. |
working_directory | Où s'exécuter, généralement "$(WORKSPACE)". |
timeout_seconds | Budget de la tâche. Le dépassement échoue la tâche au lieu de bloquer l'exécution. |
continue_on_error | Signale l'échec en avertissement et poursuit, au lieu d'échouer l'exécution. |
type | Sélectionne une tâche native au lieu d'un script shell ; voir ci-dessous. |
Types de tâches natifs
Certains travaux gagnent à être exprimés en tâche de premier ordre plutôt qu'en script : le backend comprend alors le résultat au lieu d'analyser du texte. Les types employés par les pipelines livrés dans le dépôt sont :
| Type | Rôle |
|---|---|
release | Enregistre une release pour cette exécution : version, changelog, et si elle est déployée. |
restore-artifacts | Restaure des artefacts publiés par une autre étape ou une autre exécution. |
trigger | Lance un autre pipeline et, si demandé, l'attend. L'exécution fille apparaît imbriquée dans la chronologie du parent. |
coverage, lint, complexity | Ingèrent un rapport pour en faire un résultat de premier ordre sur l'exécution et sur le projet. |
scanner, analysis-gate | Lancent un scanner de sécurité ou de qualité, puis bloquent l'exécution quand les remontées franchissent un seuil. |
smoke | Sonde une URL déployée et échoue l'étape si la réponse n'est pas celle attendue. |
Paramètres d'exécution
Un pipeline peut demander des valeurs au lancement via un bloc parameters: de premier niveau. Chaque paramètre a un type parmi string, boolean ou choice, et une valeur par défaut pour qu'une exécution planifiée ou déclenchée par webhook dispose quand même d'une valeur.
parameters:
- name: revision
display_name: Révision consignée dans le journal de déploiement
type: string
default: scheduled
required: false
Variables
Les valeurs sont substituées par $(NOM). Trois sources alimentent la substitution :
variables:
APP_VERSION: "1.0.$(BUILD_PIPELINE_RUNNUMBER)"
variable_libraries:
- mes-valeurs-publiques
vaults:
- secrets-mon-application
Une bibliothèque de variables n'est visible que par un pipeline qui la liste ; rien n'est appliqué implicitement. Un coffre absent est un échec net à la résolution des variables, de sorte qu'une tâche ne reçoit jamais silencieusement un secret vide.
Parmi les variables intégrées : $(WORKSPACE), le répertoire de checkout, BUILD_SOURCEVERSION, la révision exacte épinglée par l'exécution, et BUILD_PIPELINE_RUNNUMBER, le compteur de build propre au pipeline.
Les numéros de version sont des compteurs de build
BUILD_PIPELINE_RUNNUMBER s'incrémente à chaque lancement du pipeline, échecs et annulations compris. Un pipeline dont la version est 1.1.$(BUILD_PIPELINE_RUNNUMBER) produira donc 1.1.57 à son 57e lancement. Si vous voulez une version sémantique, dérivez-la d'une étiquette, pas de ce compteur.
Modèles
Un pipeline peut étendre un modèle publié avec extends: <modèle>@<version> et ne fournir que ses propres paramètres. Les modèles sont versionnés et immuables : une version publiée ne peut pas être modifiée, adopter un changement signifie donc passer explicitement à la version suivante. C'est ce qui empêche un parc de pipelines de dériver à votre insu.
Pour aller plus loin
- Installer via un pipeline Aetheus : un pipeline minimal build, deploy et release.
- Concepts : artefacts, releases et environnements.