3.5. Créer des solutions CI/CD pour les applications à l'aide d'OpenShift Pipelines


Avec Red Hat OpenShift Pipelines, vous pouvez créer une solution CI/CD personnalisée pour construire, tester et déployer votre application.

Pour créer un pipeline CI/CD complet et autonome pour une application, effectuez les tâches suivantes :

  • Créez des tâches personnalisées ou installez des tâches réutilisables existantes.
  • Créez et définissez le pipeline de livraison pour votre application.
  • Fournissez un volume de stockage ou un système de fichiers attaché à un espace de travail pour l'exécution du pipeline, en utilisant l'une des approches suivantes :

    • Spécifier un modèle de revendication de volume qui crée une revendication de volume persistante
    • Spécifier une revendication de volume persistant
  • Créer un objet PipelineRun pour instancier et invoquer le pipeline.
  • Ajouter des déclencheurs pour capturer les événements dans le référentiel source.

Cette section utilise l'exemple pipelines-tutorial pour démontrer les tâches précédentes. L'exemple utilise une application simple qui se compose des éléments suivants

  • Une interface frontale, pipelines-vote-ui, dont le code source se trouve dans le dépôt Git pipelines-vote-ui Git.
  • Une interface back-end, pipelines-vote-api, dont le code source se trouve dans le dépôt Git pipelines-vote-api Git.
  • Les tâches apply-manifests et update-deployment dans le dépôt pipelines-tutorial Git.

3.5.1. Conditions préalables

  • Vous avez accès à un cluster OpenShift Container Platform.
  • Vous avez installé OpenShift Pipelines à l'aide de l'opérateur Red Hat OpenShift Pipelines Operator répertorié dans l'OpenShift OperatorHub. Une fois installé, il s'applique à l'ensemble du cluster.
  • Vous avez installé OpenShift Pipelines CLI.
  • Vous avez forké le front-end pipelines-vote-ui et back-end pipelines-vote-api À l'aide de votre identifiant GitHub, et vous disposez d'un accès administrateur à ces dépôts.
  • Facultatif : vous avez cloné le dépôt pipelines-tutorial Dépôt Git.

Procédure

  1. Connectez-vous à votre cluster OpenShift Container Platform :

    $ oc login -u <login> -p <password> https://openshift.example.com:6443
    Copy to Clipboard Toggle word wrap
  2. Créez un projet pour l'exemple d'application. Pour cet exemple de flux de travail, créez le projet pipelines-tutorial:

    $ oc new-project pipelines-tutorial
    Copy to Clipboard Toggle word wrap
    Note

    Si vous créez un projet avec un nom différent, veillez à mettre à jour les URL des ressources utilisées dans l'exemple avec le nom de votre projet.

  3. Consulter le compte de service pipeline:

    Red Hat OpenShift Pipelines Operator ajoute et configure un compte de service nommé pipeline qui dispose de suffisamment d'autorisations pour construire et pousser une image. Ce compte de service est utilisé par l'objet PipelineRun.

    $ oc get serviceaccount pipeline
    Copy to Clipboard Toggle word wrap

3.5.3. Création de tâches de pipeline

Procédure

  1. Installez les ressources de tâches apply-manifests et update-deployment à partir du référentiel pipelines-tutorial, qui contient une liste de tâches réutilisables pour les pipelines :

    $ oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/pipelines-1.9/01_pipeline/01_apply_manifest_task.yaml
    $ oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/pipelines-1.9/01_pipeline/02_update_deployment_task.yaml
    Copy to Clipboard Toggle word wrap
  2. Utilisez la commande tkn task list pour répertorier les tâches que vous avez créées :

    $ tkn task list
    Copy to Clipboard Toggle word wrap

    La sortie vérifie que les ressources de tâches apply-manifests et update-deployment ont été créées :

    NAME                DESCRIPTION   AGE
    apply-manifests                   1 minute ago
    update-deployment                 48 seconds ago
    Copy to Clipboard Toggle word wrap
  3. Utilisez la commande tkn clustertasks list pour dresser la liste des tâches de cluster supplémentaires installées par l'opérateur, telles que buildah et s2i-python:

    Note

    Pour utiliser la tâche buildah cluster dans un environnement restreint, vous devez vous assurer que le fichier Docker utilise un flux d'images interne comme image de base.

    $ tkn clustertasks list
    Copy to Clipboard Toggle word wrap

    La liste des ressources ClusterTask installées par l'opérateur s'affiche :

    NAME                       DESCRIPTION   AGE
    buildah                                  1 day ago
    git-clone                                1 day ago
    s2i-python                               1 day ago
    tkn                                      1 day ago
    Copy to Clipboard Toggle word wrap
Important

Dans Red Hat OpenShift Pipelines 1.10, la fonctionnalité de tâche de cluster est dépréciée et il est prévu de la supprimer dans une prochaine version.

3.5.4. Assemblage d'un pipeline

Un pipeline représente un flux CI/CD et est défini par les tâches à exécuter. Il est conçu pour être générique et réutilisable dans de multiples applications et environnements.

Un pipeline spécifie la manière dont les tâches interagissent entre elles et leur ordre d'exécution à l'aide des paramètres from et runAfter. Il utilise le champ workspaces pour spécifier un ou plusieurs volumes dont chaque tâche du pipeline a besoin pendant son exécution.

Dans cette section, vous allez créer un pipeline qui récupère le code source de l'application sur GitHub, puis le construit et le déploie sur OpenShift Container Platform.

Le pipeline effectue les tâches suivantes pour l'application back-end pipelines-vote-api et l'application front-end pipelines-vote-ui:

  • Clone le code source de l'application à partir du dépôt Git en se référant aux paramètres git-url et git-revision.
  • Construit l'image du conteneur à l'aide de la tâche de cluster buildah.
  • Pousse l'image dans le registre d'images OpenShift en se référant au paramètre image.
  • Déploie la nouvelle image sur OpenShift Container Platform en utilisant les tâches apply-manifests et update-deployment.

Procédure

  1. Copiez le contenu du fichier YAML de l'exemple de pipeline suivant et enregistrez-le :

    apiVersion: tekton.dev/v1beta1
    kind: Pipeline
    metadata:
      name: build-and-deploy
    spec:
      workspaces:
      - name: shared-workspace
      params:
      - 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:
      - 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
        taskRef:
          name: buildah
          kind: ClusterTask
        params:
        - name: IMAGE
          value: $(params.IMAGE)
        workspaces:
        - name: source
          workspace: shared-workspace
        runAfter:
        - fetch-repository
      - name: apply-manifests
        taskRef:
          name: apply-manifests
        workspaces:
        - name: source
          workspace: shared-workspace
        runAfter:
        - build-image
      - name: update-deployment
        taskRef:
          name: update-deployment
        params:
        - name: deployment
          value: $(params.deployment-name)
        - name: IMAGE
          value: $(params.IMAGE)
        runAfter:
        - apply-manifests
    Copy to Clipboard Toggle word wrap

    La définition du pipeline fait abstraction des spécificités du référentiel source Git et des registres d'images. Ces détails sont ajoutés à l'adresse params lorsqu'un pipeline est déclenché et exécuté.

  2. Créer le pipeline :

    oc create -f <pipeline-yaml-fichier-nom.yaml>
    Copy to Clipboard Toggle word wrap

    Vous pouvez également exécuter le fichier YAML directement à partir du dépôt Git :

    $ oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/pipelines-1.9/01_pipeline/04_pipeline.yaml
    Copy to Clipboard Toggle word wrap
  3. Utilisez la commande tkn pipeline list pour vérifier que le pipeline est ajouté à l'application :

    $ tkn pipeline list
    Copy to Clipboard Toggle word wrap

    La sortie vérifie que le pipeline build-and-deploy a été créé :

    NAME               AGE            LAST RUN   STARTED   DURATION   STATUS
    build-and-deploy   1 minute ago   ---        ---       ---        ---
    Copy to Clipboard Toggle word wrap

Pour exécuter OpenShift Pipelines dans un cluster déconnecté ou un cluster provisionné dans un environnement restreint, assurez-vous que l'opérateur d'échantillons est configuré pour un réseau restreint, ou qu'un administrateur de cluster a créé un cluster avec un registre en miroir.

La procédure suivante utilise l'exemple pipelines-tutorial pour créer un pipeline pour une application dans un environnement restreint à l'aide d'un cluster avec un registre miroir. Pour que l'exemple pipelines-tutorial fonctionne dans un environnement restreint, vous devez mettre en miroir les images de constructeur respectives du registre miroir pour l'interface frontale, pipelines-vote-ui; l'interface dorsale, pipelines-vote-api; et le registre cli.

Procédure

  1. Miroir de l'image du constructeur à partir du registre des miroirs pour l'interface frontale, pipelines-vote-ui.

    1. Vérifiez que la balise images requise n'est pas importée :

      $ oc describe imagestream python -n openshift
      Copy to Clipboard Toggle word wrap

      Exemple de sortie

      Name:			python
      Namespace:		openshift
      [...]
      
      3.8-ubi8 (latest)
        tagged from registry.redhat.io/ubi8/python-38:latest
          prefer registry pullthrough when referencing this tag
      
        Build and run Python 3.8 applications on UBI 8. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/s2i-python-container/blob/master/3.8/README.md.
        Tags: builder, python
        Supports: python:3.8, python
        Example Repo: https://github.com/sclorg/django-ex.git
      
      [...]
      Copy to Clipboard Toggle word wrap

    2. Mettez en miroir la balise d'image prise en charge dans le registre privé :

      $ oc image mirror registry.redhat.io/ubi8/python-38:latest <mirror-registry>:<port>/ubi8/python-38
      Copy to Clipboard Toggle word wrap
    3. Importer l'image :

      $ oc tag <mirror-registry>:<port>/ubi8/python-38 python:latest --scheduled -n openshift
      Copy to Clipboard Toggle word wrap

      Vous devez périodiquement réimporter l'image. L'option --scheduled permet de réimporter automatiquement l'image.

    4. Vérifier que les images avec le tag donné ont été importées :

      $ oc describe imagestream python -n openshift
      Copy to Clipboard Toggle word wrap

      Exemple de sortie

      Name:			python
      Namespace:		openshift
      [...]
      
      latest
        updates automatically from registry <mirror-registry>:<port>/ubi8/python-38
      
        * <mirror-registry>:<port>/ubi8/python-38@sha256:3ee3c2e70251e75bfeac25c0c33356add9cc4abcbc9c51d858f39e4dc29c5f58
      
      [...]
      Copy to Clipboard Toggle word wrap

  2. Miroir de l'image du constructeur à partir du registre des miroirs pour l'interface back-end, pipelines-vote-api.

    1. Vérifiez que la balise images requise n'est pas importée :

      $ oc describe imagestream golang -n openshift
      Copy to Clipboard Toggle word wrap

      Exemple de sortie

      Name:			golang
      Namespace:		openshift
      [...]
      
      1.14.7-ubi8 (latest)
        tagged from registry.redhat.io/ubi8/go-toolset:1.14.7
          prefer registry pullthrough when referencing this tag
      
        Build and run Go applications on UBI 8. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/golang-container/blob/master/README.md.
        Tags: builder, golang, go
        Supports: golang
        Example Repo: https://github.com/sclorg/golang-ex.git
      
      [...]
      Copy to Clipboard Toggle word wrap

    2. Mettez en miroir la balise d'image prise en charge dans le registre privé :

      $ oc image mirror registry.redhat.io/ubi8/go-toolset:1.14.7 <mirror-registry>:<port>/ubi8/go-toolset
      Copy to Clipboard Toggle word wrap
    3. Importer l'image :

      $ oc tag <mirror-registry>:<port>/ubi8/go-toolset golang:latest --scheduled -n openshift
      Copy to Clipboard Toggle word wrap

      Vous devez périodiquement réimporter l'image. L'option --scheduled permet de réimporter automatiquement l'image.

    4. Vérifier que les images avec le tag donné ont été importées :

      $ oc describe imagestream golang -n openshift
      Copy to Clipboard Toggle word wrap

      Exemple de sortie

      Name:			golang
      Namespace:		openshift
      [...]
      
      latest
        updates automatically from registry <mirror-registry>:<port>/ubi8/go-toolset
      
        * <mirror-registry>:<port>/ubi8/go-toolset@sha256:59a74d581df3a2bd63ab55f7ac106677694bf612a1fe9e7e3e1487f55c421b37
      
      [...]
      Copy to Clipboard Toggle word wrap

  3. Miroir de l'image du constructeur à partir du registre des miroirs pour le site cli.

    1. Vérifiez que la balise images requise n'est pas importée :

      $ oc describe imagestream cli -n openshift
      Copy to Clipboard Toggle word wrap

      Exemple de sortie

      Name:                   cli
      Namespace:              openshift
      [...]
      
      latest
        updates automatically from registry quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:65c68e8c22487375c4c6ce6f18ed5485915f2bf612e41fef6d41cbfcdb143551
      
        * quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:65c68e8c22487375c4c6ce6f18ed5485915f2bf612e41fef6d41cbfcdb143551
      
      [...]
      Copy to Clipboard Toggle word wrap

    2. Mettez en miroir la balise d'image prise en charge dans le registre privé :

      $ oc image mirror quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:65c68e8c22487375c4c6ce6f18ed5485915f2bf612e41fef6d41cbfcdb143551 <mirror-registry>:<port>/openshift-release-dev/ocp-v4.0-art-dev:latest
      Copy to Clipboard Toggle word wrap
    3. Importer l'image :

      $ oc tag <mirror-registry>:<port>/openshift-release-dev/ocp-v4.0-art-dev cli:latest --scheduled -n openshift
      Copy to Clipboard Toggle word wrap

      Vous devez périodiquement réimporter l'image. L'option --scheduled permet de réimporter automatiquement l'image.

    4. Vérifier que les images avec le tag donné ont été importées :

      $ oc describe imagestream cli -n openshift
      Copy to Clipboard Toggle word wrap

      Exemple de sortie

      Name:                   cli
      Namespace:              openshift
      [...]
      
      latest
        updates automatically from registry <mirror-registry>:<port>/openshift-release-dev/ocp-v4.0-art-dev
      
        * <mirror-registry>:<port>/openshift-release-dev/ocp-v4.0-art-dev@sha256:65c68e8c22487375c4c6ce6f18ed5485915f2bf612e41fef6d41cbfcdb143551
      
      [...]
      Copy to Clipboard Toggle word wrap

3.5.6. Gestion d'un pipeline

Une ressource PipelineRun démarre un pipeline et le lie aux ressources Git et image qui doivent être utilisées pour l'invocation spécifique. Elle crée et démarre automatiquement les ressources TaskRun pour chaque tâche du pipeline.

Procédure

  1. Démarrer le pipeline pour l'application back-end :

    $ tkn pipeline start build-and-deploy \
        -w name=shared-workspace,volumeClaimTemplateFile=https://raw.githubusercontent.com/openshift/pipelines-tutorial/pipelines-1.9/01_pipeline/03_persistent_volume_claim.yaml \
        -p deployment-name=pipelines-vote-api \
        -p git-url=https://github.com/openshift/pipelines-vote-api.git \
        -p IMAGE='image-registry.openshift-image-registry.svc:5000/$(context.pipelineRun.namespace)/pipelines-vote-api' \
        --use-param-defaults
    Copy to Clipboard Toggle word wrap

    La commande précédente utilise un modèle de demande de volume, qui crée une demande de volume persistante pour l'exécution du pipeline.

  2. Pour suivre la progression de l'exécution du pipeline, entrez la commande suivante: :

    $ tkn pipelinerun logs <pipelinerun_id> -f
    Copy to Clipboard Toggle word wrap

    Le <pipelinerun_id> de la commande ci-dessus est l'identifiant du site PipelineRun qui a été renvoyé dans la sortie de la commande précédente.

  3. Démarrer le pipeline pour l'application frontale :

    $ tkn pipeline start build-and-deploy \
        -w name=shared-workspace,volumeClaimTemplateFile=https://raw.githubusercontent.com/openshift/pipelines-tutorial/pipelines-1.9/01_pipeline/03_persistent_volume_claim.yaml \
        -p deployment-name=pipelines-vote-ui \
        -p git-url=https://github.com/openshift/pipelines-vote-ui.git \
        -p IMAGE='image-registry.openshift-image-registry.svc:5000/$(context.pipelineRun.namespace)/pipelines-vote-ui' \
        --use-param-defaults
    Copy to Clipboard Toggle word wrap
  4. Pour suivre la progression de l'exécution du pipeline, entrez la commande suivante :

    $ tkn pipelinerun logs <pipelinerun_id> -f
    Copy to Clipboard Toggle word wrap

    Le <pipelinerun_id> de la commande ci-dessus est l'identifiant du site PipelineRun qui a été renvoyé dans la sortie de la commande précédente.

  5. Après quelques minutes, utilisez la commande tkn pipelinerun list pour vérifier que le pipeline s'est déroulé correctement en listant toutes les exécutions du pipeline :

    $ tkn pipelinerun list
    Copy to Clipboard Toggle word wrap

    La sortie répertorie les exécutions du pipeline :

     NAME                         STARTED      DURATION     STATUS
     build-and-deploy-run-xy7rw   1 hour ago   2 minutes    Succeeded
     build-and-deploy-run-z2rz8   1 hour ago   19 minutes   Succeeded
    Copy to Clipboard Toggle word wrap
  6. Obtenir l'itinéraire de la demande :

    $ oc get route pipelines-vote-ui --template='http://{{.spec.host}}'
    Copy to Clipboard Toggle word wrap

    Notez la sortie de la commande précédente. Vous pouvez accéder à l'application en utilisant cette route.

  7. Pour réexécuter le dernier pipeline, en utilisant les ressources du pipeline et le compte de service du pipeline précédent, exécutez :

    $ tkn pipeline start build-and-deploy --last
    Copy to Clipboard Toggle word wrap

3.5.7. Ajouter des déclencheurs à un pipeline

Les déclencheurs permettent aux pipelines de répondre aux événements GitHub externes, tels que les événements "push" et les "pull requests". Après avoir assemblé et démarré un pipeline pour l'application, ajoutez les ressources TriggerBinding, TriggerTemplate, Trigger, et EventListener pour capturer les événements GitHub.

Procédure

  1. Copiez le contenu de l'exemple de fichier YAML TriggerBinding suivant et enregistrez-le :

    apiVersion: triggers.tekton.dev/v1beta1
    kind: TriggerBinding
    metadata:
      name: vote-app
    spec:
      params:
      - name: git-repo-url
        value: $(body.repository.url)
      - name: git-repo-name
        value: $(body.repository.name)
      - name: git-revision
        value: $(body.head_commit.id)
    Copy to Clipboard Toggle word wrap
  2. Créer la ressource TriggerBinding:

    oc create -f <triggerbinding-yaml-file-name.yaml>
    Copy to Clipboard Toggle word wrap

    Vous pouvez également créer la ressource TriggerBinding directement à partir du dépôt Git pipelines-tutorial:

    $ oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/pipelines-1.9/03_triggers/01_binding.yaml
    Copy to Clipboard Toggle word wrap
  3. Copiez le contenu de l'exemple de fichier YAML TriggerTemplate suivant et enregistrez-le :

    apiVersion: triggers.tekton.dev/v1beta1
    kind: TriggerTemplate
    metadata:
      name: vote-app
    spec:
      params:
      - 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:
      - apiVersion: tekton.dev/v1beta1
        kind: PipelineRun
        metadata:
          generateName: build-deploy-$(tt.params.git-repo-name)-
        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/$(context.pipelineRun.namespace)/$(tt.params.git-repo-name)
          workspaces:
          - name: shared-workspace
            volumeClaimTemplate:
              spec:
                accessModes:
                  - ReadWriteOnce
                resources:
                  requests:
                    storage: 500Mi
    Copy to Clipboard Toggle word wrap

    Le modèle spécifie un modèle de réclamation de volume pour créer une réclamation de volume persistante afin de définir le volume de stockage de l'espace de travail. Par conséquent, il n'est pas nécessaire de créer une demande de volume persistant pour assurer le stockage des données.

  4. Créer la ressource TriggerTemplate:

    oc create -f <triggertemplate-nom-de-fichier-yaml.yaml>
    Copy to Clipboard Toggle word wrap

    Vous pouvez également créer la ressource TriggerTemplate directement à partir du dépôt Git pipelines-tutorial:

    $ oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/pipelines-1.9/03_triggers/02_template.yaml
    Copy to Clipboard Toggle word wrap
  5. Copiez le contenu de l'exemple de fichier YAML Trigger suivant et enregistrez-le :

    apiVersion: triggers.tekton.dev/v1beta1
    kind: Trigger
    metadata:
      name: vote-trigger
    spec:
      serviceAccountName: pipeline
      bindings:
        - ref: vote-app
      template:
        ref: vote-app
    Copy to Clipboard Toggle word wrap
  6. Créer la ressource Trigger:

    oc create -f <trigger-yaml-file-name.yaml>
    Copy to Clipboard Toggle word wrap

    Vous pouvez également créer la ressource Trigger directement à partir du dépôt Git pipelines-tutorial:

    $ oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/pipelines-1.9/03_triggers/03_trigger.yaml
    Copy to Clipboard Toggle word wrap
  7. Copiez le contenu de l'exemple de fichier YAML EventListener suivant et enregistrez-le :

    apiVersion: triggers.tekton.dev/v1beta1
    kind: EventListener
    metadata:
      name: vote-app
    spec:
      serviceAccountName: pipeline
      triggers:
        - triggerRef: vote-trigger
    Copy to Clipboard Toggle word wrap

    Si vous n'avez pas défini de ressource personnalisée pour le déclencheur, ajoutez la spécification de liaison et de modèle au fichier YAML EventListener, au lieu de vous référer au nom du déclencheur :

    apiVersion: triggers.tekton.dev/v1beta1
    kind: EventListener
    metadata:
      name: vote-app
    spec:
      serviceAccountName: pipeline
      triggers:
      - bindings:
        - ref: vote-app
        template:
          ref: vote-app
    Copy to Clipboard Toggle word wrap
  8. Créez la ressource EventListener en suivant les étapes suivantes :

    • Pour créer une ressource EventListener à l'aide d'une connexion HTTPS sécurisée :

      1. Ajouter une étiquette pour activer la connexion HTTPS sécurisée à la ressource Eventlistener:

        oc label namespace <ns-name> operator.tekton.dev/enable-annotation=enabled
        Copy to Clipboard Toggle word wrap
      2. Créer la ressource EventListener:

        oc create -f <eventlistener-yaml-file-name.yaml>
        Copy to Clipboard Toggle word wrap

        Vous pouvez également créer la ressource EvenListener directement à partir du dépôt Git pipelines-tutorial:

        $ oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/pipelines-1.9/03_triggers/04_event_listener.yaml
        Copy to Clipboard Toggle word wrap
      3. Créer une route avec la terminaison TLS re-encrypt :

        $ oc create route reencrypt --service=<svc-name> --cert=tls.crt --key=tls.key --ca-cert=ca.crt --hostname=<hostname>
        Copy to Clipboard Toggle word wrap

        Vous pouvez également créer un fichier YAML de terminaison TLS réencryptée pour créer un itinéraire sécurisé.

        Exemple Ré-encrypter le YAML de terminaison TLS de la route sécurisée

        apiVersion: route.openshift.io/v1
        kind: Route
        metadata:
          name: route-passthrough-secured 
        1
        
        spec:
          host: <hostname>
          to:
            kind: Service
            name: frontend 
        2
        
          tls:
            termination: reencrypt         
        3
        
            key: [as in edge termination]
            certificate: [as in edge termination]
            caCertificate: [as in edge termination]
            destinationCACertificate: |-   
        4
        
              -----BEGIN CERTIFICATE-----
              [...]
              -----END CERTIFICATE-----
        Copy to Clipboard Toggle word wrap

        1 2
        Le nom de l'objet, qui est limité à 63 caractères.
        3
        Le champ termination est défini sur reencrypt. C'est le seul champ obligatoire de tls.
        4
        Nécessaire pour le rechiffrement. destinationCACertificate spécifie un certificat d'autorité de certification pour valider le certificat du point de terminaison, sécurisant ainsi la connexion entre le routeur et les modules de destination. Si le service utilise un certificat de signature de service, ou si l'administrateur a spécifié un certificat d'autorité de certification par défaut pour le routeur et que le service dispose d'un certificat signé par cette autorité de certification, ce champ peut être omis.

        Voir oc create route reencrypt --help pour plus d'options.

    • Pour créer une ressource EventListener à l'aide d'une connexion HTTP non sécurisée :

      1. Créer la ressource EventListener.
      2. Exposer le service EventListener en tant que route OpenShift Container Platform pour le rendre accessible au public :

        $ oc expose svc el-vote-app
        Copy to Clipboard Toggle word wrap
Note

Vous pouvez sauter cette section si vous souhaitez créer un pipeline CI/CD de base. Cependant, si votre stratégie de déploiement implique plusieurs espaces de noms, vous pouvez configurer les auditeurs d'événements pour qu'ils desservent plusieurs espaces de noms.

Pour améliorer la réutilisation des objets EvenListener, les administrateurs de clusters peuvent les configurer et les déployer en tant qu'auditeurs d'événements multi-locataires desservant plusieurs espaces de noms.

Procédure

  1. Configurer l'autorisation de récupération à l'échelle du cluster pour l'écouteur d'événements.

    1. Définissez un nom de compte de service à utiliser dans les objets ClusterRoleBinding et EventListener. Par exemple, el-sa.

      Exemple ServiceAccount.yaml

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: el-sa
      ---
      Copy to Clipboard Toggle word wrap

    2. Dans la section rules du fichier ClusterRole.yaml, définissez les autorisations appropriées pour que chaque déploiement d'écouteur d'événements fonctionne à l'échelle du cluster.

      Exemple ClusterRole.yaml

      kind: ClusterRole
      apiVersion: rbac.authorization.k8s.io/v1
      metadata:
        name: el-sel-clusterrole
      rules:
      - apiGroups: ["triggers.tekton.dev"]
        resources: ["eventlisteners", "clustertriggerbindings", "clusterinterceptors", "triggerbindings", "triggertemplates", "triggers"]
        verbs: ["get", "list", "watch"]
      - apiGroups: [""]
        resources: ["configmaps", "secrets"]
        verbs: ["get", "list", "watch"]
      - apiGroups: [""]
        resources: ["serviceaccounts"]
        verbs: ["impersonate"]
      ...
      Copy to Clipboard Toggle word wrap

    3. Configurez la liaison des rôles de cluster avec le nom de compte de service et le nom de rôle de cluster appropriés.

      Exemple ClusterRoleBinding.yaml

      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: el-mul-clusterrolebinding
      subjects:
      - kind: ServiceAccount
        name: el-sa
        namespace: default
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: el-sel-clusterrole
      ...
      Copy to Clipboard Toggle word wrap

  2. Dans le paramètre spec de l'écouteur d'événements, ajoutez le nom du compte de service, par exemple el-sa. Remplissez le paramètre namespaceSelector avec les noms des espaces de noms que l'écouteur d'événements est censé servir.

    Exemple EventListener.yaml

    apiVersion: triggers.tekton.dev/v1beta1
    kind: EventListener
    metadata:
      name: namespace-selector-listener
    spec:
      serviceAccountName: el-sa
      namespaceSelector:
        matchNames:
        - default
        - foo
    ...
    Copy to Clipboard Toggle word wrap

  3. Créez un compte de service avec les autorisations nécessaires, par exemple foo-trigger-sa. Utilisez-le pour lier les rôles des déclencheurs.

    Exemple ServiceAccount.yaml

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: foo-trigger-sa
      namespace: foo
    ...
    Copy to Clipboard Toggle word wrap

    Exemple RoleBinding.yaml

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: triggercr-rolebinding
      namespace: foo
    subjects:
    - kind: ServiceAccount
      name: foo-trigger-sa
      namespace: foo
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: tekton-triggers-eventlistener-roles
    ...
    Copy to Clipboard Toggle word wrap

  4. Créez un déclencheur avec le modèle de déclencheur, la liaison de déclencheur et le nom du compte de service appropriés.

    Exemple Trigger.yaml

    apiVersion: triggers.tekton.dev/v1beta1
    kind: Trigger
    metadata:
      name: trigger
      namespace: foo
    spec:
      serviceAccountName: foo-trigger-sa
      interceptors:
        - ref:
            name: "github"
          params:
            - name: "secretRef"
              value:
                secretName: github-secret
                secretKey: secretToken
            - name: "eventTypes"
              value: ["push"]
      bindings:
        - ref: vote-app
      template:
        ref: vote-app
    ...
    Copy to Clipboard Toggle word wrap

3.5.9. Création de webhooks

Webhooks sont des messages HTTP POST qui sont reçus par les auditeurs d'événements chaque fois qu'un événement configuré se produit dans votre référentiel. La charge utile de l'événement est ensuite mise en correspondance avec des liaisons de déclenchement et traitée par des modèles de déclenchement. Les modèles de déclenchement finissent par lancer une ou plusieurs exécutions de pipeline, conduisant à la création et au déploiement de ressources Kubernetes.

Dans cette section, vous allez configurer une URL webhook sur vos dépôts Git forkés pipelines-vote-ui et pipelines-vote-api. Cette URL pointe vers la route de service EventListener accessible au public.

Note

L'ajout de webhooks nécessite des droits d'administration sur le référentiel. Si vous n'avez pas d'accès administratif à votre référentiel, contactez votre administrateur système pour ajouter des webhooks.

Procédure

  1. Obtenir l'URL du webhook :

    • Pour une connexion HTTPS sécurisée :

      $ echo "URL: $(oc  get route el-vote-app --template='https://{{.spec.host}}')"
      Copy to Clipboard Toggle word wrap
    • Pour une connexion HTTP (non sécurisée) :

      $ echo "URL: $(oc  get route el-vote-app --template='http://{{.spec.host}}')"
      Copy to Clipboard Toggle word wrap

      Notez l'URL obtenue dans le résultat.

  2. Configurer manuellement les webhooks sur le référentiel frontal :

    1. Ouvrez le dépôt Git frontal pipelines-vote-ui dans votre navigateur.
    2. Cliquez sur Settings Webhooks Add Webhook
    3. Sur la page Webhooks/Add Webhook:

      1. Entrez l'URL du webhook de l'étape 1 dans le champ Payload URL
      2. Sélectionnez application/json pour le Content type
      3. Spécifiez le secret dans le champ Secret
      4. Assurez-vous que le site Just the push event est sélectionné
      5. Sélectionner Active
      6. Cliquez sur Add Webhook
  3. Répétez l'étape 2 pour le référentiel back-end pipelines-vote-api.

3.5.10. Déclenchement de l'exécution d'un pipeline

Chaque fois qu'un événement push se produit dans le dépôt Git, le webhook configuré envoie une charge utile d'événement à la route de service EventListener exposée publiquement. Le service EventListener de l'application traite la charge utile et la transmet aux paires de ressources TriggerBinding et TriggerTemplate correspondantes. La ressource TriggerBinding extrait les paramètres, et la ressource TriggerTemplate utilise ces paramètres et spécifie la manière dont les ressources doivent être créées. Cela peut entraîner la reconstruction et le redéploiement de l'application.

Dans cette section, vous poussez un commit vide dans le dépôt frontal pipelines-vote-ui, ce qui déclenche l'exécution du pipeline.

Procédure

  1. Depuis le terminal, clonez votre dépôt Git forké pipelines-vote-ui:

    $ git clone git@github.com:<your GitHub ID>/pipelines-vote-ui.git -b pipelines-1.9
    Copy to Clipboard Toggle word wrap
  2. Pousser un commit vide :

    $ git commit -m "empty-commit" --allow-empty && git push origin pipelines-1.9
    Copy to Clipboard Toggle word wrap
  3. Vérifier si l'exécution du pipeline a été déclenchée :

    $ tkn pipelinerun list
    Copy to Clipboard Toggle word wrap

    Remarquez qu'une nouvelle canalisation a été mise en place.

En tant qu'administrateur de cluster, pour rassembler les métriques des auditeurs d'événements pour le service Triggers dans un projet défini par l'utilisateur et les afficher dans la console Web de OpenShift Container Platform, vous pouvez créer un moniteur de service pour chaque auditeur d'événements. Lors de la réception d'une requête HTTP, les auditeurs d'événements du service Triggers renvoient trois métriques -eventlistener_http_duration_seconds, eventlistener_event_count et eventlistener_triggered_resources.

Conditions préalables

  • Vous vous êtes connecté à la console web de OpenShift Container Platform.
  • Vous avez installé l'opérateur Red Hat OpenShift Pipelines.
  • Vous avez activé la surveillance pour les projets définis par l'utilisateur.

Procédure

  1. Pour chaque auditeur d'événements, créez un moniteur de service. Par exemple, pour afficher les mesures de l'auditeur d'événements github-listener dans l'espace de noms test, créez le moniteur de services suivant :

    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      labels:
        app.kubernetes.io/managed-by: EventListener
        app.kubernetes.io/part-of: Triggers
        eventlistener: github-listener
      annotations:
        networkoperator.openshift.io/ignore-errors: ""
      name: el-monitor
      namespace: test
    spec:
      endpoints:
        - interval: 10s
          port: http-metrics
      jobLabel: name
      namespaceSelector:
        matchNames:
          - test
      selector:
        matchLabels:
          app.kubernetes.io/managed-by: EventListener
          app.kubernetes.io/part-of: Triggers
          eventlistener: github-listener
    ...
    Copy to Clipboard Toggle word wrap
  2. Testez le moniteur de service en envoyant une requête à l'écouteur d'événements. Par exemple, envoyez un commit vide :

    $ git commit -m "empty-commit" --allow-empty && git push origin main
    Copy to Clipboard Toggle word wrap
  3. Sur la console web d'OpenShift Container Platform, naviguez vers Administrator Observe Metrics.
  4. Pour afficher une mesure, effectuez une recherche à partir de son nom. Par exemple, pour afficher les détails de la métrique eventlistener_http_resources pour l'auditeur d'événements github-listener, effectuez une recherche à l'aide du mot-clé eventlistener_http_resources.

Avec GitHub Interceptor, vous pouvez créer une logique qui valide et filtre les webhooks de GitHub. Par exemple, vous pouvez valider l'origine du webhook et filtrer les événements entrants en fonction de critères spécifiques. Lorsque vous utilisez GitHub Interceptor pour filtrer les données d'événements, vous pouvez spécifier les types d'événements qu'Interceptor peut accepter dans un champ. Dans Red Hat OpenShift Pipelines, vous pouvez utiliser les capacités suivantes de GitHub Interceptor :

  • Filtrer les événements de demande d'extraction en fonction des fichiers qui ont été modifiés
  • Valider les pull requests en fonction des propriétaires GitHub configurés

3.5.12.1. Filtrer les pull requests avec GitHub Interceptor

Vous pouvez filtrer les événements GitHub en fonction des fichiers qui ont été modifiés pour les événements push et pull. Cela vous permet d'exécuter un pipeline uniquement pour les changements pertinents dans votre dépôt Git. GitHub Interceptor ajoute une liste délimitée par des virgules de tous les fichiers qui ont été modifiés et utilise CEL Interceptor pour filtrer les événements entrants sur la base des fichiers modifiés. La liste des fichiers modifiés est ajoutée à la propriété changed_files de la charge utile de l'événement dans le champ de niveau supérieur extensions.

Prérequis

  • Vous avez installé l'opérateur Red Hat OpenShift Pipelines.

Procédure

  1. Effectuez l'une des étapes suivantes :

    • Pour un dépôt GitHub public, définissez la valeur du paramètre addChangedFiles à true dans le fichier de configuration YAML illustré ci-dessous :

      apiVersion: triggers.tekton.dev/v1beta1
      kind: EventListener
      metadata:
        name: github-add-changed-files-pr-listener
      spec:
        triggers:
          - name: github-listener
            interceptors:
              - ref:
                  name: "github"
                  kind: ClusterInterceptor
                  apiVersion: triggers.tekton.dev
                params:
                - name: "secretRef"
                  value:
                    secretName: github-secret
                    secretKey: secretToken
                - name: "eventTypes"
                  value: ["pull_request", "push"]
                - name: "addChangedFiles"
                  value:
                    enabled: true
              - ref:
                  name: cel
                params:
                - name: filter
                  value: extensions.changed_files.matches('controllers/')
      ...
      Copy to Clipboard Toggle word wrap
    • Pour un dépôt GitHub privé, définissez la valeur du paramètre addChangedFiles à true et fournissez les détails du jeton d'accès, secretName et secretKey dans le fichier de configuration YAML illustré ci-dessous :

      apiVersion: triggers.tekton.dev/v1beta1
      kind: EventListener
      metadata:
        name: github-add-changed-files-pr-listener
      spec:
        triggers:
          - name: github-listener
            interceptors:
              - ref:
                  name: "github"
                  kind: ClusterInterceptor
                  apiVersion: triggers.tekton.dev
                params:
                - name: "secretRef"
                  value:
                    secretName: github-secret
                    secretKey: secretToken
                - name: "eventTypes"
                  value: ["pull_request", "push"]
                - name: "addChangedFiles"
                  value:
                    enabled: true
                    personalAccessToken:
                      secretName: github-pat
                      secretKey: token
              - ref:
                  name: cel
                params:
                - name: filter
                  value: extensions.changed_files.matches('controllers/')
      ...
      Copy to Clipboard Toggle word wrap
  2. Sauvegarder le fichier de configuration.

3.5.12.2. Valider les pull requests avec GitHub Interceptors

Vous pouvez utiliser GitHub Interceptor pour valider le traitement des pull requests en fonction des propriétaires GitHub configurés pour un dépôt. Cette validation permet d'éviter l'exécution inutile d'un objet PipelineRun ou TaskRun. GitHub Interceptor ne traite une demande d'extraction que si le nom d'utilisateur est répertorié comme propriétaire ou si un commentaire configurable est émis par un propriétaire du dépôt. Par exemple, lorsque vous commentez /ok-to-test sur une demande d'extraction en tant que propriétaire, un objet PipelineRun ou TaskRun est déclenché.

Note

Les propriétaires sont configurés dans un fichier OWNERS à la racine du référentiel.

Conditions préalables

  • Vous avez installé l'opérateur Red Hat OpenShift Pipelines.

Procédure

  1. Créer une valeur de chaîne secrète.
  2. Configurez le webhook GitHub avec cette valeur.
  3. Créez un secret Kubernetes nommé secretRef qui contient votre valeur secrète.
  4. Transmettez le secret Kubernetes comme référence à votre GitHub Interceptor.
  5. Créez un fichier owners et ajoutez la liste des approbateurs dans la section approvers.
  6. Effectuez l'une des étapes suivantes :

    • Pour un dépôt GitHub public, définissez la valeur du paramètre githubOwners à true dans le fichier de configuration YAML illustré ci-dessous :

      apiVersion: triggers.tekton.dev/v1beta1
      kind: EventListener
      metadata:
        name: github-owners-listener
      spec:
        triggers:
          - name: github-listener
            interceptors:
              - ref:
                  name: "github"
                  kind: ClusterInterceptor
                  apiVersion: triggers.tekton.dev
                params:
                  - name: "secretRef"
                    value:
                      secretName: github-secret
                      secretKey: secretToken
                  - name: "eventTypes"
                    value: ["pull_request", "issue_comment"]
                  - name: "githubOwners"
                    value:
                      enabled: true
                      checkType: none
      ...
      Copy to Clipboard Toggle word wrap
    • Pour un dépôt GitHub privé, définissez la valeur du paramètre githubOwners à true et fournissez les détails du jeton d'accès, secretName et secretKey dans le fichier de configuration YAML illustré ci-dessous :

      apiVersion: triggers.tekton.dev/v1beta1
      kind: EventListener
      metadata:
        name: github-owners-listener
      spec:
        triggers:
          - name: github-listener
            interceptors:
              - ref:
                  name: "github"
                  kind: ClusterInterceptor
                  apiVersion: triggers.tekton.dev
                params:
                  - name: "secretRef"
                    value:
                      secretName: github-secret
                      secretKey: secretToken
                  - name: "eventTypes"
                    value: ["pull_request", "issue_comment"]
                  - name: "githubOwners"
                    value:
                      enabled: true
                      personalAccessToken:
                        secretName: github-token
                        secretKey: secretToken
                      checkType: all
      ...
      Copy to Clipboard Toggle word wrap
      Note

      Le paramètre checkType est utilisé pour spécifier les propriétaires GitHub qui ont besoin d'une authentification. Vous pouvez lui donner la valeur orgMembers, repoMembers, ou all.

  7. Sauvegarder le fichier de configuration.
Retour au début
Red Hat logoGithubredditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance. Découvrez nos récentes mises à jour.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez le Blog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

Theme

© 2025 Red Hat