3.2. Comprendre les pipelines OpenShift
Red Hat OpenShift Pipelines est une solution cloud-native d'intégration et de livraison continues (CI/CD) basée sur les ressources Kubernetes. Elle utilise les blocs de construction Tekton pour automatiser les déploiements sur plusieurs plateformes en faisant abstraction des détails de mise en œuvre sous-jacents. Tekton introduit un certain nombre de définitions de ressources personnalisées (CRD) standard pour définir les pipelines CI/CD qui sont portables à travers les distributions Kubernetes.
3.2.1. Caractéristiques principales
- Red Hat OpenShift Pipelines est un système CI/CD sans serveur qui exécute des pipelines avec toutes les dépendances requises dans des conteneurs isolés.
- Red Hat OpenShift Pipelines est conçu pour les équipes décentralisées qui travaillent sur une architecture basée sur les microservices.
- Red Hat OpenShift Pipelines utilise des définitions de pipeline CI/CD standard qui sont faciles à étendre et à intégrer aux outils Kubernetes existants, ce qui vous permet d'évoluer à la demande.
- Vous pouvez utiliser Red Hat OpenShift Pipelines pour construire des images avec des outils Kubernetes tels que Source-to-Image (S2I), Buildah, Buildpacks et Kaniko qui sont portables sur n'importe quelle plateforme Kubernetes.
- Vous pouvez utiliser la console OpenShift Container Platform Developer pour créer des ressources Tekton, consulter les journaux d'exécution des pipelines et gérer les pipelines dans vos espaces de noms OpenShift Container Platform.
3.2.2. Concepts des pipelines OpenShift
Ce guide fournit une vue détaillée des différents concepts de pipelines.
3.2.2.1. Tâches
Task
les ressources sont les éléments constitutifs d'un pipeline et consistent en des étapes exécutées de manière séquentielle. Il s'agit essentiellement d'une fonction d'entrées et de sorties. Une tâche peut être exécutée individuellement ou dans le cadre d'un pipeline. Les tâches sont réutilisables et peuvent être utilisées dans plusieurs pipelines.
Steps sont une série de commandes qui sont exécutées séquentiellement par la tâche et qui permettent d'atteindre un objectif spécifique, tel que la construction d'une image. Chaque tâche s'exécute en tant que pod, et chaque étape s'exécute en tant que conteneur au sein de ce pod. Comme les étapes s'exécutent dans le même module, elles peuvent accéder aux mêmes volumes pour les fichiers de mise en cache, les cartes de configuration et les secrets.
L'exemple suivant illustre la tâche apply-manifests
.
apiVersion: tekton.dev/v1beta1 1 kind: Task 2 metadata: name: apply-manifests 3 spec: 4 workspaces: - name: source params: - name: manifest_dir description: The directory in source that contains yaml manifests type: string default: "k8s" steps: - name: apply image: image-registry.openshift-image-registry.svc:5000/openshift/cli:latest workingDir: /workspace/source command: ["/bin/bash", "-c"] args: - |- echo Applying manifests in $(params.manifest_dir) directory oc apply -f $(params.manifest_dir) echo -----------------------------------
Cette tâche démarre le pod et exécute un conteneur à l'intérieur de ce pod en utilisant l'image spécifiée pour exécuter les commandes spécifiées.
À partir d'OpenShift Pipelines 1.6, les valeurs par défaut suivantes du fichier YAML de l'étape sont supprimées :
-
La variable d'environnement
HOME
n'indique pas par défaut le répertoire/tekton/home
-
Le champ
workingDir
ne renvoie pas par défaut au répertoire/workspace
Au lieu de cela, le conteneur de l'étape définit la variable d'environnement HOME
et le champ workingDir
. Toutefois, vous pouvez remplacer les valeurs par défaut en spécifiant les valeurs personnalisées dans le fichier YAML de l'étape.
À titre de mesure temporaire, pour maintenir la compatibilité ascendante avec les anciennes versions d'OpenShift Pipelines, vous pouvez définir les champs suivants dans la définition de la ressource personnalisée TektonConfig
à false
:
spec: pipeline: disable-working-directory-overwrite: false disable-home-env-overwrite: false
3.2.2.2. Quand l'expression
Les expressions When protègent l'exécution des tâches en définissant des critères pour l'exécution des tâches au sein d'un pipeline. Elles contiennent une liste de composants qui permet à une tâche de s'exécuter uniquement lorsque certains critères sont remplis. Les expressions When sont également prises en charge dans l'ensemble final des tâches spécifiées à l'aide du champ finally
dans le fichier YAML du pipeline.
Les éléments clés d'une expression when sont les suivants :
-
input
: Spécifie des entrées statiques ou des variables telles qu'un paramètre, un résultat de tâche et un état d'exécution. Vous devez saisir une entrée valide. Si vous ne saisissez pas d'entrée valide, sa valeur prend par défaut la forme d'une chaîne vide. -
operator
: Spécifie la relation d'une entrée avec un ensemble devalues
. Saisissezin
ounotin
comme valeurs d'opérateur. -
values
: Spécifie un tableau de valeurs de chaînes de caractères. Entrez un tableau non vide de valeurs statiques ou de variables telles que des paramètres, des résultats et un état lié d'un espace de travail.
Les expressions when déclarées sont évaluées avant l'exécution de la tâche. Si la valeur d'une expression when est True
, la tâche est exécutée. Si la valeur d'une expression when est False
, la tâche est ignorée.
Vous pouvez utiliser les expressions when dans différents cas d'utilisation. Par exemple, si :
- Le résultat d'une tâche précédente est conforme aux attentes.
- Un fichier dans un dépôt Git a été modifié dans les commits précédents.
- Une image existe dans le registre.
- Un espace de travail est disponible en option.
L'exemple suivant montre les expressions when pour une exécution de pipeline. Le pipeline n'exécutera la tâche create-file
que si les critères suivants sont remplis : le paramètre path
est README.md
, et la tâche echo-file-exists
n'est exécutée que si le résultat exists
de la tâche check-file
est yes
.
apiVersion: tekton.dev/v1beta1 kind: PipelineRun 1 metadata: generateName: guarded-pr- spec: serviceAccountName: 'pipeline' pipelineSpec: params: - name: path type: string description: The path of the file to be created workspaces: - name: source description: | This workspace is shared among all the pipeline tasks to read/write common resources tasks: - name: create-file 2 when: - input: "$(params.path)" operator: in values: ["README.md"] workspaces: - name: source workspace: source taskSpec: workspaces: - name: source description: The workspace to create the readme file in steps: - name: write-new-stuff image: ubuntu script: 'touch $(workspaces.source.path)/README.md' - name: check-file params: - name: path value: "$(params.path)" workspaces: - name: source workspace: source runAfter: - create-file taskSpec: params: - name: path workspaces: - name: source description: The workspace to check for the file results: - name: exists description: indicates whether the file exists or is missing steps: - name: check-file image: alpine script: | if test -f $(workspaces.source.path)/$(params.path); then printf yes | tee /tekton/results/exists else printf no | tee /tekton/results/exists fi - name: echo-file-exists when: 3 - input: "$(tasks.check-file.results.exists)" operator: in values: ["yes"] taskSpec: steps: - name: echo image: ubuntu script: 'echo file exists' ... - name: task-should-be-skipped-1 when: 4 - input: "$(params.path)" operator: notin values: ["README.md"] taskSpec: steps: - name: echo image: ubuntu script: exit 1 ... finally: - name: finally-task-should-be-executed when: 5 - input: "$(tasks.echo-file-exists.status)" operator: in values: ["Succeeded"] - input: "$(tasks.status)" operator: in values: ["Succeeded"] - input: "$(tasks.check-file.results.exists)" operator: in values: ["yes"] - input: "$(params.path)" operator: in values: ["README.md"] taskSpec: steps: - name: echo image: ubuntu script: 'echo finally done' params: - name: path value: README.md workspaces: - name: source volumeClaimTemplate: spec: accessModes: - ReadWriteOnce resources: requests: storage: 16Mi
- 1
- Spécifie le type d'objet Kubernetes. Dans cet exemple,
PipelineRun
. - 2
- Tâche
create-file
utilisée dans le pipeline. - 3
when
qui spécifie d'exécuter la tâcheecho-file-exists
uniquement si le résultatexists
de la tâchecheck-file
estyes
.- 4
when
qui spécifie d'ignorer la tâchetask-should-be-skipped-1
uniquement si le paramètrepath
estREADME.md
.- 5
when
expression qui spécifie d'exécuter la tâchefinally-task-should-be-executed
seulement si le statut d'exécution de la tâcheecho-file-exists
et le statut de la tâche estSucceeded
, le résultatexists
de la tâchecheck-file
estyes
, et le paramètrepath
estREADME.md
.
La page Pipeline Run details de la console web de OpenShift Container Platform montre l'état des tâches et des expressions de temps comme suit :
- Tous les critères sont remplis : Les tâches et le symbole de l'expression "quand", représenté par un losange, sont verts.
- L'un des critères n'est pas respecté : La tâche est ignorée. Les tâches ignorées et le symbole de l'expression "quand" sont grisés.
- Aucun des critères n'est rempli : La tâche est ignorée. Les tâches ignorées et le symbole de l'expression "quand" sont grisés.
- L'exécution de la tâche échoue : Les tâches qui échouent et le symbole de l'expression "quand" sont en rouge.
3.2.2.3. Enfin, les tâches
Les tâches finally
sont le dernier ensemble de tâches spécifiées à l'aide du champ finally
dans le fichier YAML du pipeline. Une tâche finally
exécute toujours les tâches du pipeline, que les exécutions du pipeline soient réussies ou non. Les tâches finally
sont exécutées en parallèle après l'exécution de toutes les tâches du pipeline, avant que le pipeline correspondant ne se termine.
Vous pouvez configurer une tâche finally
pour qu'elle consomme les résultats de n'importe quelle tâche du même pipeline. Cette approche ne modifie pas l'ordre d'exécution de cette tâche finale. Elle est exécutée en parallèle avec d'autres tâches finales après l'exécution de toutes les tâches non finales.
L'exemple suivant montre un extrait de code du pipeline clone-cleanup-workspace
. Ce code clone le référentiel dans un espace de travail partagé et nettoie l'espace de travail. Après avoir exécuté les tâches du pipeline, la tâche cleanup
spécifiée dans la section finally
du fichier YAML du pipeline nettoie l'espace de travail.
apiVersion: tekton.dev/v1beta1 kind: Pipeline metadata: name: clone-cleanup-workspace 1 spec: workspaces: - name: git-source 2 tasks: - name: clone-app-repo 3 taskRef: name: git-clone-from-catalog params: - name: url value: https://github.com/tektoncd/community.git - name: subdirectory value: application workspaces: - name: output workspace: git-source finally: - name: cleanup 4 taskRef: 5 name: cleanup-workspace workspaces: 6 - name: source workspace: git-source - name: check-git-commit params: 7 - name: commit value: $(tasks.clone-app-repo.results.commit) taskSpec: 8 params: - name: commit steps: - name: check-commit-initialized image: alpine script: | if [[ ! $(params.commit) ]]; then exit 1 fi
- 1
- Nom unique de la canalisation.
- 2
- L'espace de travail partagé où le dépôt git est cloné.
- 3
- La tâche de clonage du référentiel d'application dans l'espace de travail partagé.
- 4
- La tâche de nettoyage de l'espace de travail partagé.
- 5
- Une référence à la tâche qui doit être exécutée lors de l'exécution de la tâche.
- 6
- Volume de stockage partagé dont une tâche d'un pipeline a besoin au moment de l'exécution pour recevoir des données d'entrée ou fournir des données de sortie.
- 7
- Liste des paramètres requis pour une tâche. Si un paramètre n'a pas de valeur implicite par défaut, vous devez définir explicitement sa valeur.
- 8
- Définition des tâches intégrées.
3.2.2.4. Exécution des tâches
Un site TaskRun
instancie une tâche à exécuter avec des entrées, des sorties et des paramètres d'exécution spécifiques sur un cluster. Il peut être invoqué seul ou dans le cadre d'une exécution de pipeline pour chaque tâche d'un pipeline.
Une tâche consiste en une ou plusieurs étapes qui exécutent des images de conteneur, et chaque image de conteneur effectue un travail de construction spécifique. Une exécution de tâche exécute les étapes d'une tâche dans l'ordre spécifié, jusqu'à ce que toutes les étapes s'exécutent avec succès ou qu'un échec se produise. Un TaskRun
est automatiquement créé par un PipelineRun
pour chaque tâche d'un pipeline.
L'exemple suivant montre une tâche qui exécute la tâche apply-manifests
avec les paramètres d'entrée appropriés :
apiVersion: tekton.dev/v1beta1 1 kind: TaskRun 2 metadata: name: apply-manifests-taskrun 3 spec: 4 serviceAccountName: pipeline taskRef: 5 kind: Task name: apply-manifests workspaces: 6 - name: source persistentVolumeClaim: claimName: source-pvc
- 1
- La tâche exécute la version de l'API
v1beta1
. - 2
- Spécifie le type d'objet Kubernetes. Dans cet exemple,
TaskRun
. - 3
- Nom unique permettant d'identifier l'exécution de cette tâche.
- 4
- Définition de l'exécution de la tâche. Pour cette exécution de tâche, la tâche et l'espace de travail requis sont spécifiés.
- 5
- Nom de la référence de tâche utilisée pour cette exécution de tâche. Cette tâche exécute la tâche
apply-manifests
. - 6
- Espace de travail utilisé par l'exécution de la tâche.
3.2.2.5. Pipelines
Un site Pipeline
est un ensemble de ressources Task
disposées dans un ordre d'exécution spécifique. Elles sont exécutées pour construire des flux de travail complexes qui automatisent la construction, le déploiement et la livraison d'applications. Vous pouvez définir un flux de travail CI/CD pour votre application à l'aide de pipelines contenant une ou plusieurs tâches.
Une définition de ressource Pipeline
se compose d'un certain nombre de champs ou d'attributs qui, ensemble, permettent au pipeline d'atteindre un objectif spécifique. Chaque définition de ressource Pipeline
doit contenir au moins une ressource Task
, qui reçoit des données d'entrée spécifiques et produit des données de sortie spécifiques. La définition du pipeline peut également inclure Conditions, Workspaces, Parameters, ou Resources en fonction des exigences de l'application.
L'exemple suivant montre le pipeline build-and-deploy
, qui construit une image d'application à partir d'un dépôt Git en utilisant la ressource buildah
ClusterTask
:
apiVersion: tekton.dev/v1beta1 1 kind: Pipeline 2 metadata: name: build-and-deploy 3 spec: 4 workspaces: 5 - name: shared-workspace params: 6 - name: deployment-name type: string description: name of the deployment to be patched - name: git-url type: string description: url of the git repo for the code of deployment - name: git-revision type: string description: revision to be used from repo of the code for deployment default: "pipelines-1.9" - name: IMAGE type: string description: image to be built from the code tasks: 7 - name: fetch-repository taskRef: name: git-clone kind: ClusterTask workspaces: - name: output workspace: shared-workspace params: - name: url value: $(params.git-url) - name: subdirectory value: "" - name: deleteExisting value: "true" - name: revision value: $(params.git-revision) - name: build-image 8 taskRef: name: buildah kind: ClusterTask params: - name: TLSVERIFY value: "false" - name: IMAGE value: $(params.IMAGE) workspaces: - name: source workspace: shared-workspace runAfter: - fetch-repository - name: apply-manifests 9 taskRef: name: apply-manifests workspaces: - name: source workspace: shared-workspace runAfter: 10 - build-image - name: update-deployment taskRef: name: update-deployment workspaces: - name: source workspace: shared-workspace params: - name: deployment value: $(params.deployment-name) - name: IMAGE value: $(params.IMAGE) runAfter: - apply-manifests
- 1
- Version de l'API du pipeline
v1beta1
. - 2
- Spécifie le type d'objet Kubernetes. Dans cet exemple,
Pipeline
. - 3
- Nom unique de cette canalisation.
- 4
- Spécifie la définition et la structure du pipeline.
- 5
- Espaces de travail utilisés pour toutes les tâches du pipeline.
- 6
- Paramètres utilisés pour toutes les tâches du pipeline.
- 7
- Spécifie la liste des tâches utilisées dans le pipeline.
- 8
- La tâche
build-image
, qui utilise la tâchebuildah
ClusterTask
pour construire des images d'application à partir d'un dépôt Git donné. - 9
- Task
apply-manifests
, qui utilise une tâche définie par l'utilisateur portant le même nom. - 10
- Spécifie l'ordre dans lequel les tâches sont exécutées dans un pipeline. Dans cet exemple, la tâche
apply-manifests
n'est exécutée qu'une fois la tâchebuild-image
terminée.
L'opérateur Red Hat OpenShift Pipelines installe la tâche de cluster Buildah et crée le compte de service pipeline
avec des permissions suffisantes pour construire et pousser une image. La tâche Buildah cluster peut échouer si elle est associée à un compte de service différent avec des autorisations insuffisantes.
3.2.2.6. Exécution du pipeline
Un site PipelineRun
est un type de ressource qui lie un pipeline, des espaces de travail, des informations d'identification et un ensemble de valeurs de paramètres spécifiques à un scénario pour exécuter le flux de travail CI/CD.
Un site PipelineRun
est l'instance en cours d'exécution d'un pipeline. Il instancie un pipeline pour l'exécuter avec des entrées, des sorties et des paramètres d'exécution spécifiques sur un cluster. Il crée également une exécution de tâche pour chaque tâche de l'exécution du pipeline.
Le pipeline exécute les tâches de manière séquentielle jusqu'à ce qu'elles soient terminées ou qu'une tâche échoue. Le champ status
suit la progression de chaque tâche et la stocke à des fins de contrôle et d'audit.
L'exemple suivant exécute le pipeline build-and-deploy
avec les ressources et les paramètres appropriés :
apiVersion: tekton.dev/v1beta1 1 kind: PipelineRun 2 metadata: name: build-deploy-api-pipelinerun 3 spec: pipelineRef: name: build-and-deploy 4 params: 5 - name: deployment-name value: vote-api - name: git-url value: https://github.com/openshift-pipelines/vote-api.git - name: IMAGE value: image-registry.openshift-image-registry.svc:5000/pipelines-tutorial/vote-api workspaces: 6 - name: shared-workspace volumeClaimTemplate: spec: accessModes: - ReadWriteOnce resources: requests: storage: 500Mi
- 1
- Exécution du pipeline Version de l'API
v1beta1
. - 2
- Le type d'objet Kubernetes. Dans cet exemple,
PipelineRun
. - 3
- Nom unique permettant d'identifier cette canalisation.
- 4
- Nom du pipeline à exécuter. Dans cet exemple,
build-and-deploy
. - 5
- La liste des paramètres nécessaires à l'exécution du pipeline.
- 6
- Espace de travail utilisé par le pipeline.
Ressources complémentaires
3.2.2.7. Espaces de travail
Il est recommandé d'utiliser des espaces de travail au lieu des CR PipelineResource
dans Red Hat OpenShift Pipelines, car les CR PipelineResource
sont difficiles à déboguer, limités dans leur portée et rendent les tâches moins réutilisables.
Les espaces de travail déclarent les volumes de stockage partagés dont une tâche d'un pipeline a besoin au moment de l'exécution pour recevoir des données d'entrée ou fournir des données de sortie. Au lieu de spécifier l'emplacement réel des volumes, les espaces de travail vous permettent de déclarer le système de fichiers ou les parties du système de fichiers qui seraient nécessaires au moment de l'exécution. Une tâche ou un pipeline déclare l'espace de travail et vous devez fournir les détails de l'emplacement spécifique du volume. Celui-ci est ensuite monté dans cet espace de travail lors de l'exécution d'une tâche ou d'un pipeline. Cette séparation entre la déclaration de volume et les volumes de stockage au moment de l'exécution rend les tâches réutilisables, flexibles et indépendantes de l'environnement de l'utilisateur.
Avec les espaces de travail, vous pouvez
- Stocker les entrées et sorties des tâches
- Partager des données entre les tâches
- Utilisez-le comme point de montage pour les informations d'identification contenues dans les secrets
- L'utiliser comme point de montage pour les configurations contenues dans les cartes de configuration
- L'utiliser comme point de montage pour les outils communs partagés par une organisation
- Créer un cache d'artefacts de construction qui accélère les travaux
Vous pouvez spécifier des espaces de travail dans les sites TaskRun
ou PipelineRun
en utilisant :
- Une carte de configuration ou un secret en lecture seule
- Une revendication de volume persistant existante partagée avec d'autres tâches
- Une demande de volume persistante à partir d'un modèle de demande de volume fourni
-
Une adresse
emptyDir
qui est rejetée à la fin de l'exécution de la tâche
L'exemple suivant montre un extrait de code du pipeline build-and-deploy
, qui déclare un espace de travail shared-workspace
pour les tâches build-image
et apply-manifests
telles que définies dans le pipeline.
apiVersion: tekton.dev/v1beta1 kind: Pipeline metadata: name: build-and-deploy spec: workspaces: 1 - name: shared-workspace params: ... tasks: 2 - name: build-image taskRef: name: buildah kind: ClusterTask params: - name: TLSVERIFY value: "false" - name: IMAGE value: $(params.IMAGE) workspaces: 3 - name: source 4 workspace: shared-workspace 5 runAfter: - fetch-repository - name: apply-manifests taskRef: name: apply-manifests workspaces: 6 - name: source workspace: shared-workspace runAfter: - build-image ...
- 1
- Liste des espaces de travail partagés entre les tâches définies dans le pipeline. Un pipeline peut définir autant d'espaces de travail que nécessaire. Dans cet exemple, un seul espace de travail nommé
shared-workspace
est déclaré. - 2
- Définition des tâches utilisées dans le pipeline. Cet extrait définit deux tâches,
build-image
etapply-manifests
, qui partagent un espace de travail commun. - 3
- Liste des espaces de travail utilisés dans la tâche
build-image
. Une définition de tâche peut inclure autant d'espaces de travail que nécessaire. Toutefois, il est recommandé qu'une tâche utilise au maximum un espace de travail accessible en écriture. - 4
- Nom qui identifie de manière unique l'espace de travail utilisé dans la tâche. Cette tâche utilise un espace de travail nommé
source
. - 5
- Nom de l'espace de travail du pipeline utilisé par la tâche. Notez que l'espace de travail
source
utilise à son tour l'espace de travail du pipeline nomméshared-workspace
. - 6
- Liste des espaces de travail utilisés dans la tâche
apply-manifests
. Notez que cette tâche partage l'espace de travailsource
avec la tâchebuild-image
.
Les espaces de travail aident les tâches à partager des données et vous permettent de spécifier un ou plusieurs volumes dont chaque tâche du pipeline a besoin pendant son exécution. Vous pouvez créer une demande de volume persistant ou fournir un modèle de demande de volume qui crée une demande de volume persistant pour vous.
L'extrait de code suivant de l'exécution du pipeline build-deploy-api-pipelinerun
utilise un modèle de demande de volume pour créer une demande de volume persistante afin de définir le volume de stockage de l'espace de travail shared-workspace
utilisé dans le pipeline build-and-deploy
.
apiVersion: tekton.dev/v1beta1 kind: PipelineRun metadata: name: build-deploy-api-pipelinerun spec: pipelineRef: name: build-and-deploy params: ... workspaces: 1 - name: shared-workspace 2 volumeClaimTemplate: 3 spec: accessModes: - ReadWriteOnce resources: requests: storage: 500Mi
- 1
- Spécifie la liste des espaces de travail du pipeline pour lesquels la liaison de volume sera fournie lors de l'exécution du pipeline.
- 2
- Le nom de l'espace de travail dans le pipeline pour lequel le volume est fourni.
- 3
- Spécifie un modèle de revendication de volume qui crée une revendication de volume persistante pour définir le volume de stockage de l'espace de travail.
3.2.2.8. Déclencheurs
Utilisez Triggers en conjonction avec les pipelines pour créer un système CI/CD à part entière où les ressources Kubernetes définissent l'ensemble de l'exécution CI/CD. Les déclencheurs capturent les événements externes, tels qu'une demande d'extraction Git, et les traitent pour en extraire des informations clés. La mise en correspondance de ces données d'événement avec un ensemble de paramètres prédéfinis déclenche une série de tâches qui peuvent ensuite créer et déployer des ressources Kubernetes et instancier le pipeline.
Par exemple, vous définissez un flux de travail CI/CD à l'aide de Red Hat OpenShift Pipelines pour votre application. Le pipeline doit démarrer pour que toute nouvelle modification prenne effet dans le référentiel de l'application. Les déclencheurs automatisent ce processus en capturant et en traitant tout événement de changement et en déclenchant une exécution du pipeline qui déploie la nouvelle image avec les dernières modifications.
Les déclencheurs sont constitués des principales ressources suivantes, qui fonctionnent ensemble pour former un système CI/CD réutilisable, découplé et autonome :
La ressource
TriggerBinding
extrait les champs d'une charge utile d'événement et les stocke en tant que paramètres.L'exemple suivant montre un extrait de code de la ressource
TriggerBinding
, qui extrait les informations relatives au dépôt Git de la charge utile de l'événement reçu :apiVersion: triggers.tekton.dev/v1beta1 1 kind: TriggerBinding 2 metadata: name: vote-app 3 spec: params: 4 - name: git-repo-url value: $(body.repository.url) - name: git-repo-name value: $(body.repository.name) - name: git-revision value: $(body.head_commit.id)
- 1
- La version API de la ressource
TriggerBinding
. Dans cet exemple,v1beta1
. - 2
- Spécifie le type d'objet Kubernetes. Dans cet exemple,
TriggerBinding
. - 3
- Nom unique pour identifier la ressource
TriggerBinding
. - 4
- Liste des paramètres qui seront extraits de la charge utile de l'événement reçu et transmis à la ressource
TriggerTemplate
. Dans cet exemple, l'URL, le nom et la révision du dépôt Git sont extraits du corps de l'événement.
La ressource
TriggerTemplate
sert de norme pour la façon dont les ressources doivent être créées. Elle spécifie la manière dont les données paramétrées de la ressourceTriggerBinding
doivent être utilisées. Un modèle de déclenchement reçoit des données de la liaison de déclenchement, puis effectue une série d'actions qui aboutissent à la création de nouvelles ressources de pipeline et au lancement d'un nouveau cycle de pipeline.L'exemple suivant montre un extrait de code d'une ressource
TriggerTemplate
, qui crée un pipeline en utilisant les informations du dépôt Git reçues de la ressourceTriggerBinding
que vous venez de créer :apiVersion: triggers.tekton.dev/v1beta1 1 kind: TriggerTemplate 2 metadata: name: vote-app 3 spec: params: 4 - name: git-repo-url description: The git repository url - name: git-revision description: The git revision default: pipelines-1.9 - name: git-repo-name description: The name of the deployment to be created / patched resourcetemplates: 5 - apiVersion: tekton.dev/v1beta1 kind: PipelineRun metadata: name: build-deploy-$(tt.params.git-repo-name)-$(uid) spec: serviceAccountName: pipeline pipelineRef: name: build-and-deploy params: - name: deployment-name value: $(tt.params.git-repo-name) - name: git-url value: $(tt.params.git-repo-url) - name: git-revision value: $(tt.params.git-revision) - name: IMAGE value: image-registry.openshift-image-registry.svc:5000/pipelines-tutorial/$(tt.params.git-repo-name) workspaces: - name: shared-workspace volumeClaimTemplate: spec: accessModes: - ReadWriteOnce resources: requests: storage: 500Mi
- 1
- La version API de la ressource
TriggerTemplate
. Dans cet exemple,v1beta1
. - 2
- Spécifie le type d'objet Kubernetes. Dans cet exemple,
TriggerTemplate
. - 3
- Nom unique pour identifier la ressource
TriggerTemplate
. - 4
- Paramètres fournis par la ressource
TriggerBinding
. - 5
- Liste des modèles qui spécifient la manière dont les ressources doivent être créées en utilisant les paramètres reçus par les ressources
TriggerBinding
ouEventListener
.
La ressource
Trigger
combine les ressourcesTriggerBinding
etTriggerTemplate
et, éventuellement, le processeur d'événementsinterceptors
.Les intercepteurs traitent tous les événements pour une plateforme spécifique qui s'exécute avant la ressource
TriggerBinding
. Vous pouvez utiliser les intercepteurs pour filtrer les données utiles, vérifier les événements, définir et tester les conditions de déclenchement et mettre en œuvre d'autres traitements utiles. Les intercepteurs utilisent le secret pour la vérification des événements. Une fois que les données de l'événement passent par un intercepteur, elles sont transmises au déclencheur avant que vous ne transmettiez les données de la charge utile à la liaison du déclencheur. Vous pouvez également utiliser un intercepteur pour modifier le comportement du déclencheur associé référencé dans la spécificationEventListener
.L'exemple suivant montre un extrait de code d'une ressource
Trigger
, nomméevote-trigger
, qui connecte les ressourcesTriggerBinding
etTriggerTemplate
, ainsi que le processeur d'événementsinterceptors
.apiVersion: triggers.tekton.dev/v1beta1 1 kind: Trigger 2 metadata: name: vote-trigger 3 spec: serviceAccountName: pipeline 4 interceptors: - ref: name: "github" 5 params: 6 - name: "secretRef" value: secretName: github-secret secretKey: secretToken - name: "eventTypes" value: ["push"] bindings: - ref: vote-app 7 template: 8 ref: vote-app --- apiVersion: v1 kind: Secret 9 metadata: name: github-secret type: Opaque stringData: secretToken: "1234567"
- 1
- La version API de la ressource
Trigger
. Dans cet exemple,v1beta1
. - 2
- Spécifie le type d'objet Kubernetes. Dans cet exemple,
Trigger
. - 3
- Nom unique pour identifier la ressource
Trigger
. - 4
- Nom du compte de service à utiliser.
- 5
- Nom de l'intercepteur à référencer. Dans cet exemple,
github
. - 6
- Paramètres souhaités à spécifier.
- 7
- Nom de la ressource
TriggerBinding
à connecter à la ressourceTriggerTemplate
. - 8
- Nom de la ressource
TriggerTemplate
à connecter à la ressourceTriggerBinding
. - 9
- Secret à utiliser pour vérifier les événements.
La ressource
EventListener
fournit un point de terminaison, ou un puits d'événements, qui écoute les événements HTTP entrants avec une charge utile JSON. Elle extrait les paramètres de l'événement de chaque ressourceTriggerBinding
, puis traite ces données pour créer des ressources Kubernetes comme spécifié par la ressourceTriggerTemplate
correspondante. La ressourceEventListener
effectue également un traitement léger des événements ou un filtrage de base sur la charge utile à l'aide de l'événementinterceptors
, qui identifie le type de charge utile et le modifie éventuellement. Actuellement, les déclencheurs de pipeline prennent en charge cinq types d'intercepteurs : Webhook Interceptors, GitHub Interceptors, GitLab Interceptors, Bitbucket Interceptors, et Common Expression Language (CEL) Interceptors.L'exemple suivant montre une ressource
EventListener
qui fait référence à la ressourceTrigger
nomméevote-trigger
.apiVersion: triggers.tekton.dev/v1beta1 1 kind: EventListener 2 metadata: name: vote-app 3 spec: serviceAccountName: pipeline 4 triggers: - triggerRef: vote-trigger 5
- 1
- La version API de la ressource
EventListener
. Dans cet exemple,v1beta1
. - 2
- Spécifie le type d'objet Kubernetes. Dans cet exemple,
EventListener
. - 3
- Nom unique pour identifier la ressource
EventListener
. - 4
- Nom du compte de service à utiliser.
- 5
- Nom de la ressource
Trigger
référencée par la ressourceEventListener
.
3.2.3. Ressources complémentaires
- Pour plus d'informations sur l'installation d'OpenShift Pipelines, voir Installation d'OpenShift Pipelines.
- Pour plus de détails sur la création de solutions CI/CD personnalisées, voir Création de solutions CI/CD pour les applications à l'aide d'OpenShift Pipelines.
- Pour plus de détails sur la terminaison de TLS par rechiffrement, voir Terminaison par rechiffrement.
- Pour plus de détails sur les itinéraires sécurisés, voir la section Itinéraires sécurisés.