CI/CD


Plate-forme de conteneurs OpenShift 4.12

Contient des informations sur les builds, les pipelines et GitOps pour OpenShift Container Platform

Red Hat OpenShift Documentation Team

Résumé

CI/CD pour la plateforme de conteneurs OpenShift

OpenShift Container Platform est une plateforme Kubernetes prête à l'emploi pour les développeurs, qui permet aux organisations d'automatiser le processus de livraison d'applications grâce aux pratiques DevOps, telles que l'intégration continue (CI) et la livraison continue (CD). Pour répondre aux besoins de votre organisation, OpenShift Container Platform propose les solutions CI/CD suivantes :

  • Builds OpenShift
  • OpenShift Pipelines
  • OpenShift GitOps

1.1. Builds OpenShift

Avec OpenShift Builds, vous pouvez créer des applications cloud-natives en utilisant un processus de construction déclaratif. Vous pouvez définir le processus de construction dans un fichier YAML que vous utilisez pour créer un objet BuildConfig. Cette définition inclut des attributs tels que les déclencheurs de construction, les paramètres d'entrée et le code source. Lors du déploiement, l'objet BuildConfig construit généralement une image exécutable et l'envoie dans un registre d'images de conteneurs.

OpenShift Builds fournit le support extensible suivant pour les stratégies de construction :

  • Construction Docker
  • Construction de la source à l'image (S2I)
  • Construction sur mesure

Pour plus d'informations, voir Comprendre les constructions d'images

1.2. OpenShift Pipelines

OpenShift Pipelines fournit un cadre CI/CD natif Kubernetes pour concevoir et exécuter chaque étape du pipeline CI/CD dans son propre conteneur. Il peut évoluer de manière indépendante pour répondre aux pipelines à la demande avec des résultats prévisibles.

Pour plus d'informations, voir Comprendre les pipelines OpenShift

1.3. OpenShift GitOps

OpenShift GitOps est un opérateur qui utilise Argo CD comme moteur déclaratif de GitOps. Il permet de mettre en place des flux de travail GitOps sur des infrastructures OpenShift et Kubernetes multicluster. En utilisant OpenShift GitOps, les administrateurs peuvent configurer et déployer de manière cohérente l'infrastructure et les applications basées sur Kubernetes à travers les clusters et les cycles de développement.

Pour plus d'informations, voir Comprendre OpenShift GitOps

1.4. Jenkins

Jenkins automatise le processus de construction, de test et de déploiement des applications et des projets. OpenShift Developer Tools fournit une image Jenkins qui s'intègre directement à OpenShift Container Platform. Jenkins peut être déployé sur OpenShift en utilisant les modèles Samples Operator ou la carte certifiée Helm.

Chapitre 2. Constructions

2.1. Comprendre les constructions d'images

2.1.1. Constructions

Une compilation est le processus de transformation des paramètres d'entrée en un objet résultant. Le plus souvent, le processus est utilisé pour transformer les paramètres d'entrée ou le code source en une image exécutable. Un objet BuildConfig est la définition de l'ensemble du processus de construction.

OpenShift Container Platform utilise Kubernetes en créant des conteneurs à partir d'images de construction et en les poussant vers un registre d'images de conteneurs.

Les objets de construction partagent des caractéristiques communes, notamment les entrées pour une construction, la nécessité d'achever un processus de construction, l'enregistrement du processus de construction, la publication des ressources des constructions réussies et la publication de l'état final de la construction. Les constructions tirent parti des restrictions de ressources, en spécifiant des limites sur les ressources telles que l'utilisation de l'unité centrale, l'utilisation de la mémoire et le temps d'exécution de la construction ou du pod.

Le système de construction d'OpenShift Container Platform fournit un support extensible pour les stratégies de construction qui sont basées sur des types sélectionnables spécifiés dans l'API de construction. Il existe trois stratégies de construction principales :

  • Construction Docker
  • Construction de la source à l'image (S2I)
  • Construction sur mesure

Par défaut, les constructions docker et les constructions S2I sont prises en charge.

L'objet résultant d'une compilation dépend du constructeur utilisé pour la créer. Pour les constructions docker et S2I, les objets résultants sont des images exécutables. Pour les constructions personnalisées, les objets résultants sont ce que l'auteur de l'image du constructeur a spécifié.

En outre, la stratégie de construction de pipeline peut être utilisée pour mettre en œuvre des flux de travail sophistiqués :

  • Intégration continue
  • Déploiement continu
2.1.1.1. Construction Docker

OpenShift Container Platform utilise Buildah pour construire une image de conteneur à partir d'un fichier Docker. Pour plus d'informations sur la construction d'images de conteneurs avec des Dockerfiles, voir la documentation de référence Dockerfile.

Astuce

Si vous définissez les arguments de construction de Docker en utilisant le tableau buildArgs, voir Comprendre comment ARG et FROM interagissent dans la documentation de référence de Dockerfile.

2.1.1.2. Construction de la source à l'image

Source-to-image (S2I) est un outil permettant de créer des images de conteneurs reproductibles. Il produit des images prêtes à l'emploi en injectant la source d'une application dans une image de conteneur et en assemblant une nouvelle image. La nouvelle image incorpore l'image de base, le constructeur et la source construite et est prête à être utilisée avec la commande buildah run. S2I prend en charge les constructions incrémentielles, qui réutilisent les dépendances téléchargées précédemment, les artefacts construits précédemment, etc.

2.1.1.3. Construction sur mesure

La stratégie de construction personnalisée permet aux développeurs de définir une image de constructeur spécifique responsable de l'ensemble du processus de construction. L'utilisation de votre propre image de constructeur vous permet de personnaliser votre processus de construction.

Une image de construction personnalisée est une image conteneur simple incorporant la logique du processus de construction, par exemple pour construire des RPM ou des images de base.

Les builds personnalisés sont exécutés avec un niveau de privilège élevé et ne sont pas accessibles aux utilisateurs par défaut. Seuls les utilisateurs à qui l'on peut faire confiance en leur accordant des autorisations d'administration de cluster doivent avoir accès à l'exécution des builds personnalisés.

2.1.1.4. Construction d'un pipeline
Important

La stratégie de construction Pipeline est obsolète dans OpenShift Container Platform 4. Des fonctionnalités équivalentes et améliorées sont présentes dans les Pipelines d'OpenShift Container Platform basés sur Tekton.

Les images Jenkins sur OpenShift Container Platform sont entièrement prises en charge et les utilisateurs doivent suivre la documentation utilisateur de Jenkins pour définir leur jenkinsfile dans un travail ou le stocker dans un système de gestion du contrôle de la source.

La stratégie de construction Pipeline permet aux développeurs de définir un pipeline Jenkins qui sera utilisé par le plugin Jenkins pipeline. Le build peut être démarré, surveillé et géré par OpenShift Container Platform de la même manière que n'importe quel autre type de build.

Les flux de travail du pipeline sont définis dans un site jenkinsfile, soit directement intégré dans la configuration de construction, soit fourni dans un dépôt Git et référencé par la configuration de construction.

2.2. Comprendre les configurations de construction

Les sections suivantes définissent le concept de compilation, la configuration de la compilation et décrivent les principales stratégies de compilation disponibles.

2.2.1. BuildConfigs

Une configuration de construction décrit une définition de construction unique et un ensemble de déclencheurs pour la création d'une nouvelle construction. Les configurations de construction sont définies par un BuildConfig, qui est un objet REST pouvant être utilisé dans un POST au serveur API pour créer une nouvelle instance.

Une configuration de construction, ou BuildConfig, est caractérisée par une stratégie de construction et une ou plusieurs sources. La stratégie détermine le processus, tandis que les sources fournissent les données d'entrée.

Selon la façon dont vous choisissez de créer votre application avec OpenShift Container Platform, un BuildConfig est généralement généré automatiquement pour vous si vous utilisez la console web ou le CLI, et il peut être modifié à tout moment. Comprendre les éléments qui composent un BuildConfig et leurs options disponibles peut vous aider si vous choisissez de modifier manuellement votre configuration ultérieurement.

L'exemple suivant BuildConfig entraîne une nouvelle compilation chaque fois qu'une balise d'image de conteneur ou le code source est modifié :

BuildConfig définition de l'objet

kind: BuildConfig
apiVersion: build.openshift.io/v1
metadata:
  name: "ruby-sample-build" 
1

spec:
  runPolicy: "Serial" 
2

  triggers: 
3

    -
      type: "GitHub"
      github:
        secret: "secret101"
    - type: "Generic"
      generic:
        secret: "secret101"
    -
      type: "ImageChange"
  source: 
4

    git:
      uri: "https://github.com/openshift/ruby-hello-world"
  strategy: 
5

    sourceStrategy:
      from:
        kind: "ImageStreamTag"
        name: "ruby-20-centos7:latest"
  output: 
6

    to:
      kind: "ImageStreamTag"
      name: "origin-ruby-sample:latest"
  postCommit: 
7

      script: "bundle exec rake test"
Copy to Clipboard Toggle word wrap

1
Cette spécification crée un nouveau site BuildConfig nommé ruby-sample-build.
2
Le champ runPolicy indique si les constructions créées à partir de cette configuration de construction peuvent être exécutées simultanément. La valeur par défaut est Serial, ce qui signifie que les nouvelles constructions sont exécutées séquentiellement et non simultanément.
3
Vous pouvez spécifier une liste de déclencheurs qui entraînent la création d'une nouvelle version.
4
La section source définit la source de la construction. Le type de source détermine la source primaire d'entrée, et peut être soit Git, pour pointer vers un dépôt de code, Dockerfile, pour construire à partir d'un fichier Docker en ligne, ou Binary, pour accepter des charges utiles binaires. Il est possible d'avoir plusieurs sources à la fois. Voir la documentation de chaque type de source pour plus de détails.
5
La section strategy décrit la stratégie de construction utilisée pour exécuter la construction. Vous pouvez spécifier une stratégie Source, Docker, ou Custom ici. Cet exemple utilise l'image du conteneur ruby-20-centos7 que Source-to-image (S2I) utilise pour la construction de l'application.
6
Une fois que l'image du conteneur est construite avec succès, elle est poussée dans le référentiel décrit dans la section output.
7
La section postCommit définit un crochet de construction optionnel.

2.3. Création d'intrants de construction

Les sections suivantes présentent une vue d'ensemble des entrées de compilation, des instructions sur la manière d'utiliser les entrées pour fournir du contenu source aux compilations, et sur la manière d'utiliser les environnements de compilation et de créer des secrets.

2.3.1. Construire des intrants

Une entrée de construction fournit un contenu source sur lequel les constructions peuvent opérer. Vous pouvez utiliser les entrées de construction suivantes pour fournir des sources dans OpenShift Container Platform, listées par ordre de priorité :

  • Définitions de fichiers Docker en ligne
  • Contenu extrait d'images existantes
  • Dépôts Git
  • Entrées binaires (locales)
  • Secrets d'entrée
  • Artéfacts externes

Vous pouvez combiner plusieurs entrées dans une seule compilation. Cependant, comme le fichier Dockerfile en ligne est prioritaire, il peut écraser tout autre fichier nommé Dockerfile fourni par une autre entrée. Les entrées binaires (locales) et les dépôts Git sont des entrées mutuellement exclusives.

Vous pouvez utiliser les secrets d'entrée lorsque vous ne souhaitez pas que certaines ressources ou informations d'identification utilisées pendant la construction soient disponibles dans l'image finale de l'application produite par la construction, ou lorsque vous souhaitez consommer une valeur définie dans une ressource secrète. Les artefacts externes peuvent être utilisés pour récupérer des fichiers supplémentaires qui ne sont pas disponibles dans l'un des autres types d'entrée de compilation.

Lorsque vous exécutez une compilation :

  1. Un répertoire de travail est construit et tout le contenu d'entrée est placé dans le répertoire de travail. Par exemple, le dépôt Git d'entrée est cloné dans le répertoire de travail, et les fichiers spécifiés dans les images d'entrée sont copiés dans le répertoire de travail en utilisant le chemin cible.
  2. Le processus de construction change les répertoires en contextDir, s'il y en a un de défini.
  3. Le fichier Docker en ligne, s'il existe, est écrit dans le répertoire courant.
  4. Le contenu du répertoire actuel est fourni au processus de construction pour référence par le fichier Docker, la logique de construction personnalisée ou le script assemble. Cela signifie que tout contenu d'entrée qui réside en dehors de contextDir est ignoré par le processus de construction.

L'exemple suivant de définition d'une source comprend plusieurs types d'entrée et une explication de la manière dont ils sont combinés. Pour plus de détails sur la définition de chaque type d'entrée, voir les sections spécifiques à chaque type d'entrée.

source:
  git:
    uri: https://github.com/openshift/ruby-hello-world.git 
1

    ref: "master"
  images:
  - from:
      kind: ImageStreamTag
      name: myinputimage:latest
      namespace: mynamespace
    paths:
    - destinationDir: app/dir/injected/dir 
2

      sourcePath: /usr/lib/somefile.jar
  contextDir: "app/dir" 
3

  dockerfile: "FROM centos:7\nRUN yum install -y httpd" 
4
Copy to Clipboard Toggle word wrap
1
Le référentiel à cloner dans le répertoire de travail pour la construction.
2
/usr/lib/somefile.jar de myinputimage est stockée dans <workingdir>/app/dir/injected/dir.
3
Le répertoire de travail pour la construction devient <original_workingdir>/app/dir.
4
Un fichier Docker contenant ce contenu est créé à l'adresse <original_workingdir>/app/dir, remplaçant tout fichier existant portant ce nom.

2.3.2. Source du fichier Docker

Lorsque vous fournissez une valeur dockerfile, le contenu de ce champ est écrit sur le disque dans un fichier nommé dockerfile. Cette opération est effectuée après le traitement des autres sources d'entrée, donc si le référentiel de la source d'entrée contient un Dockerfile dans le répertoire racine, il est remplacé par ce contenu.

La définition de la source fait partie de la section spec du site BuildConfig:

source:
  dockerfile: "FROM centos:7\nRUN yum install -y httpd" 
1
Copy to Clipboard Toggle word wrap
1
Le champ dockerfile contient un fichier Docker en ligne qui est construit.

2.3.3. Source de l'image

Vous pouvez ajouter des fichiers supplémentaires au processus de construction avec des images. Les images d'entrée sont référencées de la même manière que les cibles d'image From et To sont définies. Cela signifie que les images de conteneurs et les balises de flux d'images peuvent être référencées. En conjonction avec l'image, vous devez fournir une ou plusieurs paires de chemins pour indiquer le chemin des fichiers ou des répertoires pour copier l'image et la destination pour les placer dans le contexte de construction.

Le chemin d'accès source peut être n'importe quel chemin d'accès absolu dans l'image spécifiée. La destination doit être un chemin de répertoire relatif. Au moment de la construction, l'image est chargée et les fichiers et répertoires indiqués sont copiés dans le répertoire contextuel du processus de construction. Il s'agit du même répertoire dans lequel le contenu du référentiel source est cloné. Si le chemin source se termine par /., le contenu du répertoire est copié, mais le répertoire lui-même n'est pas créé à la destination.

Les entrées d'images sont spécifiées dans la définition de source de BuildConfig:

source:
  git:
    uri: https://github.com/openshift/ruby-hello-world.git
    ref: "master"
  images: 
1

  - from: 
2

      kind: ImageStreamTag
      name: myinputimage:latest
      namespace: mynamespace
    paths: 
3

    - destinationDir: injected/dir 
4

      sourcePath: /usr/lib/somefile.jar 
5

  - from:
      kind: ImageStreamTag
      name: myotherinputimage:latest
      namespace: myothernamespace
    pullSecret: mysecret 
6

    paths:
    - destinationDir: injected/dir
      sourcePath: /usr/lib/somefile.jar
Copy to Clipboard Toggle word wrap
1
Un tableau contenant une ou plusieurs images et fichiers d'entrée.
2
Une référence à l'image contenant les fichiers à copier.
3
Un tableau de chemins source/destination.
4
Le répertoire relatif à la racine de construction où le processus de construction peut accéder au fichier.
5
Emplacement du fichier à copier à partir de l'image référencée.
6
Un secret facultatif fourni si des informations d'identification sont nécessaires pour accéder à l'image d'entrée.
Note

Si votre cluster utilise un objet ImageContentSourcePolicy pour configurer la mise en miroir du référentiel, vous ne pouvez utiliser que des secrets d'extraction globaux pour les registres mis en miroir. Vous ne pouvez pas ajouter un secret d'extraction à un projet.

Images nécessitant des secrets de tirage

Lorsque vous utilisez une image d'entrée qui nécessite un secret d'extraction, vous pouvez lier le secret d'extraction au compte de service utilisé par la compilation. Par défaut, les builds utilisent le compte de service builder. Le secret d'extraction est automatiquement ajouté à la compilation si le secret contient un identifiant qui correspond au référentiel hébergeant l'image d'entrée. Pour lier un secret d'extraction au compte de service utilisé par la compilation, exécutez :

$ oc secrets link builder dockerhub
Copy to Clipboard Toggle word wrap
Note

Cette fonctionnalité n'est pas prise en charge pour les constructions utilisant la stratégie personnalisée.

Images sur des registres en miroir nécessitant des secrets d'extraction

Lorsque vous utilisez une image d'entrée provenant d'un registre en miroir, si vous obtenez un message build error: failed to pull image, vous pouvez résoudre l'erreur en utilisant l'une des méthodes suivantes :

  • Créez un secret d'entrée contenant les informations d'authentification pour le référentiel de l'image du constructeur et tous les miroirs connus. Dans ce cas, créez un secret d'extraction pour les informations d'identification du registre d'images et de ses miroirs.
  • Utiliser le secret d'entrée comme secret de sortie sur l'objet BuildConfig.

2.3.4. Source Git

Lorsqu'il est spécifié, le code source est extrait de l'emplacement fourni.

Si vous fournissez un fichier Docker en ligne, il écrase le fichier Docker qui se trouve à l'adresse contextDir du dépôt Git.

La définition de la source fait partie de la section spec du site BuildConfig:

source:
  git: 
1

    uri: "https://github.com/openshift/ruby-hello-world"
    ref: "master"
  contextDir: "app/dir" 
2

  dockerfile: "FROM openshift/ruby-22-centos7\nUSER example" 
3
Copy to Clipboard Toggle word wrap
1
Le champ git contient l'URI du dépôt Git distant du code source. En option, le champ ref permet d'extraire une référence Git spécifique. Un champ ref valide peut être une balise SHA1 ou un nom de branche.
2
Le champ contextDir vous permet de remplacer l'emplacement par défaut dans le référentiel du code source où la compilation recherche le code source de l'application. Si votre application existe dans un sous-répertoire, vous pouvez remplacer l'emplacement par défaut (le dossier racine) à l'aide de ce champ.
3
Si le champ facultatif dockerfile est fourni, il doit s'agir d'une chaîne contenant un Dockerfile qui écrase tout Dockerfile existant dans le référentiel source.

Si le champ ref indique une demande d'extraction, le système utilise une opération git fetch et ensuite la caisse FETCH_HEAD.

Si aucune valeur ref n'est fournie, OpenShift Container Platform effectue un clone superficiel (--depth=1). Dans ce cas, seuls les fichiers associés au commit le plus récent sur la branche par défaut (généralement master) sont téléchargés. Les dépôts se téléchargent ainsi plus rapidement, mais sans l'historique complet des livraisons. Pour effectuer un git clone complet de la branche par défaut d'un dépôt spécifié, définissez ref comme étant le nom de la branche par défaut (par exemple master).

Avertissement

Les opérations de clonage de Git qui passent par un proxy qui effectue un détournement TLS ou un recryptage de la connexion proxy par l'homme du milieu (MITM) ne fonctionnent pas.

2.3.4.1. Utilisation d'un proxy

Si votre dépôt Git n'est accessible qu'à l'aide d'un proxy, vous pouvez définir le proxy à utiliser dans la section source de la configuration de construction. Vous pouvez configurer un proxy HTTP et HTTPS à utiliser. Les deux champs sont facultatifs. Les domaines pour lesquels aucun proxy ne doit être utilisé peuvent également être spécifiés dans le champ NoProxy.

Note

Votre URI source doit utiliser le protocole HTTP ou HTTPS pour que cela fonctionne.

source:
  git:
    uri: "https://github.com/openshift/ruby-hello-world"
    ref: "master"
    httpProxy: http://proxy.example.com
    httpsProxy: https://proxy.example.com
    noProxy: somedomain.com, otherdomain.com
Copy to Clipboard Toggle word wrap
Note

Pour les constructions de la stratégie Pipeline, étant donné les restrictions actuelles du plugin Git pour Jenkins, toutes les opérations Git via le plugin Git n'utilisent pas le proxy HTTP ou HTTPS défini dans le site BuildConfig. Le plugin Git utilise uniquement le proxy configuré dans l'interface utilisateur de Jenkins, dans le panneau Plugin Manager. Ce proxy est ensuite utilisé pour toutes les interactions Git dans Jenkins, pour tous les travaux.

2.3.4.2. Source Clone Secrets

Les modules de construction ont besoin d'accéder à tous les dépôts Git définis comme source pour une construction. Les secrets de clone de source sont utilisés pour fournir au pod constructeur un accès auquel il n'aurait normalement pas accès, comme les dépôts privés ou les dépôts avec des certificats SSL auto-signés ou non fiables.

Les configurations suivantes de clone secret de source sont prises en charge :

  • fichier .gitconfig
  • Authentification de base
  • Authentification par clé SSH
  • Autorités de certification de confiance
Note

Vous pouvez également utiliser des combinaisons de ces configurations pour répondre à vos besoins spécifiques.

Lorsqu'un BuildConfig est créé, OpenShift Container Platform peut automatiquement remplir sa référence de secret de clone source. Ce comportement permet aux builds résultants d'utiliser automatiquement les informations d'identification stockées dans le secret référencé pour s'authentifier auprès d'un dépôt Git distant, sans nécessiter de configuration supplémentaire.

Pour utiliser cette fonctionnalité, un secret contenant les informations d'identification du dépôt Git doit exister dans l'espace de noms dans lequel le site BuildConfig est créé ultérieurement. Ce secret doit inclure une ou plusieurs annotations préfixées par build.openshift.io/source-secret-match-uri-. La valeur de chacune de ces annotations est un modèle d'identifiant de ressource uniforme (URI), défini comme suit. Lorsqu'un BuildConfig est créé sans référence à un secret de clone source et que son URI de source Git correspond à un modèle d'URI dans une annotation de secret, OpenShift Container Platform insère automatiquement une référence à ce secret dans le BuildConfig.

Conditions préalables

Un modèle d'URI doit être composé de

  • Un système valide : *://, git://, http://, https:// ou ssh://
  • Un hôte : *` ou un nom d'hôte ou une adresse IP valide précédé(e) éventuellement de *.
  • Un chemin d'accès : /* ou / suivi de caractères quelconques comprenant éventuellement des caractères *

Dans tous les cas ci-dessus, le caractère * est interprété comme un joker.

Important

Les modèles d'URI doivent correspondre aux URI de la source Git, qui sont conformes à la norme RFC3986. Ne pas inclure de nom d'utilisateur (ou de mot de passe) dans un modèle d'URI.

Par exemple, si vous utilisez ssh://git@bitbucket.atlassian.com:7999/ATLASSIAN jira.git pour l'URL d'un dépôt git, le secret de la source doit être spécifié comme ssh://bitbucket.atlassian.com:7999/* (et non ssh://git@bitbucket.atlassian.com:7999/*).

$ oc annotate secret mysecret \
    'build.openshift.io/source-secret-match-uri-1=ssh://bitbucket.atlassian.com:7999/*'
Copy to Clipboard Toggle word wrap

Procédure

Si plusieurs secrets correspondent à l'URI Git d'une BuildConfig particulière, OpenShift Container Platform sélectionne le secret dont la correspondance est la plus longue. Cela permet une surcharge de base, comme dans l'exemple suivant.

Le fragment suivant montre deux secrets de clone source partiels, le premier correspondant à tout serveur du domaine mycorp.com accédé par HTTPS, et le second surpassant l'accès aux serveurs mydev1.mycorp.com et mydev2.mycorp.com:

kind: Secret
apiVersion: v1
metadata:
  name: matches-all-corporate-servers-https-only
  annotations:
    build.openshift.io/source-secret-match-uri-1: https://*.mycorp.com/*
data:
  ...
---
kind: Secret
apiVersion: v1
metadata:
  name: override-for-my-dev-servers-https-only
  annotations:
    build.openshift.io/source-secret-match-uri-1: https://mydev1.mycorp.com/*
    build.openshift.io/source-secret-match-uri-2: https://mydev2.mycorp.com/*
data:
  ...
Copy to Clipboard Toggle word wrap
  • Ajouter une annotation build.openshift.io/source-secret-match-uri- à un secret préexistant en utilisant :

    $ oc annotate secret mysecret \
        'build.openshift.io/source-secret-match-uri-1=https://*.mycorp.com/*'
    Copy to Clipboard Toggle word wrap
2.3.4.2.2. Ajout manuel d'un secret de clone source

Les secrets de clone de source peuvent être ajoutés manuellement à une configuration de compilation en ajoutant un champ sourceSecret à la section source à l'intérieur de BuildConfig et en lui attribuant le nom du secret que vous avez créé. Dans cet exemple, il s'agit de basicsecret.

apiVersion: "v1"
kind: "BuildConfig"
metadata:
  name: "sample-build"
spec:
  output:
    to:
      kind: "ImageStreamTag"
      name: "sample-image:latest"
  source:
    git:
      uri: "https://github.com/user/app.git"
    sourceSecret:
      name: "basicsecret"
  strategy:
    sourceStrategy:
      from:
        kind: "ImageStreamTag"
        name: "python-33-centos7:latest"
Copy to Clipboard Toggle word wrap

Procédure

Vous pouvez également utiliser la commande oc set build-secret pour définir le secret du clone source sur une configuration de construction existante.

  • Pour définir le secret du clone source sur une configuration de compilation existante, entrez la commande suivante :

    $ oc set build-secret --source bc/sample-build basicsecret
    Copy to Clipboard Toggle word wrap

Si le clonage de votre application dépend d'un fichier .gitconfig, vous pouvez créer un secret qui le contient. Ajoutez-le au compte de service builder, puis à votre fichier BuildConfig.

Procédure

  • Pour créer un secret à partir d'un fichier .gitconfig:
$ oc create secret generic <secret_name> --from-file=<path/to/.gitconfig>
Copy to Clipboard Toggle word wrap
Note

La vérification SSL peut être désactivée si sslVerify=false est défini pour la section http dans votre fichier .gitconfig:

[http]
        sslVerify=false
Copy to Clipboard Toggle word wrap

Si votre serveur Git est sécurisé par un protocole SSL bidirectionnel et un nom d'utilisateur avec mot de passe, vous devez ajouter les fichiers de certificats à votre compilation de sources et ajouter des références aux fichiers de certificats dans le fichier .gitconfig.

Conditions préalables

  • Vous devez avoir des informations d'identification Git.

Procédure

Ajoutez les fichiers de certificats à votre version source et ajoutez des références aux fichiers de certificats dans le fichier .gitconfig.

  1. Ajoutez les fichiers client.crt, cacert.crt, et client.key au dossier /var/run/secrets/openshift.io/source/ dans le code source de l'application.
  2. Dans le fichier .gitconfig du serveur, ajoutez la section [http] comme indiqué dans l'exemple suivant :

    # cat .gitconfig
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    [user]
            name = <name>
            email = <email>
    [http]
            sslVerify = false
            sslCert = /var/run/secrets/openshift.io/source/client.crt
            sslKey = /var/run/secrets/openshift.io/source/client.key
            sslCaInfo = /var/run/secrets/openshift.io/source/cacert.crt
    Copy to Clipboard Toggle word wrap

  3. Créer le secret :

    $ oc create secret generic <secret_name> \
    --from-literal=username=<user_name> \ 
    1
    
    --from-literal=password=<password> \ 
    2
    
    --from-file=.gitconfig=.gitconfig \
    --from-file=client.crt=/var/run/secrets/openshift.io/source/client.crt \
    --from-file=cacert.crt=/var/run/secrets/openshift.io/source/cacert.crt \
    --from-file=client.key=/var/run/secrets/openshift.io/source/client.key
    Copy to Clipboard Toggle word wrap
    1
    Le nom d'utilisateur Git de l'utilisateur.
    2
    Le mot de passe de cet utilisateur.
Important

Pour éviter d'avoir à saisir à nouveau votre mot de passe, veillez à spécifier l'image source-image (S2I) dans vos constructions. Cependant, si vous ne pouvez pas cloner le référentiel, vous devez toujours spécifier votre nom d'utilisateur et votre mot de passe pour promouvoir la compilation.

L'authentification de base nécessite soit une combinaison de --username et --password, soit un jeton pour s'authentifier auprès du serveur de gestion de la configuration logicielle (SCM).

Conditions préalables

  • Nom d'utilisateur et mot de passe pour accéder au référentiel privé.

Procédure

  1. Créez d'abord le secret avant d'utiliser les adresses --username et --password pour accéder au dépôt privé :

    $ oc create secret generic <secret_name> \
        --from-literal=username=<user_name> \
        --from-literal=password=<password> \
        --type=kubernetes.io/basic-auth
    Copy to Clipboard Toggle word wrap
  2. Créer un secret d'authentification de base avec un jeton :

    $ oc create secret generic <secret_name> \
        --from-literal=password=<token> \
        --type=kubernetes.io/basic-auth
    Copy to Clipboard Toggle word wrap

L'authentification basée sur une clé SSH nécessite une clé SSH privée.

Les clés du référentiel sont généralement situées dans le répertoire $HOME/.ssh/ et sont nommées par défaut id_dsa.pub, id_ecdsa.pub, id_ed25519.pub ou id_rsa.pub.

Procédure

  1. Générer les informations d'identification de la clé SSH :

    $ ssh-keygen -t ed25519 -C "your_email@example.com"
    Copy to Clipboard Toggle word wrap
    Note

    La création d'une phrase de passe pour la clé SSH empêche OpenShift Container Platform de se construire. Lorsque vous êtes invité à saisir une phrase de passe, laissez-la vide.

    Deux fichiers sont créés : la clé publique et la clé privée correspondante (l'une des clés suivantes : id_dsa, id_ecdsa, id_ed25519 ou id_rsa). Une fois ces deux fichiers en place, consultez le manuel de votre système de gestion du contrôle des sources (SCM) pour savoir comment télécharger la clé publique. La clé privée est utilisée pour accéder à votre dépôt privé.

  2. Avant d'utiliser la clé SSH pour accéder au référentiel privé, créez le secret :

    $ oc create secret generic <secret_name> \
        --from-file=ssh-privatekey=<path/to/ssh/private/key> \
        --from-file=<path/to/known_hosts> \ 
    1
    
        --type=kubernetes.io/ssh-auth
    Copy to Clipboard Toggle word wrap
    1
    Facultatif : L'ajout de ce champ permet une vérification stricte de la clé d'hôte du serveur.
    Avertissement

    Le fait d'ignorer le fichier known_hosts lors de la création du secret rend la construction vulnérable à une attaque potentielle de type "man-in-the-middle" (MITM).

    Note

    Assurez-vous que le fichier known_hosts contient une entrée pour l'hôte de votre code source.

L'ensemble des autorités de certification (CA) Transport Layer Security (TLS) qui sont approuvées lors d'une opération de clonage Git sont intégrées dans les images d'infrastructure OpenShift Container Platform. Si votre serveur Git utilise un certificat auto-signé ou signé par une autorité non approuvée par l'image, vous pouvez créer un secret qui contient le certificat ou désactiver la vérification TLS.

Si vous créez un secret pour le certificat CA, OpenShift Container Platform l'utilise pour accéder à votre serveur Git pendant l'opération de clonage Git. L'utilisation de cette méthode est nettement plus sûre que la désactivation de la vérification SSL de Git, qui accepte tout certificat TLS présenté.

Procédure

Créer un secret avec un fichier de certificat CA.

  1. Si votre autorité de certification utilise des autorités de certification intermédiaires, combinez les certificats de toutes les autorités de certification dans un fichier ca.crt. Entrez la commande suivante :

    cat intermediateCA.crt intermediateCA.crt rootCA.crt > ca.crt
    Copy to Clipboard Toggle word wrap
    1. Créer le secret :

      oc create secret generic mycert --from-file=ca.crt=</path/to/file> $ oc create secret generic mycert --from-file=ca.crt=</path/to/file> 
      1
      Copy to Clipboard Toggle word wrap
      1
      Vous devez utiliser le nom de clé ca.crt.
2.3.4.2.8. Combinaisons secrètes de la source

Vous pouvez combiner les différentes méthodes de création de clones secrets de sources pour répondre à vos besoins spécifiques.

Vous pouvez combiner les différentes méthodes de création de secrets de clone source pour répondre à vos besoins spécifiques, par exemple un secret d'authentification basé sur SSH avec un fichier .gitconfig.

Conditions préalables

  • Authentification SSH
  • fichier .gitconfig

Procédure

  • Pour créer un secret d'authentification basé sur SSH avec un fichier .gitconfig, exécutez :

    $ oc create secret generic <secret_name> \
        --from-file=ssh-privatekey=<path/to/ssh/private/key> \
        --from-file=<path/to/.gitconfig> \
        --type=kubernetes.io/ssh-auth
    Copy to Clipboard Toggle word wrap

Vous pouvez combiner les différentes méthodes de création de secrets de clone source pour répondre à vos besoins spécifiques, par exemple un secret combinant un fichier .gitconfig et un certificat d'autorité de certification (CA).

Conditions préalables

  • fichier .gitconfig
  • Certificat CA

Procédure

  • Pour créer un secret combinant un fichier .gitconfig et un certificat d'autorité de certification, exécutez la commande suivante :

    $ oc create secret generic <secret_name> \
        --from-file=ca.crt=<path/to/certificate> \
        --from-file=<path/to/.gitconfig>
    Copy to Clipboard Toggle word wrap

Vous pouvez combiner les différentes méthodes de création de secrets de clone source pour répondre à vos besoins spécifiques, par exemple un secret combinant une authentification de base et un certificat d'autorité de certification (CA).

Conditions préalables

  • Données d'authentification de base
  • Certificat CA

Procédure

  • Créer un secret d'authentification de base avec un certificat CA, exécuter :

    $ oc create secret generic <secret_name> \
        --from-literal=username=<user_name> \
        --from-literal=password=<password> \
        --from-file=ca-cert=</path/to/file> \
        --type=kubernetes.io/basic-auth
    Copy to Clipboard Toggle word wrap

Vous pouvez combiner les différentes méthodes de création de secrets de clone source pour répondre à vos besoins spécifiques, par exemple un secret combinant une authentification de base et un fichier .gitconfig.

Conditions préalables

  • Données d'authentification de base
  • .gitconfig fichier

Procédure

  • Pour créer un secret d'authentification de base avec un fichier .gitconfig, exécutez :

    $ oc create secret generic <secret_name> \
        --from-literal=username=<user_name> \
        --from-literal=password=<password> \
        --from-file=</path/to/.gitconfig> \
        --type=kubernetes.io/basic-auth
    Copy to Clipboard Toggle word wrap

Vous pouvez combiner les différentes méthodes de création de secrets de clone source pour répondre à vos besoins spécifiques, par exemple un secret combinant une authentification de base, un fichier .gitconfig et un certificat d'autorité de certification (CA).

Conditions préalables

  • Données d'authentification de base
  • .gitconfig fichier
  • Certificat CA

Procédure

  • Pour créer un secret d'authentification de base avec un fichier .gitconfig et un certificat CA, exécutez :

    $ oc create secret generic <secret_name> \
        --from-literal=username=<user_name> \
        --from-literal=password=<password> \
        --from-file=</path/to/.gitconfig> \
        --from-file=ca-cert=</path/to/file> \
        --type=kubernetes.io/basic-auth
    Copy to Clipboard Toggle word wrap

2.3.5. Source binaire (locale)

La diffusion de contenu à partir d'un système de fichiers local vers le constructeur est appelée construction de type Binary. La valeur correspondante de BuildConfig.spec.source.type est Binary pour ces constructions.

Ce type de source est unique en ce sens qu'il est utilisé uniquement en fonction de l'utilisation que vous faites du site oc start-build.

Note

Les constructions de type binaire nécessitent que le contenu soit diffusé à partir du système de fichiers local. Il n'est donc pas possible de déclencher automatiquement une construction de type binaire, comme on le ferait avec un déclencheur de changement d'image. En effet, les fichiers binaires ne peuvent pas être fournis. De même, vous ne pouvez pas lancer de builds de type binaire à partir de la console web.

Pour utiliser les constructions binaires, invoquez oc start-build avec l'une de ces options :

  • --from-file: Le contenu du fichier que vous spécifiez est envoyé sous forme de flux binaire au constructeur. Vous pouvez également spécifier l'URL d'un fichier. Ensuite, le constructeur stocke les données dans un fichier portant le même nom en haut du contexte de construction.
  • --from-dir et --from-repo: Le contenu est archivé et envoyé sous forme de flux binaire au constructeur. Ensuite, le constructeur extrait le contenu de l'archive dans le répertoire du contexte de construction. Avec --from-dir, vous pouvez également spécifier l'URL d'une archive qui sera extraite.
  • --from-archive: L'archive que vous spécifiez est envoyée au constructeur, où elle est extraite dans le répertoire du contexte de construction. Cette option se comporte de la même manière que --from-dir; une archive est créée sur votre hôte en premier, lorsque l'argument de ces options est un répertoire.

Dans chacun des cas énumérés précédemment :

  • Si votre BuildConfig a déjà un type de source Binary défini, il est effectivement ignoré et remplacé par ce que le client envoie.
  • Si votre BuildConfig a un type de source Git défini, il est dynamiquement désactivé, puisque Binary et Git s'excluent mutuellement et que les données du flux binaire fourni au constructeur sont prioritaires.

Au lieu d'un nom de fichier, vous pouvez transmettre une URL avec un schéma HTTP ou HTTPS à --from-file et --from-archive. Lorsque vous utilisez --from-file avec une URL, le nom du fichier dans l'image du constructeur est déterminé par l'en-tête Content-Disposition envoyé par le serveur web, ou par le dernier composant du chemin URL si l'en-tête n'est pas présent. Aucune forme d'authentification n'est prise en charge et il n'est pas possible d'utiliser un certificat TLS personnalisé ou de désactiver la validation du certificat.

Lors de l'utilisation de oc new-build --binary=true, la commande s'assure que les restrictions associées aux constructions binaires sont appliquées. Le résultat BuildConfig a un type de source de Binary, ce qui signifie que la seule façon valide d'exécuter une compilation pour ce BuildConfig est d'utiliser oc start-build avec l'une des options --from pour fournir les données binaires requises.

Les options Dockerfile et contextDir source ont une signification particulière pour les constructions binaires.

Dockerfile peut être utilisé avec n'importe quelle source de construction binaire. Si Dockerfile est utilisé et que le flux binaire est une archive, son contenu sert de Dockerfile de remplacement pour tout Dockerfile dans l'archive. Si Dockerfile est utilisé avec l'argument --from-file, et que l'argument file est nommé Dockerfile, la valeur de Dockerfile remplace la valeur du flux binaire.

Dans le cas du flux binaire encapsulant le contenu extrait de l'archive, la valeur du champ contextDir est interprétée comme un sous-répertoire de l'archive et, s'il est valide, le constructeur passe à ce sous-répertoire avant d'exécuter la construction.

2.3.6. Secrets d'entrée et cartes de configuration

Important

Pour éviter que le contenu des secrets d'entrée et des cartes de configuration n'apparaisse dans les images de conteneurs de sortie de la construction, utilisez des volumes de construction dans vos stratégies de construction Docker et de construction source-image.

Dans certains cas, les opérations de construction nécessitent des informations d'identification ou d'autres données de configuration pour accéder aux ressources dépendantes, mais il n'est pas souhaitable que ces informations soient placées dans le contrôle de la source. Vous pouvez définir des secrets d'entrée et des cartes de configuration d'entrée à cette fin.

Par exemple, lorsque vous construisez une application Java avec Maven, vous pouvez mettre en place un miroir privé de Maven Central ou JCenter auquel vous accédez par des clés privées. Pour télécharger des bibliothèques à partir de ce miroir privé, vous devez fournir les éléments suivants :

  1. Un fichier settings.xml configuré avec l'URL du miroir et les paramètres de connexion.
  2. Une clé privée référencée dans le fichier de configuration, telle que ~/.ssh/id_rsa.

Pour des raisons de sécurité, vous ne souhaitez pas exposer vos informations d'identification dans l'image de l'application.

Cet exemple décrit une application Java, mais vous pouvez utiliser la même approche pour ajouter des certificats SSL dans le répertoire /etc/ssl/certs, des clés ou des jetons d'API, des fichiers de licence, etc.

2.3.6.1. Qu'est-ce qu'un secret ?

Le type d'objet Secret fournit un mécanisme pour contenir des informations sensibles telles que les mots de passe, les fichiers de configuration du client OpenShift Container Platform, les fichiers dockercfg, les informations d'identification du référentiel source privé, etc. Les secrets découplent le contenu sensible des pods. Vous pouvez monter des secrets dans des conteneurs à l'aide d'un plugin de volume ou le système peut utiliser des secrets pour effectuer des actions au nom d'un pod.

Définition de l'objet secret YAML

apiVersion: v1
kind: Secret
metadata:
  name: test-secret
  namespace: my-namespace
type: Opaque 
1

data: 
2

  username: dmFsdWUtMQ0K 
3

  password: dmFsdWUtMg0KDQo=
stringData: 
4

  hostname: myapp.mydomain.com 
5
Copy to Clipboard Toggle word wrap

1
Indique la structure des noms et des valeurs des clés du secret.
2
Le format autorisé pour les clés du champ data doit respecter les directives de la valeur DNS_SUBDOMAIN dans le glossaire des identifiants Kubernetes.
3
La valeur associée aux clés de la carte data doit être encodée en base64.
4
Les entrées de la carte stringData sont converties en base64 et sont ensuite déplacées automatiquement vers la carte data. Ce champ est en écriture seule. La valeur n'est renvoyée que par le champ data.
5
La valeur associée aux clés de la carte stringData est constituée de chaînes de texte en clair.
2.3.6.1.1. Propriétés des secrets

Les principales propriétés sont les suivantes

  • Les données secrètes peuvent être référencées indépendamment de leur définition.
  • Les volumes de données secrètes sont sauvegardés par des installations de stockage de fichiers temporaires (tmpfs) et ne s'arrêtent jamais sur un nœud.
  • Les données secrètes peuvent être partagées au sein d'un espace de noms.
2.3.6.1.2. Types de secrets

La valeur du champ type indique la structure des noms et des valeurs des clés du secret. Le type peut être utilisé pour imposer la présence de noms d'utilisateur et de clés dans l'objet secret. Si vous ne souhaitez pas de validation, utilisez le type opaque, qui est le type par défaut.

Indiquez l'un des types suivants pour déclencher une validation minimale côté serveur afin de garantir la présence de noms de clés spécifiques dans les données secrètes :

  • kubernetes.io/service-account-token. Utilise un jeton de compte de service.
  • kubernetes.io/dockercfg. Utilise le fichier .dockercfg pour les informations d'identification Docker requises.
  • kubernetes.io/dockerconfigjson. Utilise le fichier .docker/config.json pour les informations d'identification Docker requises.
  • kubernetes.io/basic-auth. A utiliser avec l'authentification de base.
  • kubernetes.io/ssh-auth. A utiliser avec l'authentification par clé SSH.
  • kubernetes.io/tls. A utiliser avec les autorités de certification TLS.

Indiquez type= Opaque si vous ne souhaitez pas de validation, ce qui signifie que le secret ne prétend pas se conformer à une convention pour les noms de clés ou les valeurs. Un secret opaque permet d'utiliser des paires key:value non structurées pouvant contenir des valeurs arbitraires.

Note

Vous pouvez spécifier d'autres types arbitraires, tels que example.com/my-secret-type. Ces types ne sont pas appliqués côté serveur, mais ils indiquent que le créateur du secret avait l'intention de se conformer aux exigences clé/valeur de ce type.

2.3.6.1.3. Mises à jour des secrets

Lorsque vous modifiez la valeur d'un secret, la valeur utilisée par un module déjà en cours d'exécution ne change pas dynamiquement. Pour modifier un secret, vous devez supprimer le module original et en créer un nouveau, dans certains cas avec un PodSpec identique.

La mise à jour d'un secret suit le même processus que le déploiement d'une nouvelle image de conteneur. Vous pouvez utiliser la commande kubectl rolling-update.

La valeur resourceVersion d'un secret n'est pas spécifiée lorsqu'il est référencé. Par conséquent, si un secret est mis à jour au moment où les modules démarrent, la version du secret utilisée pour le module n'est pas définie.

Note

Actuellement, il n'est pas possible de vérifier la version de la ressource d'un objet secret qui a été utilisée lors de la création d'un pod. Il est prévu que les modules communiquent cette information, de sorte qu'un contrôleur puisse redémarrer ceux qui utilisent un ancien resourceVersion. Dans l'intervalle, ne mettez pas à jour les données des secrets existants, mais créez-en de nouveaux avec des noms distincts.

2.3.6.2. Créer des secrets

Vous devez créer un secret avant de créer les modules qui dépendent de ce secret.

Lors de la création de secrets :

  • Créer un objet secret avec des données secrètes.
  • Mettre à jour le compte de service pod pour autoriser la référence au secret.
  • Créer un pod, qui consomme le secret en tant que variable d'environnement ou en tant que fichier à l'aide d'un volume secret.

Procédure

  • La commande create permet de créer un objet secret à partir d'un fichier JSON ou YAML :

    $ oc create -f <filename>
    Copy to Clipboard Toggle word wrap

    Par exemple, vous pouvez créer un secret à partir de votre fichier local .docker/config.json:

    $ oc create secret generic dockerhub \
        --from-file=.dockerconfigjson=<path/to/.docker/config.json> \
        --type=kubernetes.io/dockerconfigjson
    Copy to Clipboard Toggle word wrap

    Cette commande génère une spécification JSON du secret nommé dockerhub et crée l'objet.

    Définition de l'objet secret opaque YAML

    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret
    type: Opaque 
    1
    
    data:
      username: dXNlci1uYW1l
      password: cGFzc3dvcmQ=
    Copy to Clipboard Toggle word wrap

    1
    Spécifie un secret opaque.

    Fichier JSON de configuration Docker Définition de l'objet secret

    apiVersion: v1
    kind: Secret
    metadata:
      name: aregistrykey
      namespace: myapps
    type: kubernetes.io/dockerconfigjson 
    1
    
    data:
      .dockerconfigjson:bm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg== 
    2
    Copy to Clipboard Toggle word wrap

    1
    Spécifie que le secret utilise un fichier JSON de configuration de docker.
    2
    La sortie d'un fichier JSON de configuration de docker encodé en base64
2.3.6.3. Utiliser les secrets

Après avoir créé des secrets, vous pouvez créer un pod pour référencer votre secret, obtenir des journaux et supprimer le pod.

Procédure

  1. Créez le pod pour référencer votre secret :

    oc create -f <votre_fichier_yaml_>.yaml
    Copy to Clipboard Toggle word wrap
  2. Obtenir les journaux :

    $ oc logs secret-example-pod
    Copy to Clipboard Toggle word wrap
  3. Supprimer le pod :

    $ oc delete pod secret-example-pod
    Copy to Clipboard Toggle word wrap

Pour fournir des informations d'identification et d'autres données de configuration à une compilation sans les placer dans le contrôle du code source, vous pouvez définir des secrets d'entrée et des cartes de configuration d'entrée.

Dans certains cas, les opérations de construction nécessitent des informations d'identification ou d'autres données de configuration pour accéder aux ressources dépendantes. Pour rendre ces informations disponibles sans les placer dans le contrôle du code source, vous pouvez définir des secrets d'entrée et des cartes de configuration d'entrée.

Procédure

Pour ajouter un secret d'entrée, des cartes de configuration ou les deux à un objet BuildConfig existant :

  1. Créer l'objet ConfigMap, s'il n'existe pas :

    $ oc create configmap settings-mvn \
        --from-file=settings.xml=<path/to/settings.xml>
    Copy to Clipboard Toggle word wrap

    Cela crée une nouvelle carte de configuration nommée settings-mvn, qui contient le contenu en texte brut du fichier settings.xml.

    Astuce

    Vous pouvez également appliquer le YAML suivant pour créer la carte de configuration :

    apiVersion: core/v1
    kind: ConfigMap
    metadata:
      name: settings-mvn
    data:
      settings.xml: |
        <settings>
        … # Insert maven settings here
        </settings>
    Copy to Clipboard Toggle word wrap
  2. Créer l'objet Secret, s'il n'existe pas :

    $ oc create secret generic secret-mvn \
        --from-file=ssh-privatekey=<path/to/.ssh/id_rsa>
        --type=kubernetes.io/ssh-auth
    Copy to Clipboard Toggle word wrap

    Cela crée un nouveau secret nommé secret-mvn, qui contient le contenu encodé en base64 de la clé privée id_rsa.

    Astuce

    Vous pouvez également appliquer le langage YAML suivant pour créer le secret d'entrée :

    apiVersion: core/v1
    kind: Secret
    metadata:
      name: secret-mvn
    type: kubernetes.io/ssh-auth
    data:
      ssh-privatekey: |
        # Insert ssh private key, base64 encoded
    Copy to Clipboard Toggle word wrap
  3. Ajoutez la carte de configuration et le secret à la section source de l'objet BuildConfig existant :

    source:
      git:
        uri: https://github.com/wildfly/quickstart.git
      contextDir: helloworld
      configMaps:
        - configMap:
            name: settings-mvn
      secrets:
        - secret:
            name: secret-mvn
    Copy to Clipboard Toggle word wrap

Pour inclure le secret et la carte de configuration dans un nouvel objet BuildConfig, exécutez la commande suivante :

$ oc new-build \
    openshift/wildfly-101-centos7~https://github.com/wildfly/quickstart.git \
    --context-dir helloworld --build-secret “secret-mvn” \
    --build-config-map "settings-mvn"
Copy to Clipboard Toggle word wrap

Pendant la construction, les fichiers settings.xml et id_rsa sont copiés dans le répertoire où se trouve le code source. Dans les images du constructeur S2I d'OpenShift Container Platform, il s'agit du répertoire de travail de l'image, qui est défini à l'aide de l'instruction WORKDIR dans le fichier Dockerfile. Si vous souhaitez spécifier un autre répertoire, ajoutez un destinationDir à la définition :

source:
  git:
    uri: https://github.com/wildfly/quickstart.git
  contextDir: helloworld
  configMaps:
    - configMap:
        name: settings-mvn
      destinationDir: ".m2"
  secrets:
    - secret:
        name: secret-mvn
      destinationDir: ".ssh"
Copy to Clipboard Toggle word wrap

Vous pouvez également spécifier le répertoire de destination lors de la création d'un nouvel objet BuildConfig:

$ oc new-build \
    openshift/wildfly-101-centos7~https://github.com/wildfly/quickstart.git \
    --context-dir helloworld --build-secret “secret-mvn:.ssh” \
    --build-config-map "settings-mvn:.m2"
Copy to Clipboard Toggle word wrap

Dans les deux cas, le fichier settings.xml est ajouté au répertoire ./.m2 de l'environnement de construction et la clé id_rsa est ajoutée au répertoire ./.ssh.

2.3.6.5. Stratégie de la source à l'image

Lors de l'utilisation d'une stratégie Source, tous les secrets d'entrée définis sont copiés dans leur destinationDir respectif. Si vous avez laissé destinationDir vide, les secrets sont placés dans le répertoire de travail de l'image du constructeur.

La même règle est utilisée lorsque destinationDir est un chemin relatif. Les secrets sont placés dans les chemins relatifs au répertoire de travail de l'image. Le dernier répertoire du chemin destinationDir est créé s'il n'existe pas dans l'image du constructeur. Tous les répertoires précédents dans le chemin destinationDir doivent exister, sinon une erreur se produit.

Note

Les secrets d'entrée sont ajoutés comme étant inscriptibles dans le monde, ont les permissions 0666 et sont tronqués à la taille zéro après l'exécution du script assemble. Cela signifie que les fichiers secrets existent dans l'image résultante, mais qu'ils sont vides pour des raisons de sécurité.

Les cartes de configuration en entrée ne sont pas tronquées après la fin du script assemble.

2.3.6.6. Stratégie Docker

Lorsque vous utilisez une stratégie Docker, vous pouvez ajouter tous les secrets d'entrée définis dans votre image de conteneur en utilisant les instructions ADD et COPY dans votre fichier Docker.

Si vous ne spécifiez pas destinationDir pour un secret, les fichiers sont copiés dans le même répertoire que celui où se trouve le fichier Docker. Si vous spécifiez un chemin relatif comme destinationDir, alors les secrets sont copiés dans ce répertoire, par rapport à l'emplacement de votre Dockerfile. Cela rend les fichiers secrets disponibles pour l'opération de construction de Docker en tant que partie du répertoire de contexte utilisé pendant la construction.

Exemple de fichier Docker référençant les données des cartes secrètes et de configuration

FROM centos/ruby-22-centos7

USER root
COPY ./secret-dir /secrets
COPY ./config /

# Create a shell script that will output secrets and ConfigMaps when the image is run
RUN echo '#!/bin/sh' > /input_report.sh
RUN echo '(test -f /secrets/secret1 && echo -n "secret1=" && cat /secrets/secret1)' >> /input_report.sh
RUN echo '(test -f /config && echo -n "relative-configMap=" && cat /config)' >> /input_report.sh
RUN chmod 755 /input_report.sh

CMD ["/bin/sh", "-c", "/input_report.sh"]
Copy to Clipboard Toggle word wrap

Important

Les utilisateurs suppriment normalement leurs secrets d'entrée de l'image de l'application finale afin que les secrets ne soient pas présents dans le conteneur fonctionnant à partir de cette image. Cependant, les secrets existent toujours dans l'image elle-même, dans la couche où ils ont été ajoutés. Cette suppression fait partie du fichier Docker lui-même.

Pour éviter que le contenu des secrets d'entrée et des cartes de configuration n'apparaisse dans les images du conteneur de sortie de la construction et éviter ce processus de suppression, utilisez plutôt des volumes de construction dans votre stratégie de construction Docker.

2.3.6.7. Stratégie personnalisée

Lors de l'utilisation d'une stratégie personnalisée, tous les secrets d'entrée et les cartes de configuration définis sont disponibles dans le conteneur du constructeur, dans le répertoire /var/run/secrets/openshift.io/build. L'image de compilation personnalisée doit utiliser ces secrets et ces cartes de configuration de manière appropriée. Avec la stratégie personnalisée, vous pouvez définir des secrets comme décrit dans les options de la stratégie personnalisée.

Il n'y a pas de différence technique entre les secrets de stratégie existants et les secrets d'entrée. Cependant, votre image de constructeur peut les distinguer et les utiliser différemment, en fonction du cas d'utilisation de votre construction.

Les secrets d'entrée sont toujours montés dans le répertoire /var/run/secrets/openshift.io/build, ou votre constructeur peut analyser la variable d'environnement $BUILD, qui inclut l'objet de construction complet.

Important

Si un secret d'extraction pour le registre existe à la fois dans l'espace de noms et dans le nœud, les constructions utilisent par défaut le secret d'extraction de l'espace de noms.

2.3.7. Artéfacts externes

Il n'est pas recommandé de stocker des fichiers binaires dans un référentiel de sources. Par conséquent, vous devez définir une construction qui extrait des fichiers supplémentaires, tels que les dépendances Java .jar, au cours du processus de construction. La manière de procéder dépend de la stratégie de compilation que vous utilisez.

Pour une stratégie de construction de Source, vous devez insérer les commandes shell appropriées dans le script assemble:

.s2i/bin/assemble Fichier

#!/bin/sh
APP_VERSION=1.0
wget http://repository.example.com/app/app-$APP_VERSION.jar -O app.jar
Copy to Clipboard Toggle word wrap

.s2i/bin/run Fichier

#!/bin/sh
exec java -jar app.jar
Copy to Clipboard Toggle word wrap

Pour une stratégie de construction Docker, vous devez modifier le fichier Docker et invoquer des commandes shell avec l'instructionRUN :

Extrait de Dockerfile

FROM jboss/base-jdk:8

ENV APP_VERSION 1.0
RUN wget http://repository.example.com/app/app-$APP_VERSION.jar -O app.jar

EXPOSE 8080
CMD [ "java", "-jar", "app.jar" ]
Copy to Clipboard Toggle word wrap

Dans la pratique, vous souhaiterez peut-être utiliser une variable d'environnement pour l'emplacement du fichier afin que le fichier spécifique à télécharger puisse être personnalisé à l'aide d'une variable d'environnement définie sur le site BuildConfig, plutôt que de mettre à jour le fichier Dockerfile ou le script assemble.

Vous avez le choix entre différentes méthodes pour définir les variables d'environnement :

  • Utilisation du fichier .s2i/environment ] (uniquement pour une stratégie de construction de source)
  • Mise en place BuildConfig
  • Fournir explicitement en utilisant oc start-build --env (uniquement pour les constructions qui sont déclenchées manuellement)

Vous pouvez fournir aux constructions un fichier .docker/config.json avec des informations d'identification valides pour les registres de conteneurs privés. Cela vous permet de pousser l'image de sortie dans un registre d'images de conteneurs privé ou de tirer une image de construction du registre d'images de conteneurs privé qui nécessite une authentification.

Vous pouvez fournir des informations d'identification pour plusieurs référentiels dans le même registre, chacun avec des informations d'identification spécifiques à ce chemin d'accès au registre.

Note

Pour le registre d'images de conteneurs d'OpenShift Container Platform, cela n'est pas nécessaire car les secrets sont générés automatiquement pour vous par OpenShift Container Platform.

Le fichier .docker/config.json se trouve par défaut dans votre répertoire personnel et a le format suivant :

auths:
  index.docker.io/v1/: 
1

    auth: "YWRfbGzhcGU6R2labnRib21ifTE=" 
2

    email: "user@example.com" 
3

  docker.io/my-namespace/my-user/my-image: 
4

    auth: "GzhYWRGU6R2fbclabnRgbkSp=""
    email: "user@example.com"
  docker.io/my-namespace: 
5

    auth: "GzhYWRGU6R2deesfrRgbkSp=""
    email: "user@example.com"
Copy to Clipboard Toggle word wrap
1
URL du registre.
2
Mot de passe crypté.
3
Adresse électronique pour la connexion.
4
URL et informations d'identification pour une image spécifique dans un espace de noms.
5
URL et informations d'identification pour un espace de noms du registre.

Vous pouvez définir plusieurs registres d'images de conteneurs ou plusieurs référentiels dans le même registre. Vous pouvez également ajouter des entrées d'authentification à ce fichier en exécutant la commande docker login. Le fichier sera créé s'il n'existe pas.

Kubernetes fournit des objets Secret, qui peuvent être utilisés pour stocker la configuration et les mots de passe.

Conditions préalables

  • Vous devez disposer d'un fichier .docker/config.json.

Procédure

  1. Créez le secret à partir de votre fichier local .docker/config.json:

    $ oc create secret generic dockerhub \
        --from-file=.dockerconfigjson=<path/to/.docker/config.json> \
        --type=kubernetes.io/dockerconfigjson
    Copy to Clipboard Toggle word wrap

    Cette opération génère une spécification JSON du secret nommé dockerhub et crée l'objet.

  2. Ajoutez un champ pushSecret dans la section output de BuildConfig et attribuez-lui le nom du secret que vous avez créé, c'est-à-dire dockerhub dans l'exemple précédent :

    spec:
      output:
        to:
          kind: "DockerImage"
          name: "private.registry.com/org/private-image:latest"
        pushSecret:
          name: "dockerhub"
    Copy to Clipboard Toggle word wrap

    Vous pouvez utiliser la commande oc set build-secret pour définir le secret de poussée sur la configuration de construction :

    $ oc set build-secret --push bc/sample-build dockerhub
    Copy to Clipboard Toggle word wrap

    Vous pouvez également lier le secret push au compte de service utilisé par le build au lieu de spécifier le champ pushSecret. Par défaut, les builds utilisent le compte de service builder. Le secret de poussée est automatiquement ajouté à la compilation si le secret contient un identifiant qui correspond au référentiel hébergeant l'image de sortie de la compilation.

    $ oc secrets link builder dockerhub
    Copy to Clipboard Toggle word wrap
  3. Tirer l'image du conteneur constructeur d'un registre privé d'images de conteneurs en spécifiant le champ pullSecret, qui fait partie de la définition de la stratégie de construction :

    strategy:
      sourceStrategy:
        from:
          kind: "DockerImage"
          name: "docker.io/user/private_repository"
        pullSecret:
          name: "dockerhub"
    Copy to Clipboard Toggle word wrap

    Vous pouvez utiliser la commande oc set build-secret pour définir le secret d'extraction sur la configuration de construction :

    $ oc set build-secret --pull bc/sample-build dockerhub
    Copy to Clipboard Toggle word wrap
    Note

    Cet exemple utilise pullSecret dans une version Source, mais il est également applicable dans les versions Docker et Custom.

    Vous pouvez également lier le secret d'extraction au compte de service utilisé par la compilation au lieu de spécifier le champ pullSecret. Par défaut, les builds utilisent le compte de service builder. Le secret d'extraction est automatiquement ajouté à la compilation si le secret contient un identifiant qui correspond au référentiel hébergeant l'image d'entrée de la compilation. Pour lier le secret d'extraction au compte de service utilisé par la compilation au lieu de spécifier le champ pullSecret, exécutez :

    $ oc secrets link builder dockerhub
    Copy to Clipboard Toggle word wrap
    Note

    Vous devez spécifier une image from dans la spécification BuildConfig pour bénéficier de cette fonctionnalité. Les constructions de stratégie Docker générées par oc new-build ou oc new-app peuvent ne pas le faire dans certaines situations.

2.3.9. Construire des environnements

Comme pour les variables d'environnement pod, les variables d'environnement build peuvent être définies en termes de références à d'autres ressources ou variables à l'aide de l'API Downward. Il y a quelques exceptions, qui sont notées.

Vous pouvez également gérer les variables d'environnement définies dans le site BuildConfig à l'aide de la commande oc set env.

Note

Le référencement des ressources du conteneur à l'aide de valueFrom dans les variables d'environnement de construction n'est pas pris en charge, car les références sont résolues avant la création du conteneur.

Vous pouvez injecter des informations sur l'objet de construction en définissant la variable d'environnement fieldPath source à l'adresse JsonPath du champ dont vous souhaitez obtenir la valeur.

Note

La stratégie Jenkins Pipeline ne prend pas en charge la syntaxe valueFrom pour les variables d'environnement.

Procédure

  • Définissez la source de la variable d'environnement fieldPath à l'adresse JsonPath du champ dont vous souhaitez obtenir la valeur :

    env:
      - name: FIELDREF_ENV
        valueFrom:
          fieldRef:
            fieldPath: metadata.name
    Copy to Clipboard Toggle word wrap
2.3.9.2. Utiliser des secrets comme variables d'environnement

Vous pouvez rendre les valeurs clés des secrets disponibles en tant que variables d'environnement à l'aide de la syntaxe valueFrom.

Important

Cette méthode affiche les secrets en texte brut dans la sortie de la console du pod de construction. Pour éviter cela, utilisez plutôt des secrets d'entrée et des cartes de configuration.

Procédure

  • Pour utiliser un secret comme variable d'environnement, définissez la syntaxe valueFrom:

    apiVersion: build.openshift.io/v1
    kind: BuildConfig
    metadata:
      name: secret-example-bc
    spec:
      strategy:
        sourceStrategy:
          env:
          - name: MYVAL
            valueFrom:
              secretKeyRef:
                key: myval
                name: mysecret
    Copy to Clipboard Toggle word wrap

2.3.10. Service servant les secrets de certificat

Les secrets de certificats de service sont destinés à prendre en charge des applications intergicielles complexes qui nécessitent des certificats prêts à l'emploi. Ils ont les mêmes paramètres que les certificats de serveur générés par l'outil d'administration pour les nœuds et les maîtres.

Procédure

Pour sécuriser la communication avec votre service, demandez au cluster de générer un couple certificat/clé de service signé dans un secret de votre espace de noms.

  • Définissez l'annotation service.beta.openshift.io/serving-cert-secret-name sur votre service avec la valeur fixée au nom que vous voulez utiliser pour votre secret.

    Ensuite, votre PodSpec peut monter ce secret. Lorsqu'il est disponible, votre pod s'exécute. Le certificat est bon pour le nom DNS du service interne, <service.name>.<service.namespace>.svc.

    Le certificat et la clé sont au format PEM et sont stockés respectivement dans tls.crt et tls.key. La paire certificat/clé est automatiquement remplacée lorsqu'elle est proche de l'expiration. La date d'expiration est indiquée dans l'annotation service.beta.openshift.io/expiry sur le secret, qui est au format RFC3339.

Note

Dans la plupart des cas, le nom DNS du service <service.name>.<service.namespace>.svc n'est pas routable de l'extérieur. L'utilisation principale de <service.name>.<service.namespace>.svc est pour la communication à l'intérieur d'un cluster ou d'un service, et avec des itinéraires de re-cryptage.

Les autres pods peuvent faire confiance aux certificats créés par le cluster, qui ne sont signés que pour les noms DNS internes, en utilisant le bundle de l'autorité de certification (CA) dans le fichier /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt qui est automatiquement monté dans leur pod.

L'algorithme de signature pour cette fonctionnalité est x509.SHA256WithRSA. Pour effectuer une rotation manuelle, supprimez le secret généré. Un nouveau certificat est créé.

2.3.11. Restrictions en matière de secrets

Pour utiliser un secret, un module doit faire référence au secret. Un secret peut être utilisé avec un module de trois façons :

  • Pour remplir les variables d'environnement des conteneurs.
  • En tant que fichiers dans un volume monté sur un ou plusieurs de ses conteneurs.
  • Par kubelet lors de l'extraction des images pour le pod.

Les secrets de type volume écrivent les données dans le conteneur sous forme de fichier en utilisant le mécanisme de volume. imagePullSecrets utilise des comptes de service pour l'injection automatique du secret dans tous les pods d'un espace de noms.

Lorsqu'un modèle contient une définition de secret, le seul moyen pour le modèle d'utiliser le secret fourni est de s'assurer que les sources de volume du secret sont validées et que la référence d'objet spécifiée pointe effectivement vers un objet de type Secret. Par conséquent, un secret doit être créé avant tous les pods qui en dépendent. Le moyen le plus efficace de s'en assurer est de l'injecter automatiquement par l'intermédiaire d'un compte de service.

Les objets API secrets résident dans un espace de noms. Ils ne peuvent être référencés que par les pods de ce même espace de noms.

La taille des secrets individuels est limitée à 1 Mo. Il s'agit de décourager la création de secrets volumineux qui épuiseraient la mémoire de l'apiserver et du kubelet. Cependant, la création d'un certain nombre de secrets plus petits pourrait également épuiser la mémoire.

2.4. Gestion des résultats de la compilation

Les sections suivantes présentent une vue d'ensemble et des instructions pour la gestion des résultats de la compilation.

2.4.1. Production d'un bâtiment

Les constructions qui utilisent la stratégie docker ou source-to-image (S2I) aboutissent à la création d'une nouvelle image de conteneur. L'image est ensuite poussée vers le registre d'images de conteneurs spécifié dans la section output de la spécification Build.

Si le type de sortie est ImageStreamTag, alors l'image sera poussée vers le registre d'images intégré d'OpenShift et étiquetée dans le flux d'images spécifié. Si la sortie est de type DockerImage, alors le nom de la référence de sortie sera utilisé comme spécification docker push. La spécification peut contenir un registre ou sera par défaut DockerHub si aucun registre n'est spécifié. Si la section output de la spécification de construction est vide, alors l'image ne sera pas poussée à la fin de la construction.

Sortie vers un ImageStreamTag

spec:
  output:
    to:
      kind: "ImageStreamTag"
      name: "sample-image:latest"
Copy to Clipboard Toggle word wrap

Sortie vers une spécification docker Push

spec:
  output:
    to:
      kind: "DockerImage"
      name: "my-registry.mycompany.com:5000/myimages/myimage:tag"
Copy to Clipboard Toggle word wrap

2.4.2. Variables d'environnement de l'image de sortie

docker et la stratégie source-to-image (S2I) définissent les variables d'environnement suivantes sur les images de sortie :

Expand
VariableDescription

OPENSHIFT_BUILD_NAME

Nom de la construction

OPENSHIFT_BUILD_NAMESPACE

Espace de noms de la construction

OPENSHIFT_BUILD_SOURCE

L'URL source de la construction

OPENSHIFT_BUILD_REFERENCE

La référence Git utilisée dans la construction

OPENSHIFT_BUILD_COMMIT

Source commit utilisé dans la construction

De plus, toute variable d'environnement définie par l'utilisateur, par exemple celles configurées avec les options S2I] ou docker strategy, fera également partie de la liste des variables d'environnement de l'image de sortie.

2.4.3. Étiquettes de l'image de sortie

docker et les constructions source-to-image (S2I)` définissent les étiquettes suivantes sur les images de sortie :

Expand
ÉtiquetteDescription

io.openshift.build.commit.author

Auteur du commit source utilisé dans le build

io.openshift.build.commit.date

Date du commit source utilisé dans le build

io.openshift.build.commit.id

Hash du commit source utilisé dans le build

io.openshift.build.commit.message

Message du commit source utilisé dans la construction

io.openshift.build.commit.ref

Branche ou référence spécifiée dans la source

io.openshift.build.source-location

URL source pour la construction

Vous pouvez également utiliser le champ BuildConfig.spec.output.imageLabels pour spécifier une liste d'étiquettes personnalisées qui seront appliquées à chaque image construite à partir de la configuration de construction.

Étiquettes personnalisées à appliquer aux images construites

spec:
  output:
    to:
      kind: "ImageStreamTag"
      name: "my-image:latest"
    imageLabels:
    - name: "vendor"
      value: "MyCompany"
    - name: "authoritative-source-url"
      value: "registry.mycompany.com"
Copy to Clipboard Toggle word wrap

2.5. Utiliser des stratégies de construction

Les sections suivantes définissent les principales stratégies de construction prises en charge et expliquent comment les utiliser.

2.5.1. Construction Docker

OpenShift Container Platform utilise Buildah pour construire une image de conteneur à partir d'un fichier Docker. Pour plus d'informations sur la construction d'images de conteneurs avec des Dockerfiles, voir la documentation de référence Dockerfile.

Astuce

Si vous définissez les arguments de construction de Docker en utilisant le tableau buildArgs, voir Comprendre comment ARG et FROM interagissent dans la documentation de référence de Dockerfile.

2.5.1.1. Remplacer le fichier Dockerfile de l'image

Vous pouvez remplacer l'instruction FROM du fichier Docker par l'instruction from de l'objet BuildConfig. Si le fichier Docker utilise des constructions en plusieurs étapes, l'image de la dernière instruction FROM sera remplacée.

Procédure

Pour remplacer l'instruction FROM du fichier Docker par l'instruction from du fichier BuildConfig.

strategy:
  dockerStrategy:
    from:
      kind: "ImageStreamTag"
      name: "debian:latest"
Copy to Clipboard Toggle word wrap
2.5.1.2. Utilisation du chemin d'accès au fichier Docker

Par défaut, les constructions Docker utilisent un Dockerfile situé à la racine du contexte spécifié dans le champ BuildConfig.spec.source.contextDir.

Le champ dockerfilePath permet au build d'utiliser un chemin différent pour localiser votre Dockerfile, par rapport au champ BuildConfig.spec.source.contextDir. Il peut s'agir d'un nom de fichier différent du Dockerfile par défaut, comme MyDockerfile, ou d'un chemin vers un Dockerfile dans un sous-répertoire, comme dockerfiles/app1/Dockerfile.

Procédure

Pour utiliser le champ dockerfilePath afin que le build utilise un chemin différent pour localiser votre Dockerfile, définissez :

strategy:
  dockerStrategy:
    dockerfilePath: dockerfiles/app1/Dockerfile
Copy to Clipboard Toggle word wrap
2.5.1.3. Utiliser les variables d'environnement de Docker

Pour rendre les variables d'environnement disponibles au processus de construction de docker et à l'image résultante, vous pouvez ajouter des variables d'environnement à la définition dockerStrategy de la configuration de construction.

Les variables d'environnement qui y sont définies sont insérées sous la forme d'une seule instruction ENV Dockerfile juste après l'instruction FROM, de sorte qu'elles puissent être référencées ultérieurement dans le Dockerfile.

Procédure

Les variables sont définies lors de la construction et restent dans l'image de sortie, elles seront donc également présentes dans tout conteneur qui exécute cette image.

Par exemple, la définition d'un proxy HTTP personnalisé à utiliser lors de la construction et de l'exécution :

dockerStrategy:
...
  env:
    - name: "HTTP_PROXY"
      value: "http://myproxy.net:5187/"
Copy to Clipboard Toggle word wrap

Vous pouvez également gérer les variables d'environnement définies dans la configuration de construction à l'aide de la commande oc set env.

2.5.1.4. Ajouter des arguments de construction de docker

Vous pouvez définir les arguments de construction de docker en utilisant le tableau buildArgs. Les arguments de construction sont transmis à docker lorsqu'une construction est lancée.

Astuce

Voir Comprendre comment ARG et FROM interagissent dans la documentation de référence Dockerfile.

Procédure

Pour définir les arguments de construction de docker, ajoutez des entrées au tableau buildArgs, qui se trouve dans la définition dockerStrategy de l'objet BuildConfig. Par exemple :

dockerStrategy:
...
  buildArgs:
    - name: "foo"
      value: "bar"
Copy to Clipboard Toggle word wrap
Note

Seuls les champs name et value sont pris en charge. Les paramètres du champ valueFrom sont ignorés.

Les constructions Docker créent normalement une couche représentant chaque instruction dans un Dockerfile. En définissant imageOptimizationPolicy sur SkipLayers, on fusionne toutes les instructions en une seule couche au-dessus de l'image de base.

Procédure

  • Réglez le site imageOptimizationPolicy sur SkipLayers:

    strategy:
      dockerStrategy:
        imageOptimizationPolicy: SkipLayers
    Copy to Clipboard Toggle word wrap
2.5.1.6. Utilisation des volumes de construction

Vous pouvez monter des volumes de construction pour permettre aux constructions en cours d'accéder aux informations que vous ne souhaitez pas conserver dans l'image du conteneur de sortie.

Les volumes de construction fournissent des informations sensibles, telles que les références du référentiel, dont l'environnement de construction ou la configuration n'a besoin qu'au moment de la construction. Les volumes de construction sont différents des entrées de construction, dont les données peuvent persister dans l'image du conteneur de sortie.

Les points de montage des volumes de construction, à partir desquels la construction en cours lit les données, sont fonctionnellement similaires aux montages des volumes de pods.

Procédure

  • Dans la définition dockerStrategy de l'objet BuildConfig, ajoutez tous les volumes de construction au tableau volumes. Par exemple :

    spec:
      dockerStrategy:
        volumes:
          - name: secret-mvn 
    1
    
            mounts:
            - destinationPath: /opt/app-root/src/.ssh 
    2
    
            source:
              type: Secret 
    3
    
              secret:
                secretName: my-secret 
    4
    
          - name: settings-mvn 
    5
    
            mounts:
            - destinationPath: /opt/app-root/src/.m2  
    6
    
            source:
              type: ConfigMap 
    7
    
              configMap:
                name: my-config 
    8
    
          - name: my-csi-volume 
    9
    
            mounts:
            - destinationPath: /opt/app-root/src/some_path  
    10
    
            source:
              type: CSI 
    11
    
              csi:
                driver: csi.sharedresource.openshift.io 
    12
    
                readOnly: true 
    13
    
                volumeAttributes: 
    14
    
                  attribute: value
    Copy to Clipboard Toggle word wrap
    1 5 9
    Obligatoire. Un nom unique.
    2 6 10
    Obligatoire. Le chemin absolu du point de montage. Il ne doit pas contenir .. ou : et ne doit pas entrer en conflit avec le chemin de destination généré par le constructeur. /opt/app-root/src est le répertoire d'accueil par défaut pour de nombreuses images Red Hat S2I.
    3 7 11
    Obligatoire. Le type de source, ConfigMap, Secret, ou CSI.
    4 8
    Obligatoire. Le nom de la source.
    12
    Nécessaire. Le pilote qui fournit le volume CSI éphémère.
    13
    Obligatoire. Cette valeur doit être définie sur true. Fournit un volume en lecture seule.
    14
    Facultatif. Les attributs de volume du volume CSI éphémère. Consultez la documentation du pilote CSI pour connaître les clés et les valeurs des attributs pris en charge.
Note

Le pilote CSI pour ressources partagées est pris en charge en tant que fonction d'aperçu technologique.

2.5.2. Construction de la source à l'image

Source-to-image (S2I) est un outil permettant de créer des images de conteneurs reproductibles. Il produit des images prêtes à l'emploi en injectant la source d'une application dans une image de conteneur et en assemblant une nouvelle image. La nouvelle image incorpore l'image de base, le constructeur et la source construite et est prête à être utilisée avec la commande buildah run. S2I prend en charge les constructions incrémentielles, qui réutilisent les dépendances téléchargées précédemment, les artefacts construits précédemment, etc.

Source-to-image (S2I) peut effectuer des constructions incrémentielles, ce qui signifie qu'il réutilise les artefacts des images construites précédemment.

Procédure

  • Pour créer une construction incrémentielle, créez une stratégie avec la modification suivante de la définition de la stratégie :

    strategy:
      sourceStrategy:
        from:
          kind: "ImageStreamTag"
          name: "incremental-image:latest" 
    1
    
        incremental: true 
    2
    Copy to Clipboard Toggle word wrap
    1
    Spécifiez une image qui prend en charge les constructions incrémentielles. Consultez la documentation de l'image du constructeur pour savoir si elle prend en charge ce comportement.
    2
    Cette option permet de contrôler si une construction incrémentale est tentée. Si l'image du constructeur ne prend pas en charge les constructions incrémentielles, la construction réussira quand même, mais vous obtiendrez un message indiquant que la construction incrémentielle n'a pas réussi à cause d'un script save-artifacts manquant.

Vous pouvez remplacer les scripts source-image (S2I) assemble, run et save-artifacts fournis par l'image de construction.

Procédure

Pour remplacer les scripts S2I assemble, run, et save-artifacts fournis par l'image du constructeur, il faut soit :

  • Fournissez un script assemble, run ou save-artifacts dans le répertoire .s2i/bin du référentiel des sources de votre application.
  • Fournir l'URL d'un répertoire contenant les scripts dans le cadre de la définition de la stratégie. Par exemple :

    strategy:
      sourceStrategy:
        from:
          kind: "ImageStreamTag"
          name: "builder-image:latest"
        scripts: "http://somehost.com/scripts_directory" 
    1
    Copy to Clipboard Toggle word wrap
    1
    Ce chemin sera complété par run, assemble, et save-artifacts. Si l'un ou tous les scripts sont trouvés, ils seront utilisés à la place des scripts du même nom fournis dans l'image.
Note

Les fichiers situés à l'URL scripts sont prioritaires sur les fichiers situés à l'URL .s2i/bin du référentiel source.

2.5.2.3. Variables d'environnement source-image

Il existe deux façons de mettre les variables d'environnement à la disposition du processus de compilation des sources et de l'image qui en résulte. Les fichiers d'environnement et les valeurs d'environnement BuildConfig. Les variables fournies seront présentes lors du processus de construction et dans l'image de sortie.

Source build vous permet de définir des valeurs d'environnement, une par ligne, à l'intérieur de votre application, en les spécifiant dans un fichier .s2i/environment dans le dépôt de sources. Les variables d'environnement spécifiées dans ce fichier sont présentes pendant le processus de construction et dans l'image de sortie.

Si vous fournissez un fichier .s2i/environment dans votre dépôt de sources, source-to-image (S2I) lit ce fichier pendant la construction. Cela permet de personnaliser le comportement de la compilation, car le script assemble peut utiliser ces variables.

Procédure

Par exemple, pour désactiver la compilation des actifs pour votre application Rails pendant la construction :

  • Ajouter DISABLE_ASSET_COMPILATION=true dans le fichier .s2i/environment.

En plus des builds, les variables d'environnement spécifiées sont également disponibles dans l'application en cours d'exécution. Par exemple, pour que l'application Rails démarre en mode development au lieu de production:

  • Ajouter RAILS_ENV=development au fichier .s2i/environment.

La liste complète des variables d'environnement prises en charge est disponible dans la section "Utilisation des images" pour chaque image.

Vous pouvez ajouter des variables d'environnement à la définition sourceStrategy de la configuration de construction. Les variables d'environnement définies à cet endroit sont visibles lors de l'exécution du script assemble et seront définies dans l'image de sortie, ce qui les rend également disponibles pour le script run et le code de l'application.

Procédure

  • Par exemple, pour désactiver la compilation des actifs pour votre application Rails :

    sourceStrategy:
    ...
      env:
        - name: "DISABLE_ASSET_COMPILATION"
          value: "true"
    Copy to Clipboard Toggle word wrap
2.5.2.4. Ignorer les fichiers source à image

Source-to-image (S2I) prend en charge un fichier .s2iignore, qui contient une liste de modèles de fichiers à ignorer. Les fichiers du répertoire de travail de la compilation, tels qu'ils sont fournis par les différentes sources d'entrée, qui correspondent à un modèle trouvé dans le fichier .s2iignore ne seront pas mis à la disposition du script assemble.

Source-to-image (S2I) est un cadre qui facilite l'écriture d'images qui prennent le code source d'une application en entrée et produisent une nouvelle image qui exécute l'application assemblée en sortie.

Le principal avantage de l'utilisation de S2I pour la construction d'images de conteneurs reproductibles est la facilité d'utilisation pour les développeurs. En tant qu'auteur d'une image de construction, vous devez comprendre deux concepts de base pour que vos images offrent les meilleures performances S2I : le processus de construction et les scripts S2I.

Le processus de construction se compose des trois éléments fondamentaux suivants, qui sont combinés pour former une image finale du conteneur :

  • Sources d'information
  • Scripts source-image (S2I)
  • Image du constructeur

S2I génère un Dockerfile avec l'image du constructeur comme première instruction FROM. Le fichier Docker généré par S2I est ensuite transmis à Buildah.

2.5.2.5.2. Comment écrire des scripts source-image ?

Vous pouvez écrire des scripts source-image (S2I) dans n'importe quel langage de programmation, à condition que les scripts soient exécutables dans l'image du constructeur. S2I prend en charge plusieurs options fournissant des scripts assemble/run/save-artifacts. Tous ces emplacements sont vérifiés lors de chaque compilation dans l'ordre suivant :

  1. Un script spécifié dans la configuration de la construction.
  2. Un script trouvé dans le répertoire source de l'application .s2i/bin.
  3. Un script trouvé à l'URL de l'image par défaut avec l'étiquette io.openshift.s2i.scripts-url.

L'étiquette io.openshift.s2i.scripts-url spécifiée dans l'image et le script spécifié dans une configuration de compilation peuvent prendre l'une des formes suivantes :

  • image:///path_to_scripts_dirchemin absolu à l'intérieur de l'image vers un répertoire où se trouvent les scripts S2I.
  • file:///path_to_scripts_dirchemin d'accès : chemin relatif ou absolu vers un répertoire de l'hôte où se trouvent les scripts S2I.
  • http(s)://path_to_scripts_dir: URL d'un répertoire où se trouvent les scripts S2I.
Expand
Tableau 2.1. Scénarios S2I
Le scénarioDescription

assemble

Le script assemble construit les artefacts de l'application à partir d'une source et les place dans les répertoires appropriés à l'intérieur de l'image. Ce script est obligatoire. Le flux de travail pour ce script est le suivant :

  1. Optionnel : Restaurer les artefacts de construction. Si vous souhaitez prendre en charge les constructions incrémentielles, veillez à définir également save-artifacts.
  2. Placez la source d'application à l'endroit souhaité.
  3. Construire les artefacts de l'application.
  4. Installer les artefacts dans des endroits appropriés pour qu'ils fonctionnent.

run

Le script run exécute votre application. Ce script est nécessaire.

save-artifacts

Le script save-artifacts rassemble toutes les dépendances qui peuvent accélérer les processus de construction qui suivent. Ce script est facultatif. Par exemple :

  • Pour Ruby, gems installé par Bundler.
  • Pour Java, .m2 contents.

Ces dépendances sont rassemblées dans un fichier tar et transmises à la sortie standard.

usage

Le script usage vous permet d'informer l'utilisateur sur la manière d'utiliser correctement votre image. Ce script est facultatif.

test/run

Le script test/run vous permet de créer un processus pour vérifier si l'image fonctionne correctement. Ce script est facultatif. Le flux proposé pour ce processus est le suivant

  1. Construire l'image.
  2. Exécutez l'image pour vérifier le script usage.
  3. Exécutez s2i build pour vérifier le script assemble.
  4. Facultatif : Exécutez à nouveau s2i build pour vérifier que les scripts save-artifacts et assemble sauvegardent et restaurent les artefacts.
  5. Exécutez l'image pour vérifier que l'application de test fonctionne.
Note

L'emplacement suggéré pour placer l'application de test construite par votre script test/run est le répertoire test/test-app de votre référentiel d'images.

Example S2I scripts

Les exemples de scripts S2I suivants sont écrits en Bash. Chaque exemple suppose que le contenu de tar est décompressé dans le répertoire /tmp/s2i.

assemble le scénario :

#!/bin/bash

# restore build artifacts
if [ "$(ls /tmp/s2i/artifacts/ 2>/dev/null)" ]; then
    mv /tmp/s2i/artifacts/* $HOME/.
fi

# move the application source
mv /tmp/s2i/src $HOME/src

# build application artifacts
pushd ${HOME}
make all

# install the artifacts
make install
popd
Copy to Clipboard Toggle word wrap

run le scénario :

#!/bin/bash

# run the application
/opt/application/run.sh
Copy to Clipboard Toggle word wrap

save-artifacts le scénario :

#!/bin/bash

pushd ${HOME}
if [ -d deps ]; then
    # all deps contents to tar stream
    tar cf - deps
fi
popd
Copy to Clipboard Toggle word wrap

usage le scénario :

#!/bin/bash

# inform the user how to use the image
cat <<EOF
This is a S2I sample builder image, to use it, install
https://github.com/openshift/source-to-image
EOF
Copy to Clipboard Toggle word wrap

2.5.2.6. Utilisation des volumes de construction

Vous pouvez monter des volumes de construction pour permettre aux constructions en cours d'accéder aux informations que vous ne souhaitez pas conserver dans l'image du conteneur de sortie.

Les volumes de construction fournissent des informations sensibles, telles que les références du référentiel, dont l'environnement de construction ou la configuration n'a besoin qu'au moment de la construction. Les volumes de construction sont différents des entrées de construction, dont les données peuvent persister dans l'image du conteneur de sortie.

Les points de montage des volumes de construction, à partir desquels la construction en cours lit les données, sont fonctionnellement similaires aux montages des volumes de pods.

Procédure

  • Dans la définition sourceStrategy de l'objet BuildConfig, ajoutez tous les volumes de construction au tableau volumes. Par exemple :

    spec:
      sourceStrategy:
        volumes:
          - name: secret-mvn 
    1
    
            mounts:
            - destinationPath: /opt/app-root/src/.ssh 
    2
    
            source:
              type: Secret 
    3
    
              secret:
                secretName: my-secret 
    4
    
          - name: settings-mvn 
    5
    
            mounts:
            - destinationPath: /opt/app-root/src/.m2 
    6
    
            source:
              type: ConfigMap 
    7
    
              configMap:
                name: my-config 
    8
    
          - name: my-csi-volume 
    9
    
            mounts:
            - destinationPath: /opt/app-root/src/some_path  
    10
    
            source:
              type: CSI 
    11
    
              csi:
                driver: csi.sharedresource.openshift.io 
    12
    
                readOnly: true 
    13
    
                volumeAttributes: 
    14
    
                  attribute: value
    Copy to Clipboard Toggle word wrap
1 5 9
Obligatoire. Un nom unique.
2 6 10
Obligatoire. Le chemin absolu du point de montage. Il ne doit pas contenir .. ou : et ne doit pas entrer en conflit avec le chemin de destination généré par le constructeur. /opt/app-root/src est le répertoire d'accueil par défaut pour de nombreuses images Red Hat S2I.
3 7 11
Obligatoire. Le type de source, ConfigMap, Secret, ou CSI.
4 8
Obligatoire. Le nom de la source.
12
Nécessaire. Le pilote qui fournit le volume CSI éphémère.
13
Obligatoire. Cette valeur doit être définie sur true. Fournit un volume en lecture seule.
14
Facultatif. Les attributs de volume du volume CSI éphémère. Consultez la documentation du pilote CSI pour connaître les clés et les valeurs des attributs pris en charge.
Note

Le pilote CSI pour ressources partagées est pris en charge en tant que fonction d'aperçu technologique.

2.5.3. Construction sur mesure

La stratégie de construction personnalisée permet aux développeurs de définir une image de constructeur spécifique responsable de l'ensemble du processus de construction. L'utilisation de votre propre image de constructeur vous permet de personnaliser votre processus de construction.

Une image de construction personnalisée est une image conteneur simple incorporant la logique du processus de construction, par exemple pour construire des RPM ou des images de base.

Les builds personnalisés sont exécutés avec un niveau de privilège élevé et ne sont pas accessibles aux utilisateurs par défaut. Seuls les utilisateurs à qui l'on peut faire confiance en leur accordant des autorisations d'administration de cluster doivent avoir accès à l'exécution des builds personnalisés.

Vous pouvez utiliser la section customStrategy.from pour indiquer l'image à utiliser pour la construction personnalisée

Procédure

  • Définir la section customStrategy.from:

    strategy:
      customStrategy:
        from:
          kind: "DockerImage"
          name: "openshift/sti-image-builder"
    Copy to Clipboard Toggle word wrap

Outre les secrets pour les sources et les images qui peuvent être ajoutés à tous les types de construction, les stratégies personnalisées permettent d'ajouter une liste arbitraire de secrets au module de construction.

Procédure

  • Pour monter chaque secret à un emplacement spécifique, modifiez les champs secretSource et mountPath du fichier YAML strategy:

    strategy:
      customStrategy:
        secrets:
          - secretSource: 
    1
    
              name: "secret1"
            mountPath: "/tmp/secret1" 
    2
    
          - secretSource:
              name: "secret2"
            mountPath: "/tmp/secret2"
    Copy to Clipboard Toggle word wrap
    1
    secretSource est une référence à un secret dans le même espace de noms que la construction.
    2
    mountPath est le chemin d'accès à l'intérieur du constructeur personnalisé où le secret doit être monté.

Pour mettre les variables d'environnement à la disposition du processus de compilation personnalisé, vous pouvez ajouter des variables d'environnement à la définition customStrategy de la configuration de compilation.

Les variables d'environnement qui y sont définies sont transmises au pod qui exécute la construction personnalisée.

Procédure

  1. Définir un proxy HTTP personnalisé à utiliser lors de la construction :

    customStrategy:
    ...
      env:
        - name: "HTTP_PROXY"
          value: "http://myproxy.net:5187/"
    Copy to Clipboard Toggle word wrap
  2. Pour gérer les variables d'environnement définies dans la configuration de la compilation, entrez la commande suivante :

    oc set env <enter_variables> $ oc set env <enter_variables>
    Copy to Clipboard Toggle word wrap

La stratégie de construction personnalisée d'OpenShift Container Platform vous permet de définir une image de construction spécifique responsable de l'ensemble du processus de construction. Lorsque vous avez besoin d'un build pour produire des artefacts individuels tels que des packages, des JAR, des WAR, des ZIP installables ou des images de base, utilisez une image de constructeur personnalisée à l'aide de la stratégie de build personnalisée.

Une image de construction personnalisée est une image de conteneur simple incorporant la logique du processus de construction, qui est utilisée pour construire des artefacts tels que des RPM ou des images de conteneur de base.

En outre, le constructeur personnalisé permet de mettre en œuvre n'importe quel processus de construction étendu, tel qu'un flux CI/CD qui exécute des tests unitaires ou d'intégration.

2.5.3.4.1. Image personnalisée du constructeur

Lors de son invocation, une image de constructeur personnalisé reçoit les variables d'environnement suivantes avec les informations nécessaires pour procéder à la construction :

Expand
Tableau 2.2. Variables d'environnement du Custom Builder
Nom de la variableDescription

BUILD

L'intégralité du JSON sérialisé de la définition de l'objet Build. Si vous devez utiliser une version spécifique de l'API pour la sérialisation, vous pouvez définir le paramètre buildAPIVersion dans la spécification de la stratégie personnalisée de la configuration de construction.

SOURCE_REPOSITORY

L'URL d'un dépôt Git contenant les sources à construire.

SOURCE_URI

Utilise la même valeur que SOURCE_REPOSITORY. L'un ou l'autre peut être utilisé.

SOURCE_CONTEXT_DIR

Spécifie le sous-répertoire du dépôt Git à utiliser lors de la construction. Uniquement présent s'il est défini.

SOURCE_REF

La référence Git à construire.

ORIGIN_VERSION

La version du master OpenShift Container Platform qui a créé cet objet de construction.

OUTPUT_REGISTRY

Le registre de l'image du conteneur dans lequel l'image doit être transférée.

OUTPUT_IMAGE

Le nom de l'étiquette de l'image du conteneur pour l'image en cours de construction.

PUSH_DOCKERCFG_PATH

Chemin d'accès aux informations d'identification du registre des conteneurs pour l'exécution d'une opération podman push.

2.5.3.4.2. Flux de travail des constructeurs personnalisés

Bien que les auteurs d'images de construction personnalisées aient une certaine flexibilité dans la définition du processus de construction, votre image de construction doit respecter les étapes suivantes nécessaires à l'exécution d'une construction au sein d'OpenShift Container Platform :

  1. La définition de l'objet Build contient toutes les informations nécessaires sur les paramètres d'entrée de la construction.
  2. Exécuter le processus de construction.
  3. Si votre compilation produit une image, poussez-la dans l'emplacement de sortie de la compilation s'il est défini. D'autres emplacements de sortie peuvent être passés avec des variables d'environnement.

2.5.4. Construction d'un pipeline

Important

La stratégie de construction Pipeline est obsolète dans OpenShift Container Platform 4. Des fonctionnalités équivalentes et améliorées sont présentes dans les Pipelines d'OpenShift Container Platform basés sur Tekton.

Les images Jenkins sur OpenShift Container Platform sont entièrement prises en charge et les utilisateurs doivent suivre la documentation utilisateur de Jenkins pour définir leur jenkinsfile dans un travail ou le stocker dans un système de gestion du contrôle de la source.

La stratégie de construction Pipeline permet aux développeurs de définir un pipeline Jenkins qui sera utilisé par le plugin Jenkins pipeline. Le build peut être démarré, surveillé et géré par OpenShift Container Platform de la même manière que n'importe quel autre type de build.

Les flux de travail du pipeline sont définis dans un site jenkinsfile, soit directement intégré dans la configuration de construction, soit fourni dans un dépôt Git et référencé par la configuration de construction.

Important

La stratégie de construction Pipeline est obsolète dans OpenShift Container Platform 4. Des fonctionnalités équivalentes et améliorées sont présentes dans les Pipelines d'OpenShift Container Platform basés sur Tekton.

Les images Jenkins sur OpenShift Container Platform sont entièrement prises en charge et les utilisateurs doivent suivre la documentation utilisateur de Jenkins pour définir leur jenkinsfile dans un travail ou le stocker dans un système de gestion du contrôle de la source.

Les pipelines vous permettent de contrôler la construction, le déploiement et la promotion de vos applications sur OpenShift Container Platform. En combinant la stratégie de construction Jenkins Pipeline, jenkinsfiles, et le langage spécifique au domaine OpenShift Container Platform (DSL) fourni par le plugin client Jenkins, vous pouvez créer des pipelines avancés de construction, de test, de déploiement et de promotion pour n'importe quel scénario.

OpenShift Container Platform Jenkins Sync Plugin

Le plugin Jenkins Sync d'OpenShift Container Platform maintient la configuration et les objets de construction synchronisés avec les travaux et les constructions Jenkins, et fournit les éléments suivants :

  • Création dynamique de tâches et d'exécutions dans Jenkins.
  • Création dynamique de modèles de pods d'agents à partir de flux d'images, de balises de flux d'images ou de cartes de configuration.
  • Injection de variables d'environnement.
  • Visualisation du pipeline dans la console web de OpenShift Container Platform.
  • Intégration avec le plugin Jenkins Git, qui transmet les informations de commit des builds d'OpenShift Container Platform au plugin Jenkins Git.
  • Synchronisation des secrets dans les entrées de justificatifs Jenkins.

OpenShift Container Platform Jenkins Client Plugin

Le plugin client Jenkins d'OpenShift Container Platform est un plugin Jenkins qui vise à fournir une syntaxe de pipeline Jenkins lisible, concise, complète et fluide pour des interactions riches avec un serveur API d'OpenShift Container Platform. Le plugin utilise l'outil de ligne de commande d'OpenShift Container Platform, oc, qui doit être disponible sur les nœuds exécutant le script.

Le plugin Jenkins Client doit être installé sur votre master Jenkins afin que le DSL OpenShift Container Platform soit disponible pour être utilisé dans le site jenkinsfile pour votre application. Ce plugin est installé et activé par défaut lors de l'utilisation de l'image Jenkins d'OpenShift Container Platform.

Pour les Pipelines OpenShift Container Platform dans votre projet, vous devez utiliser la stratégie de construction de Pipeline Jenkins. Cette stratégie utilise par défaut une adresse jenkinsfile à la racine de votre référentiel source, mais fournit également les options de configuration suivantes :

  • Un champ en ligne jenkinsfile dans votre configuration de construction.
  • Un champ jenkinsfilePath dans votre configuration de construction qui référence l'emplacement de jenkinsfile à utiliser par rapport à la source contextDir.
Note

Le champ facultatif jenkinsfilePath indique le nom du fichier à utiliser, par rapport à la source contextDir. Si contextDir est omis, la valeur par défaut est la racine du référentiel. Si jenkinsfilePath est omis, la valeur par défaut est jenkinsfile.

Important

La stratégie de construction Pipeline est obsolète dans OpenShift Container Platform 4. Des fonctionnalités équivalentes et améliorées sont présentes dans les Pipelines d'OpenShift Container Platform basés sur Tekton.

Les images Jenkins sur OpenShift Container Platform sont entièrement prises en charge et les utilisateurs doivent suivre la documentation utilisateur de Jenkins pour définir leur jenkinsfile dans un travail ou le stocker dans un système de gestion du contrôle de la source.

Le site jenkinsfile utilise la syntaxe standard du langage groovy pour permettre un contrôle précis de la configuration, de la construction et du déploiement de votre application.

Vous pouvez fournir le site jenkinsfile de l'une des manières suivantes :

  • Un fichier situé dans votre dépôt de code source.
  • Intégrée dans votre configuration de construction à l'aide du champ jenkinsfile.

Si vous utilisez la première option, le site jenkinsfile doit être inclus dans le dépôt du code source de vos applications à l'un des endroits suivants :

  • Un fichier nommé jenkinsfile à la racine de votre référentiel.
  • Un fichier nommé jenkinsfile à la racine de la source contextDir de votre référentiel.
  • Un nom de fichier spécifié via le champ jenkinsfilePath de la section JenkinsPipelineStrategy de votre BuildConfig, qui est relatif à la source contextDir si elle est fournie, sinon il prend par défaut la racine du référentiel.

Le site jenkinsfile est exécuté sur le pod d'agent Jenkins, qui doit disposer des binaires du client OpenShift Container Platform si vous avez l'intention d'utiliser le DSL OpenShift Container Platform.

Procédure

Pour fournir le fichier Jenkins, vous pouvez soit

  • Intégrer le fichier Jenkins dans la configuration de construction.
  • Inclure dans la configuration de construction une référence au dépôt Git qui contient le fichier Jenkins.

Définition de l'intégration

kind: "BuildConfig"
apiVersion: "v1"
metadata:
  name: "sample-pipeline"
spec:
  strategy:
    jenkinsPipelineStrategy:
      jenkinsfile: |-
        node('agent') {
          stage 'build'
          openshiftBuild(buildConfig: 'ruby-sample-build', showBuildLogs: 'true')
          stage 'deploy'
          openshiftDeploy(deploymentConfig: 'frontend')
        }
Copy to Clipboard Toggle word wrap

Référence au dépôt Git

kind: "BuildConfig"
apiVersion: "v1"
metadata:
  name: "sample-pipeline"
spec:
  source:
    git:
      uri: "https://github.com/openshift/ruby-hello-world"
  strategy:
    jenkinsPipelineStrategy:
      jenkinsfilePath: some/repo/dir/filename 
1
Copy to Clipboard Toggle word wrap

1
Le champ facultatif jenkinsfilePath indique le nom du fichier à utiliser, par rapport à la source contextDir. Si contextDir est omis, la valeur par défaut est la racine du référentiel. Si jenkinsfilePath est omis, la valeur par défaut est jenkinsfile.
Important

La stratégie de construction Pipeline est obsolète dans OpenShift Container Platform 4. Des fonctionnalités équivalentes et améliorées sont présentes dans les Pipelines d'OpenShift Container Platform basés sur Tekton.

Les images Jenkins sur OpenShift Container Platform sont entièrement prises en charge et les utilisateurs doivent suivre la documentation utilisateur de Jenkins pour définir leur jenkinsfile dans un travail ou le stocker dans un système de gestion du contrôle de la source.

Pour mettre les variables d'environnement à la disposition du processus de construction de Pipeline, vous pouvez ajouter des variables d'environnement à la définition jenkinsPipelineStrategy de la configuration de construction.

Une fois définies, les variables d'environnement seront définies comme paramètres pour tout travail Jenkins associé à la configuration de construction.

Procédure

  • Pour définir les variables d'environnement à utiliser lors de la construction, éditez le fichier YAML :

    jenkinsPipelineStrategy:
    ...
      env:
        - name: "FOO"
          value: "BAR"
    Copy to Clipboard Toggle word wrap

Vous pouvez également gérer les variables d'environnement définies dans la configuration de construction à l'aide de la commande oc set env.

Lorsqu'un travail Jenkins est créé ou mis à jour en fonction des modifications apportées à la configuration de construction d'une stratégie Pipeline, toutes les variables d'environnement de la configuration de construction sont mises en correspondance avec les définitions des paramètres du travail Jenkins, les valeurs par défaut des définitions des paramètres du travail Jenkins étant les valeurs actuelles des variables d'environnement associées.

Après la création initiale du job Jenkins, vous pouvez encore ajouter des paramètres supplémentaires au job à partir de la console Jenkins. Les noms des paramètres diffèrent des noms des variables d'environnement dans la configuration de la construction. Les paramètres sont pris en compte lors du lancement des builds pour ces travaux Jenkins.

La façon dont vous démarrez la construction d'une tâche Jenkins détermine la façon dont les paramètres sont définis.

  • Si vous démarrez avec oc start-build, les valeurs des variables d'environnement dans la configuration de construction sont les paramètres définis pour l'instance de travail correspondante. Toute modification apportée aux valeurs par défaut des paramètres à partir de la console Jenkins est ignorée. Les valeurs de la configuration de construction sont prioritaires.
  • Si vous commencez par oc start-build -e, les valeurs des variables d'environnement spécifiées dans l'option -e sont prioritaires.

    • Si vous spécifiez une variable d'environnement qui ne figure pas dans la configuration de la construction, elle sera ajoutée en tant que définition des paramètres du travail de Jenkins.
    • Toute modification apportée aux paramètres correspondant aux variables d'environnement à partir de la console Jenkins est ignorée. La configuration de construction et ce que vous spécifiez avec oc start-build -e sont prioritaires.
  • Si vous démarrez le travail Jenkins avec la console Jenkins, vous pouvez alors contrôler le réglage des paramètres avec la console Jenkins dans le cadre du lancement d'une compilation pour le travail.
Note

Il est recommandé de spécifier dans la configuration de la construction toutes les variables d'environnement possibles à associer aux paramètres du travail. Cela permet de réduire les entrées/sorties sur disque et d'améliorer les performances lors du traitement par Jenkins.

2.5.4.4. Tutoriel de construction d'un pipeline
Important

La stratégie de construction Pipeline est obsolète dans OpenShift Container Platform 4. Des fonctionnalités équivalentes et améliorées sont présentes dans les Pipelines d'OpenShift Container Platform basés sur Tekton.

Les images Jenkins sur OpenShift Container Platform sont entièrement prises en charge et les utilisateurs doivent suivre la documentation utilisateur de Jenkins pour définir leur jenkinsfile dans un travail ou le stocker dans un système de gestion du contrôle de la source.

Cet exemple montre comment créer un pipeline OpenShift Container Platform qui construira, déploiera et vérifiera une application Node.js/MongoDB en utilisant le modèle nodejs-mongodb.json.

Procédure

  1. Créer le master Jenkins :

      $ oc project <project_name>
    Copy to Clipboard Toggle word wrap

    Sélectionnez le projet que vous souhaitez utiliser ou créez un nouveau projet à l'aide de oc new-project <project_name>.

      $ oc new-app jenkins-ephemeral 
    1
    Copy to Clipboard Toggle word wrap

    Si vous souhaitez utiliser un stockage persistant, utilisez plutôt jenkins-persistent.

  2. Créez un fichier nommé nodejs-sample-pipeline.yaml avec le contenu suivant :

    Note

    Cela crée un objet BuildConfig qui utilise la stratégie du pipeline Jenkins pour construire, déployer et mettre à l'échelle l'application d'exemple Node.js/MongoDB.

    kind: "BuildConfig"
    apiVersion: "v1"
    metadata:
      name: "nodejs-sample-pipeline"
    spec:
      strategy:
        jenkinsPipelineStrategy:
          jenkinsfile: <pipeline content from below>
        type: JenkinsPipeline
    Copy to Clipboard Toggle word wrap
  3. Après avoir créé un objet BuildConfig à l'aide d'un objet jenkinsPipelineStrategy, vous indiquez au pipeline ce qu'il doit faire à l'aide d'un objet inline jenkinsfile:

    Note

    Cet exemple ne met pas en place un dépôt Git pour l'application.

    Le contenu suivant jenkinsfile est écrit en Groovy en utilisant le DSL OpenShift Container Platform. Pour cet exemple, incluez du contenu en ligne dans l'objet BuildConfig en utilisant le style littéral YAML, bien que l'inclusion d'un jenkinsfile dans votre référentiel source soit la méthode préférée.

    def templatePath = 'https://raw.githubusercontent.com/openshift/nodejs-ex/master/openshift/templates/nodejs-mongodb.json' 
    1
    
    def templateName = 'nodejs-mongodb-example' 
    2
    
    pipeline {
      agent {
        node {
          label 'nodejs' 
    3
    
        }
      }
      options {
        timeout(time: 20, unit: 'MINUTES') 
    4
    
      }
      stages {
        stage('preamble') {
            steps {
                script {
                    openshift.withCluster() {
                        openshift.withProject() {
                            echo "Using project: ${openshift.project()}"
                        }
                    }
                }
            }
        }
        stage('cleanup') {
          steps {
            script {
                openshift.withCluster() {
                    openshift.withProject() {
                      openshift.selector("all", [ template : templateName ]).delete() 
    5
    
                      if (openshift.selector("secrets", templateName).exists()) { 
    6
    
                        openshift.selector("secrets", templateName).delete()
                      }
                    }
                }
            }
          }
        }
        stage('create') {
          steps {
            script {
                openshift.withCluster() {
                    openshift.withProject() {
                      openshift.newApp(templatePath) 
    7
    
                    }
                }
            }
          }
        }
        stage('build') {
          steps {
            script {
                openshift.withCluster() {
                    openshift.withProject() {
                      def builds = openshift.selector("bc", templateName).related('builds')
                      timeout(5) { 
    8
    
                        builds.untilEach(1) {
                          return (it.object().status.phase == "Complete")
                        }
                      }
                    }
                }
            }
          }
        }
        stage('deploy') {
          steps {
            script {
                openshift.withCluster() {
                    openshift.withProject() {
                      def rm = openshift.selector("dc", templateName).rollout()
                      timeout(5) { 
    9
    
                        openshift.selector("dc", templateName).related('pods').untilEach(1) {
                          return (it.object().status.phase == "Running")
                        }
                      }
                    }
                }
            }
          }
        }
        stage('tag') {
          steps {
            script {
                openshift.withCluster() {
                    openshift.withProject() {
                      openshift.tag("${templateName}:latest", "${templateName}-staging:latest") 
    10
    
                    }
                }
            }
          }
        }
      }
    }
    Copy to Clipboard Toggle word wrap
    1
    Chemin du modèle à utiliser.
    1 2
    Nom du modèle qui sera créé.
    3
    Créer un pod d'agent node.js sur lequel exécuter ce build.
    4
    Définir un délai de 20 minutes pour ce pipeline.
    5
    Supprimer tout ce qui porte l'étiquette de ce modèle.
    6
    Supprimez tous les secrets portant cette étiquette de modèle.
    7
    Créez une nouvelle application à partir du site templatePath.
    8
    Attendez jusqu'à cinq minutes que la construction soit terminée.
    9
    Attendez jusqu'à cinq minutes que le déploiement soit terminé.
    10
    Si tout le reste a réussi, marquez l'image $ {templateName}:latest comme $ {templateName}-staging:latest. Une configuration de construction de pipeline pour l'environnement de mise à l'essai peut surveiller la modification de l'image $ {templateName}-staging:latest et la déployer ensuite dans l'environnement de mise à l'essai.
    Note

    L'exemple précédent a été écrit en utilisant le style de pipeline déclaratif, mais l'ancien style de pipeline scripté est également pris en charge.

  4. Créez le Pipeline BuildConfig dans votre cluster OpenShift Container Platform :

    $ oc create -f nodejs-sample-pipeline.yaml
    Copy to Clipboard Toggle word wrap
    1. Si vous ne souhaitez pas créer votre propre fichier, vous pouvez utiliser l'exemple du référentiel Origin en exécutant :

      $ oc create -f https://raw.githubusercontent.com/openshift/origin/master/examples/jenkins/pipeline/nodejs-sample-pipeline.yaml
      Copy to Clipboard Toggle word wrap
  5. Démarrer le pipeline :

    $ oc start-build nodejs-sample-pipeline
    Copy to Clipboard Toggle word wrap
    Note

    Vous pouvez également démarrer votre pipeline avec la console web d'OpenShift Container Platform en naviguant vers la section Builds → Pipeline et en cliquant sur Start Pipeline, ou en visitant la console Jenkins, en naviguant vers le pipeline que vous avez créé et en cliquant sur Build Now.

    Une fois le pipeline lancé, vous devriez voir les actions suivantes se dérouler dans votre projet :

    • Une instance de travail est créée sur le serveur Jenkins.
    • Un module d'agent est lancé, si votre pipeline en nécessite un.
    • Le pipeline s'exécute sur le pod agent, ou sur le master si aucun agent n'est requis.

      • Toutes les ressources créées précédemment avec l'étiquette template=nodejs-mongodb-example seront supprimées.
      • Une nouvelle application et toutes ses ressources associées seront créées à partir du modèle nodejs-mongodb-example.
      • Une compilation sera lancée à l'aide de nodejs-mongodb-example BuildConfig .

        • Le pipeline attendra que la construction soit terminée pour déclencher l'étape suivante.
      • Un déploiement sera lancé à l'aide de la configuration de déploiement nodejs-mongodb-example.

        • Le pipeline attendra que le déploiement soit terminé pour déclencher l'étape suivante.
      • Si la construction et le déploiement sont réussis, l'image nodejs-mongodb-example:latest sera étiquetée comme nodejs-mongodb-example:stage.
    • Le pod de l'agent est supprimé, s'il était nécessaire pour le pipeline.

      Note

      La meilleure façon de visualiser l'exécution du pipeline est de l'afficher dans la console web d'OpenShift Container Platform. Vous pouvez visualiser vos pipelines en vous connectant à la console web et en naviguant vers Builds → Pipelines.

2.5.5. Ajouter des secrets avec la console web

Vous pouvez ajouter un secret à votre configuration de construction afin qu'elle puisse accéder à un dépôt privé.

Procédure

Pour ajouter un secret à votre configuration de construction afin qu'elle puisse accéder à un dépôt privé à partir de la console web d'OpenShift Container Platform :

  1. Créez un nouveau projet OpenShift Container Platform.
  2. Créez un secret contenant les informations d'identification permettant d'accéder à un dépôt de code source privé.
  3. Créer une configuration de construction.
  4. Sur la page de l'éditeur de configuration de la construction ou sur la page create app from builder image de la console web, définissez le paramètre Source Secret.
  5. Cliquez sur Save.

2.5.6. Permettre de tirer et de pousser

Vous pouvez activer l'extraction vers un registre privé en définissant le secret d'extraction et la poussée en définissant le secret de poussée dans la configuration de la construction.

Procédure

Pour permettre l'extraction vers un registre privé :

  • Définir le secret d'extraction dans la configuration de la construction.

Pour activer la poussée :

  • Définir le secret de poussée dans la configuration de la construction.

2.6. Constructions d'images personnalisées avec Buildah

Avec OpenShift Container Platform 4.12, un docker socket ne sera pas présent sur les nœuds hôtes. Cela signifie que l'option mount docker socket d'une construction personnalisée n'est pas garantie pour fournir un socket docker accessible pour une utilisation dans une image de construction personnalisée.

Si vous avez besoin de cette capacité pour construire et pousser des images, ajoutez l'outil Buildah à votre image de construction personnalisée et utilisez-le pour construire et pousser l'image dans votre logique de construction personnalisée. Voici un exemple d'exécution de constructions personnalisées à l'aide de Buildah.

Note

L'utilisation de la stratégie de construction personnalisée nécessite des autorisations que les utilisateurs normaux n'ont pas par défaut, car elle permet à l'utilisateur d'exécuter du code arbitraire à l'intérieur d'un conteneur privilégié fonctionnant sur le cluster. Ce niveau d'accès peut être utilisé pour compromettre le cluster et ne doit donc être accordé qu'à des utilisateurs disposant de privilèges administratifs sur le cluster.

2.6.1. Conditions préalables

2.6.2. Création d'artefacts de construction personnalisés

Vous devez créer l'image que vous souhaitez utiliser comme image de construction personnalisée.

Procédure

  1. En partant d'un répertoire vide, créez un fichier nommé Dockerfile avec le contenu suivant :

    FROM registry.redhat.io/rhel8/buildah
    # In this example, `/tmp/build` contains the inputs that build when this
    # custom builder image is run. Normally the custom builder image fetches
    # this content from some location at build time, by using git clone as an example.
    ADD dockerfile.sample /tmp/input/Dockerfile
    ADD build.sh /usr/bin
    RUN chmod a+x /usr/bin/build.sh
    # /usr/bin/build.sh contains the actual custom build logic that will be run when
    # this custom builder image is run.
    ENTRYPOINT ["/usr/bin/build.sh"]
    Copy to Clipboard Toggle word wrap
  2. Dans le même répertoire, créez un fichier nommé dockerfile.sample. Ce fichier est inclus dans l'image de construction personnalisée et définit l'image produite par la construction personnalisée :

    FROM registry.access.redhat.com/ubi8/ubi
    RUN touch /tmp/build
    Copy to Clipboard Toggle word wrap
  3. Dans le même répertoire, créez un fichier nommé build.sh. Ce fichier contient la logique qui est exécutée lors de l'exécution de la version personnalisée :

    #!/bin/sh
    # Note that in this case the build inputs are part of the custom builder image, but normally this
    # is retrieved from an external source.
    cd /tmp/input
    # OUTPUT_REGISTRY and OUTPUT_IMAGE are env variables provided by the custom
    # build framework
    TAG="${OUTPUT_REGISTRY}/${OUTPUT_IMAGE}"
    
    
    # performs the build of the new image defined by dockerfile.sample
    buildah --storage-driver vfs bud --isolation chroot -t ${TAG} .
    
    
    # buildah requires a slight modification to the push secret provided by the service
    # account to use it for pushing the image
    cp /var/run/secrets/openshift.io/push/.dockercfg /tmp
    (echo "{ \"auths\": " ; cat /var/run/secrets/openshift.io/push/.dockercfg ; echo "}") > /tmp/.dockercfg
    
    
    # push the new image to the target for the build
    buildah --storage-driver vfs push --tls-verify=false --authfile /tmp/.dockercfg ${TAG}
    Copy to Clipboard Toggle word wrap

2.6.3. Construire une image personnalisée du constructeur

Vous pouvez utiliser OpenShift Container Platform pour construire et pousser des images de constructeur personnalisées à utiliser dans une stratégie personnalisée.

Conditions préalables

  • Définissez toutes les données qui seront utilisées pour créer votre nouvelle image de constructeur personnalisé.

Procédure

  1. Définissez un objet BuildConfig qui construira votre image de constructeur personnalisée :

    $ oc new-build --binary --strategy=docker --name custom-builder-image
    Copy to Clipboard Toggle word wrap
  2. Depuis le répertoire dans lequel vous avez créé votre image de compilation personnalisée, exécutez la compilation :

    $ oc start-build custom-builder-image --from-dir . -F
    Copy to Clipboard Toggle word wrap

    Une fois la construction terminée, votre nouvelle image de constructeur personnalisé est disponible dans votre projet dans une balise de flux d'images nommée custom-builder-image:latest.

2.6.4. Utiliser l'image personnalisée du constructeur

Vous pouvez définir un objet BuildConfig qui utilise la stratégie personnalisée en conjonction avec votre image de constructeur personnalisé pour exécuter votre logique de construction personnalisée.

Conditions préalables

  • Définir toutes les entrées requises pour la nouvelle image du constructeur personnalisé.
  • Créez votre image de constructeur personnalisée.

Procédure

  1. Créez un fichier nommé buildconfig.yaml. Ce fichier définit l'objet BuildConfig qui est créé dans votre projet et exécuté :

    kind: BuildConfig
    apiVersion: build.openshift.io/v1
    metadata:
      name: sample-custom-build
      labels:
        name: sample-custom-build
      annotations:
        template.alpha.openshift.io/wait-for-ready: 'true'
    spec:
      strategy:
        type: Custom
        customStrategy:
          forcePull: true
          from:
            kind: ImageStreamTag
            name: custom-builder-image:latest
            namespace: <yourproject> 
    1
    
      output:
        to:
          kind: ImageStreamTag
          name: sample-custom:latest
    Copy to Clipboard Toggle word wrap
    1
    Indiquez le nom de votre projet.
  2. Créer le site BuildConfig:

    $ oc create -f buildconfig.yaml
    Copy to Clipboard Toggle word wrap
  3. Créez un fichier nommé imagestream.yaml. Ce fichier définit le flux d'images vers lequel la compilation poussera l'image :

    kind: ImageStream
    apiVersion: image.openshift.io/v1
    metadata:
      name: sample-custom
    spec: {}
    Copy to Clipboard Toggle word wrap
  4. Créer le flux d'images :

    $ oc create -f imagestream.yaml
    Copy to Clipboard Toggle word wrap
  5. Exécutez votre construction personnalisée :

    $ oc start-build sample-custom-build -F
    Copy to Clipboard Toggle word wrap

    Lorsque la construction s'exécute, elle lance un pod qui exécute l'image du constructeur personnalisé qui a été construite précédemment. Le pod exécute la logique build.sh qui est définie comme le point d'entrée de l'image du constructeur personnalisé. La logique build.sh invoque Buildah pour construire le site dockerfile.sample qui a été intégré dans l'image de construction personnalisée, puis utilise Buildah pour pousser la nouvelle image vers le site sample-custom image stream.

2.7. Effectuer et configurer des constructions de base

Les sections suivantes fournissent des instructions pour les opérations de construction de base, y compris le démarrage et l'annulation des constructions, l'édition de BuildConfigs, la suppression de BuildConfigs, l'affichage des détails de la construction et l'accès aux journaux de construction.

2.7.1. Démarrer une construction

Vous pouvez lancer manuellement une nouvelle compilation à partir d'une configuration de compilation existante dans votre projet actuel.

Procédure

Pour lancer manuellement une compilation, entrez la commande suivante :

oc start-build <buildconfig_name>
Copy to Clipboard Toggle word wrap
2.7.1.1. Réexécution d'une compilation

Vous pouvez relancer manuellement une compilation en utilisant l'option --from-build.

Procédure

  • Pour réexécuter manuellement une compilation, entrez la commande suivante :

    oc start-build --from-build=<nom_de_la_construction>
    Copy to Clipboard Toggle word wrap
2.7.1.2. Journaux de construction en continu

Vous pouvez spécifier l'option --follow pour que les journaux de la compilation soient transmis à stdout.

Procédure

  • Pour diffuser manuellement les journaux d'une compilation dans stdout, entrez la commande suivante :

    oc start-build <buildconfig_name> --follow
    Copy to Clipboard Toggle word wrap

Vous pouvez spécifier l'option --env pour définir toute variable d'environnement souhaitée pour la construction.

Procédure

  • Pour spécifier une variable d'environnement souhaitée, entrez la commande suivante :

    $ oc start-build <buildconfig_name> --env=<key>=<value>
    Copy to Clipboard Toggle word wrap
2.7.1.4. Démarrer une compilation avec les sources

Plutôt que de s'appuyer sur une extraction de source Git ou un fichier Docker pour une construction, vous pouvez également démarrer une construction en poussant directement votre source, qui peut être le contenu d'un répertoire de travail Git ou SVN, un ensemble d'artefacts binaires préconstruits que vous souhaitez déployer, ou un simple fichier. Ceci peut être fait en spécifiant l'une des options suivantes pour la commande start-build:

Expand
OptionDescription

--from-dir=<directory>

Spécifie un répertoire qui sera archivé et utilisé comme entrée binaire pour la construction.

--from-file=<file>

Spécifie un fichier unique qui sera le seul fichier dans la source de construction. Le fichier est placé à la racine d'un répertoire vide avec le même nom de fichier que le fichier original fourni.

--from-repo=<local_source_repo>

Spécifie un chemin vers un dépôt local à utiliser comme entrée binaire pour une compilation. Ajoutez l'option --commit pour contrôler quelle branche, balise ou commit est utilisé pour la compilation.

Si vous passez l'une de ces options directement à la compilation, le contenu est transmis à la compilation et remplace les paramètres actuels de la source de la compilation.

Note

Les reconstructions déclenchées par une entrée binaire ne préserveront pas la source sur le serveur, de sorte que les reconstructions déclenchées par des modifications de l'image de base utiliseront la source spécifiée dans la configuration de la construction.

Procédure

  • Lancez une compilation à partir d'une source en utilisant la commande suivante pour envoyer le contenu d'un dépôt Git local sous forme d'archive à partir de la balise v2:

    $ oc start-build hello-world --from-repo=../hello-world --commit=v2
    Copy to Clipboard Toggle word wrap

2.7.2. Annulation d'une construction

Vous pouvez annuler une construction à l'aide de la console web ou de la commande CLI suivante.

Procédure

  • Pour annuler manuellement une construction, entrez la commande suivante :

    oc cancel-build <build_name>
    Copy to Clipboard Toggle word wrap
2.7.2.1. Annulation de plusieurs constructions

Vous pouvez annuler plusieurs constructions à l'aide de la commande CLI suivante.

Procédure

  • Pour annuler manuellement plusieurs constructions, entrez la commande suivante :

    oc cancel-build <build1_name> <build2_name> <build3_name> $ oc cancel-build <build1_name> <build2_name>
    Copy to Clipboard Toggle word wrap
2.7.2.2. Annulation de toutes les constructions

Vous pouvez annuler toutes les constructions à partir de la configuration de la construction avec la commande CLI suivante.

Procédure

  • Pour annuler toutes les constructions, entrez la commande suivante :

    oc cancel-build bc/<buildconfig_name>
    Copy to Clipboard Toggle word wrap

Vous pouvez annuler toutes les constructions dans un état donné, tel que new ou pending, tout en ignorant les constructions dans d'autres états.

Procédure

  • Pour annuler tout ce qui se trouve dans un état donné, entrez la commande suivante :

    oc cancel-build bc/<buildconfig_name>
    Copy to Clipboard Toggle word wrap

2.7.3. Modifier une BuildConfig

Pour modifier vos configurations de construction, vous utilisez l'option Edit BuildConfig dans la vue Builds de la perspective Developer.

Vous pouvez utiliser l'une des vues suivantes pour modifier un site BuildConfig:

  • Le site Form view vous permet de modifier votre site BuildConfig à l'aide des champs de formulaire et des cases à cocher standard.
  • Le site YAML view vous permet d'éditer votre site BuildConfig avec un contrôle total sur les opérations.

Vous pouvez passer de Form view à YAML view sans perdre de données. Les données contenues dans le site Form view sont transférées vers le site YAML view et vice versa.

Procédure

  1. Dans la vue Builds de la perspective Developer, cliquez sur le menu kebab pour voir l'option Edit BuildConfig.
  2. Cliquez sur Edit BuildConfig pour voir l'option Form view.
  3. Dans la section Git, entrez l'URL du dépôt Git pour la base de code que vous souhaitez utiliser pour créer une application. L'URL est ensuite validée.

    • Optionnel : Cliquez sur Show Advanced Git Options pour ajouter des détails tels que

      • Git Reference pour spécifier une branche, une balise ou un commit qui contient le code que vous voulez utiliser pour construire l'application.
      • Context Dir pour spécifier le sous-répertoire qui contient le code que vous voulez utiliser pour construire l'application.
      • Source Secret pour créer un site Secret Name avec des informations d'identification permettant d'extraire votre code source d'un dépôt privé.
  4. Dans la section Build from, sélectionnez l'option à partir de laquelle vous souhaitez construire. Vous pouvez utiliser les options suivantes :

    • Image Stream tag référence une image pour un flux d'images et une balise donnés. Saisissez le projet, le flux d'images et la balise de l'emplacement à partir duquel vous souhaitez construire et pousser.
    • Image Stream image référence une image pour un flux d'images et un nom d'image donnés. Saisissez l'image du flux d'images à partir duquel vous souhaitez construire. Saisissez également le projet, le flux d'images et la balise à utiliser.
    • Docker image: L'image Docker est référencée par le biais d'un dépôt d'images Docker. Vous devrez également entrer le projet, le flux d'image et le tag pour faire référence à l'endroit où vous souhaitez pousser.
  5. Facultatif : dans la section Environment Variables, ajoutez les variables d'environnement associées au projet en utilisant les champs Name et Value. Pour ajouter d'autres variables d'environnement, utilisez Add Value, ou Add from ConfigMap et Secret.
  6. Facultatif : Pour personnaliser davantage votre application, utilisez les options avancées suivantes :

    Déclencheur
    Déclenche la construction d'une nouvelle image lorsque l'image du constructeur change. Ajoutez d'autres déclencheurs en cliquant sur Add Trigger et en sélectionnant Type et Secret.
    Secrets
    Ajoute des secrets pour votre application. Ajoutez d'autres secrets en cliquant sur Add secret et en sélectionnant Secret et Mount point.
    Politique
    Cliquez sur Run policy pour sélectionner la politique d'exécution de la construction. La politique sélectionnée détermine l'ordre dans lequel les builds créés à partir de la configuration de build doivent être exécutés.
    Crochets
    Sélectionnez Run build hooks after image is built pour exécuter des commandes à la fin de la construction et vérifier l'image. Ajoutez Hook type, Command, et Arguments à la commande.
  7. Cliquez sur Save pour enregistrer l'adresse BuildConfig.

2.7.4. Suppression d'une BuildConfig

Vous pouvez supprimer un site BuildConfig à l'aide de la commande suivante.

Procédure

  • Pour supprimer un site BuildConfig, entrez la commande suivante :

    oc delete bc <BuildConfigName> $ oc delete bc <BuildConfigName>
    Copy to Clipboard Toggle word wrap

    Cette opération supprime également toutes les constructions qui ont été instanciées à partir de ce site BuildConfig.

  • Pour supprimer un site BuildConfig et conserver les constructions installées à partir du site BuildConfig, spécifiez l'indicateur --cascade=false lorsque vous entrez la commande suivante :

    oc delete --cascade=false bc <BuildConfigName>
    Copy to Clipboard Toggle word wrap

2.7.5. Voir les détails de la construction

Vous pouvez afficher les détails de la construction à l'aide de la console Web ou de la commande CLI oc describe.

Cette fonction permet d'afficher des informations telles que

  • La source de construction.
  • La stratégie de construction.
  • La destination de la sortie.
  • Digest de l'image dans le registre de destination.
  • Comment la construction a été créée.

Si la compilation utilise la stratégie Docker ou Source, la sortie oc describe inclut également des informations sur la révision des sources utilisée pour la compilation, y compris l'ID du commit, l'auteur, le committer et le message.

Procédure

  • Pour afficher les détails de la construction, entrez la commande suivante :

    oc describe build <nom_de_la_construction>
    Copy to Clipboard Toggle word wrap

2.7.6. Accès aux journaux de construction

Vous pouvez accéder aux journaux de construction à l'aide de la console web ou de l'interface de programmation.

Procédure

  • Pour diffuser les journaux en utilisant directement la compilation, entrez la commande suivante :

    oc describe build <nom_de_la_construction>
    Copy to Clipboard Toggle word wrap
2.7.6.1. Accès aux journaux de BuildConfig

Vous pouvez accéder aux journaux de BuildConfig à l'aide de la console Web ou de la CLI.

Procédure

  • Pour diffuser les journaux de la dernière version pour une BuildConfig, entrez la commande suivante :

    oc logs -f bc/<buildconfig_name>
    Copy to Clipboard Toggle word wrap

Vous pouvez accéder aux journaux d'une version donnée pour une BuildConfig en utilisant la console web ou le CLI.

Procédure

  • Pour diffuser les journaux d'une version donnée pour une BuildConfig, entrez la commande suivante :

    oc logs --version=<number> bc/<buildconfig_name>
    Copy to Clipboard Toggle word wrap
2.7.6.3. Activation de la verbosité des journaux

Vous pouvez activer une sortie plus verbeuse en transmettant la variable d'environnement BUILD_LOGLEVEL dans le cadre de sourceStrategy ou dockerStrategy dans BuildConfig.

Note

Un administrateur peut définir la verbosité de construction par défaut pour l'ensemble de l'instance d'OpenShift Container Platform en configurant env/BUILD_LOGLEVEL. Cette valeur par défaut peut être remplacée en spécifiant BUILD_LOGLEVEL dans un BuildConfig donné. Vous pouvez spécifier une priorité plus élevée sur la ligne de commande pour les constructions non binaires en passant --build-loglevel à oc start-build.

Les niveaux de journalisation disponibles pour les compilations de sources sont les suivants :

Niveau 0

Produit la sortie des conteneurs exécutant le script assemble et toutes les erreurs rencontrées. Il s'agit de la valeur par défaut.

Niveau 1

Produit des informations de base sur le processus exécuté.

Niveau 2

Produit des informations très détaillées sur le processus exécuté.

Niveau 3

Produit des informations très détaillées sur le processus exécuté, ainsi qu'une liste du contenu de l'archive.

Niveau 4

Produit actuellement les mêmes informations que le niveau 3.

Niveau 5

Produit tout ce qui est mentionné dans les niveaux précédents et fournit en plus des messages docker push.

Procédure

  • Pour obtenir une sortie plus verbeuse, transmettez la variable d'environnement BUILD_LOGLEVEL à l'adresse sourceStrategy ou dockerStrategy à l'adresse BuildConfig:

    sourceStrategy:
    ...
      env:
        - name: "BUILD_LOGLEVEL"
          value: "2" 
    1
    Copy to Clipboard Toggle word wrap
    1
    Ajustez cette valeur au niveau d'enregistrement souhaité.

2.8. Déclenchement et modification des constructions

Les sections suivantes décrivent comment déclencher des builds et modifier des builds à l'aide de crochets de build.

2.8.1. Construire des déclencheurs

Lors de la définition d'un site BuildConfig, vous pouvez définir des déclencheurs pour contrôler les circonstances dans lesquelles le site BuildConfig doit être exécuté. Les déclencheurs de construction suivants sont disponibles :

  • Crochet Web
  • Changement d'image
  • Changement de configuration
2.8.1.1. Déclencheurs de webhook

Les déclencheurs Webhook vous permettent de déclencher une nouvelle construction en envoyant une demande au point d'extrémité API de OpenShift Container Platform. Vous pouvez définir ces déclencheurs en utilisant GitHub, GitLab, Bitbucket ou Generic webhooks.

Actuellement, les webhooks d'OpenShift Container Platform ne supportent que les versions analogues de l'événement push pour chacun des systèmes de gestion de code source (SCM) basés sur Git. Tous les autres types d'événements sont ignorés.

Lorsque les événements push sont traités, l'hôte du plan de contrôle d'OpenShift Container Platform confirme si la référence de la branche à l'intérieur de l'événement correspond à la référence de la branche dans le BuildConfig correspondant. Si c'est le cas, il vérifie alors la référence exacte du commit noté dans l'événement webhook sur le build d'OpenShift Container Platform. S'ils ne correspondent pas, aucun build n'est déclenché.

Note

oc new-app et oc new-build créent automatiquement les déclencheurs GitHub et Generic webhook, mais tous les autres déclencheurs webhook nécessaires doivent être ajoutés manuellement. Vous pouvez ajouter manuellement des déclencheurs en définissant des déclencheurs.

Pour tous les webhooks, vous devez définir un secret avec une clé nommée WebHookSecretKey et la valeur à fournir lors de l'invocation du webhook. La définition du webhook doit ensuite faire référence au secret. Le secret garantit l'unicité de l'URL, empêchant ainsi d'autres personnes de déclencher la construction. La valeur de la clé est comparée au secret fourni lors de l'invocation du webhook.

Par exemple, voici un webhook GitHub avec une référence à un secret nommé mysecret:

type: "GitHub"
github:
  secretReference:
    name: "mysecret"
Copy to Clipboard Toggle word wrap

Le secret est alors défini comme suit. Notez que la valeur du secret est codée en base64, comme c'est le cas pour tout champ data d'un objet Secret.

- kind: Secret
  apiVersion: v1
  metadata:
    name: mysecret
    creationTimestamp:
  data:
    WebHookSecretKey: c2VjcmV0dmFsdWUx
Copy to Clipboard Toggle word wrap
2.8.1.1.1. Utiliser les webhooks de GitHub

Les webhooks de GitHub gèrent l'appel fait par GitHub lorsqu'un dépôt est mis à jour. Lors de la définition du déclencheur, vous devez spécifier un secret, qui fait partie de l'URL que vous fournissez à GitHub lors de la configuration du webhook.

Exemple de définition d'un webhook GitHub :

type: "GitHub"
github:
  secretReference:
    name: "mysecret"
Copy to Clipboard Toggle word wrap
Note

Le secret utilisé dans la configuration du déclencheur du webhook n'est pas le même que le champ secret que vous rencontrez lors de la configuration du webhook dans l'interface utilisateur de GitHub. Le premier sert à rendre l'URL du webhook unique et difficile à prédire, le second est un champ de chaîne optionnel utilisé pour créer un condensé hexagonal HMAC du corps, qui est envoyé en tant qu'en-tête X-Hub-Signature.

L'URL du payload est renvoyée en tant qu'URL du Webhook GitHub par la commande oc describe (voir Afficher les URL du Webhook), et est structurée comme suit :

Exemple de sortie

https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/github
Copy to Clipboard Toggle word wrap

Conditions préalables

  • Créer un site BuildConfig à partir d'un dépôt GitHub.

Procédure

  1. Pour configurer un GitHub Webhook :

    1. Après avoir créé un site BuildConfig à partir d'un dépôt GitHub, exécutez :

      $ oc describe bc/<name-of-your-BuildConfig>
      Copy to Clipboard Toggle word wrap

      Cela génère un webhook GitHub URL qui ressemble à :

      Exemple de sortie

      <https://api.starter-us-east-1.openshift.com:443/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/github
      Copy to Clipboard Toggle word wrap

    2. Copiez et collez cette URL dans GitHub, à partir de la console web de GitHub.
    3. Dans votre dépôt GitHub, sélectionnez Add Webhook à partir de Settings → Webhooks.
    4. Collez l'URL dans le champ Payload URL.
    5. Changez le Content Type de la valeur par défaut de GitHub application/x-www-form-urlencoded à application/json.
    6. Cliquez sur Add webhook.

      Vous devriez voir un message de GitHub indiquant que votre webhook a été configuré avec succès.

      Désormais, lorsque vous apportez une modification à votre dépôt GitHub, une nouvelle construction démarre automatiquement, et une fois la construction réussie, un nouveau déploiement démarre.

      Note

      Gogs supporte le même format de charge utile de webhook que GitHub. Par conséquent, si vous utilisez un serveur Gogs, vous pouvez définir un déclencheur webhook GitHub sur votre BuildConfig et le déclencher également par votre serveur Gogs.

  2. Avec un fichier contenant une charge utile JSON valide, tel que payload.json, vous pouvez déclencher manuellement le webhook avec curl:

    $ curl -H \N "X-GitHub-Event : push\N" -H "Content-Type : application/json" -k -X POST --data-binary @payload.json https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/github
    Copy to Clipboard Toggle word wrap

    L'argument -k n'est nécessaire que si votre serveur API ne dispose pas d'un certificat correctement signé.

2.8.1.1.2. Utiliser les webhooks de GitLab

Les webhooks de GitLab gèrent l'appel fait par GitLab lorsqu'un dépôt est mis à jour. Comme pour les déclencheurs GitHub, vous devez spécifier un secret. L'exemple suivant est une définition YAML d'un déclencheur dans le fichier BuildConfig:

type: "GitLab"
gitlab:
  secretReference:
    name: "mysecret"
Copy to Clipboard Toggle word wrap

L'URL de la charge utile est renvoyée en tant qu'URL de GitLab Webhook par la commande oc describe, et est structurée comme suit :

Exemple de sortie

https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/gitlab
Copy to Clipboard Toggle word wrap

Procédure

  1. Pour configurer un GitLab Webhook :

    1. Décrire le site BuildConfig pour obtenir l'URL du webhook :

      $ oc describe bc <name>
      Copy to Clipboard Toggle word wrap
    2. Copiez l'URL du webhook en remplaçant <secret> par votre valeur secrète.
    3. Suivez les instructions d'installation de GitLab pour coller l'URL du webhook dans les paramètres de votre dépôt GitLab.
  2. Avec un fichier contenant une charge utile JSON valide, tel que payload.json, vous pouvez déclencher manuellement le webhook avec curl:

    $ curl -H "X-GitLab-Event : Push Hook" -H "Content-Type : application/json" -k -X POST --data-binary @payload.json https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/gitlab
    Copy to Clipboard Toggle word wrap

    L'argument -k n'est nécessaire que si votre serveur API ne dispose pas d'un certificat correctement signé.

2.8.1.1.3. Utiliser les webhooks Bitbucket

Les webhooks Bitbucket gèrent l'appel fait par Bitbucket lorsqu'un référentiel est mis à jour. Comme pour les triggers précédents, vous devez spécifier un secret. L'exemple suivant est une définition YAML d'un déclencheur dans le fichier BuildConfig:

type: "Bitbucket"
bitbucket:
  secretReference:
    name: "mysecret"
Copy to Clipboard Toggle word wrap

L'URL de la charge utile est renvoyée en tant qu'URL de Bitbucket Webhook par la commande oc describe, et est structurée comme suit :

Exemple de sortie

https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/bitbucket
Copy to Clipboard Toggle word wrap

Procédure

  1. Pour configurer un Webhook Bitbucket :

    1. Décrivez le "BuildConfig" pour obtenir l'URL du webhook :

      $ oc describe bc <name>
      Copy to Clipboard Toggle word wrap
    2. Copiez l'URL du webhook en remplaçant <secret> par votre valeur secrète.
    3. Suivez les instructions de configuration de Bitbucket pour coller l'URL du webhook dans les paramètres de votre référentiel Bitbucket.
  2. Avec un fichier contenant une charge utile JSON valide, tel que payload.json, vous pouvez déclencher manuellement le webhook avec curl:

    $ curl -H \N "X-Event-Key : repo:push" -H "Content-Type : application/json" -k -X POST --data-binary @payload.json https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/bitbucket
    Copy to Clipboard Toggle word wrap

    L'argument -k n'est nécessaire que si votre serveur API ne dispose pas d'un certificat correctement signé.

2.8.1.1.4. Utilisation de webhooks génériques

Les webhooks génériques sont invoqués à partir de n'importe quel système capable de faire une requête web. Comme pour les autres webhooks, vous devez spécifier un secret, qui fait partie de l'URL que l'appelant doit utiliser pour déclencher la compilation. Le secret garantit l'unicité de l'URL, empêchant ainsi d'autres personnes de déclencher la création. Voici un exemple de définition de déclencheur YAML dans BuildConfig:

type: "Generic"
generic:
  secretReference:
    name: "mysecret"
  allowEnv: true 
1
Copy to Clipboard Toggle word wrap
1
La valeur true permet à un webhook générique de transmettre des variables d'environnement.

Procédure

  1. Pour configurer l'appelant, fournissez au système appelant l'URL du point de terminaison générique du webhook pour votre construction :

    Exemple de sortie

    https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/generic
    Copy to Clipboard Toggle word wrap

    L'appelant doit invoquer le webhook en tant qu'opération POST.

  2. Pour invoquer manuellement le webhook, vous pouvez utiliser curl:

    $ curl -X POST -k https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/generic
    Copy to Clipboard Toggle word wrap

    Le verbe HTTP doit être défini sur POST. L'indicateur insecure -k est spécifié pour ignorer la validation du certificat. Ce deuxième indicateur n'est pas nécessaire si votre cluster dispose de certificats correctement signés.

    Le point d'accès peut accepter une charge utile facultative au format suivant :

    git:
      uri: "<url to git repository>"
      ref: "<optional git reference>"
      commit: "<commit hash identifying a specific git commit>"
      author:
        name: "<author name>"
        email: "<author e-mail>"
      committer:
        name: "<committer name>"
        email: "<committer e-mail>"
      message: "<commit message>"
    env: 
    1
    
       - name: "<variable name>"
         value: "<variable value>"
    Copy to Clipboard Toggle word wrap
    1
    Comme pour les variables d'environnement de BuildConfig, les variables d'environnement définies ici sont mises à la disposition de votre compilation. Si ces variables entrent en conflit avec les variables d'environnement de BuildConfig, ces dernières sont prioritaires. Par défaut, les variables d'environnement transmises par webhook sont ignorées. Définissez le champ allowEnv à true dans la définition du webhook pour activer ce comportement.
  3. Pour transmettre cette charge utile à l'aide de curl, définissez-la dans un fichier nommé payload_file.yaml et exécutez :

    $ curl -H "Content-Type : application/yaml" --data-binary @payload_file.yaml -X POST -k https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/generic
    Copy to Clipboard Toggle word wrap

    Les arguments sont les mêmes que dans l'exemple précédent, avec l'ajout d'un en-tête et d'une charge utile. L'argument -H définit l'en-tête Content-Type en application/yaml ou application/json en fonction du format de votre charge utile. L'argument --data-binary est utilisé pour envoyer une charge utile binaire avec les nouvelles lignes intactes avec la requête POST.

Note

OpenShift Container Platform permet aux builds d'être déclenchées par le webhook générique même si une charge utile de requête invalide est présentée, par exemple, un type de contenu invalide, un contenu non analysable ou invalide, et ainsi de suite. Ce comportement est maintenu pour des raisons de compatibilité ascendante. Si une charge utile non valide est présentée, OpenShift Container Platform renvoie un avertissement au format JSON dans le cadre de sa réponse HTTP 200 OK.

2.8.1.1.5. Affichage des URL des webhooks

Vous pouvez utiliser la commande suivante pour afficher les URL de webhook associées à une configuration de construction. Si la commande n'affiche aucune URL de webhook, aucun déclencheur de webhook n'est défini pour cette configuration.

Procédure

  • Pour afficher les URL des webhooks associés à un site BuildConfig, exécutez :
$ oc describe bc <name>
Copy to Clipboard Toggle word wrap
2.8.1.2. Utilisation des déclencheurs de changement d'image

En tant que développeur, vous pouvez configurer votre compilation pour qu'elle s'exécute automatiquement chaque fois qu'une image de base est modifiée.

Vous pouvez utiliser des déclencheurs de changement d'image pour lancer automatiquement votre compilation lorsqu'une nouvelle version d'une image en amont est disponible. Par exemple, si une compilation est basée sur une image RHEL, vous pouvez déclencher l'exécution de cette compilation chaque fois que l'image RHEL change. Ainsi, l'image de l'application s'exécute toujours sur la dernière image de base RHEL.

Note

Les flux d'images qui pointent vers des images de conteneurs dans les registres de conteneurs v1 ne déclenchent une compilation qu'une seule fois, lorsque la balise du flux d'images devient disponible, et non lors des mises à jour ultérieures de l'image. Cela est dû à l'absence d'images identifiables de manière unique dans les registres de conteneurs v1.

Procédure

  1. Définissez une adresse ImageStream qui pointe vers l'image en amont que vous souhaitez utiliser comme déclencheur :

    kind: "ImageStream"
    apiVersion: "v1"
    metadata:
      name: "ruby-20-centos7"
    Copy to Clipboard Toggle word wrap

    Cela définit le flux d'images lié à un référentiel d'images de conteneurs situé à l'adresse <system-registry>/<namespace>/ruby-20-centos7. Le site <system-registry> est défini comme un service portant le nom docker-registry et fonctionnant dans OpenShift Container Platform.

  2. Si un flux d'images est l'image de base pour la compilation, définissez le champ from dans la stratégie de compilation pour qu'il pointe vers l'image ImageStream:

    strategy:
      sourceStrategy:
        from:
          kind: "ImageStreamTag"
          name: "ruby-20-centos7:latest"
    Copy to Clipboard Toggle word wrap

    Dans ce cas, la définition sourceStrategy consomme la balise latest du flux d'images nommé ruby-20-centos7 situé dans cet espace de noms.

  3. Définir une construction avec un ou plusieurs déclencheurs qui pointent vers ImageStreams:

    type: "ImageChange" 
    1
    
    imageChange: {}
    type: "ImageChange" 
    2
    
    imageChange:
      from:
        kind: "ImageStreamTag"
        name: "custom-image:latest"
    Copy to Clipboard Toggle word wrap
    1
    Un déclencheur de changement d'image qui surveille les objets ImageStream et Tag tels que définis par le champ from de la stratégie de construction. L'objet imageChange doit être vide.
    2
    Un déclencheur de changement d'image qui surveille un flux d'images arbitraire. La partie imageChange, dans ce cas, doit inclure un champ from qui fait référence au ImageStreamTag à surveiller.

Lors de l'utilisation d'un déclencheur de changement d'image pour le flux d'image de la stratégie, le build généré est fourni avec un tag docker immuable qui pointe vers la dernière image correspondant à ce tag. Cette nouvelle référence d'image est utilisée par la stratégie lorsqu'elle s'exécute pour la construction.

Pour les autres déclencheurs de changement d'image qui ne font pas référence au flux d'images de la stratégie, une nouvelle construction est lancée, mais la stratégie de construction n'est pas mise à jour avec une référence d'image unique.

Comme cet exemple comporte un déclencheur de changement d'image pour la stratégie, la compilation résultante est la suivante :

strategy:
  sourceStrategy:
    from:
      kind: "DockerImage"
      name: "172.30.17.3:5001/mynamespace/ruby-20-centos7:<immutableid>"
Copy to Clipboard Toggle word wrap

Cela garantit que la construction déclenchée utilise la nouvelle image qui vient d'être poussée dans le dépôt, et que la construction peut être relancée à tout moment avec les mêmes données.

Vous pouvez mettre en pause un déclencheur de changement d'image pour permettre plusieurs changements sur le flux d'images référencé avant qu'une compilation ne soit lancée. Vous pouvez également attribuer la valeur true à l'attribut paused lors de l'ajout initial d'un ImageChangeTrigger à un BuildConfig afin d'empêcher le déclenchement immédiat d'une compilation.

type: "ImageChange"
imageChange:
  from:
    kind: "ImageStreamTag"
    name: "custom-image:latest"
  paused: true
Copy to Clipboard Toggle word wrap

En plus de définir le champ image pour tous les types Strategy, pour les constructions personnalisées, la variable d'environnement OPENSHIFT_CUSTOM_BUILD_BASE_IMAGE est vérifiée. Si elle n'existe pas, elle est créée avec la référence d'image immuable. Si elle existe, elle est mise à jour avec la référence d'image immuable.

Si une compilation est déclenchée par un webhook ou une demande manuelle, la compilation créée utilise le <immutableid> résolu à partir du ImageStream référencé par le Strategy. Cela garantit que les compilations sont effectuées en utilisant des balises d'image cohérentes pour faciliter la reproduction.

En tant que développeur, si vous avez des déclencheurs de changement d'image, vous pouvez identifier le changement d'image qui a déclenché la dernière compilation. Cela peut s'avérer utile pour le débogage ou le dépannage des constructions.

Exemple BuildConfig

apiVersion: build.openshift.io/v1
kind: BuildConfig
metadata:
  name: bc-ict-example
  namespace: bc-ict-example-namespace
spec:

# ...

  triggers:
  - imageChange:
      from:
        kind: ImageStreamTag
        name: input:latest
        namespace: bc-ict-example-namespace
  - imageChange:
      from:
        kind: ImageStreamTag
        name: input2:latest
        namespace: bc-ict-example-namespace
    type: ImageChange
status:
  imageChangeTriggers:
  - from:
      name: input:latest
      namespace: bc-ict-example-namespace
    lastTriggerTime: "2021-06-30T13:47:53Z"
    lastTriggeredImageID: image-registry.openshift-image-registry.svc:5000/bc-ict-example-namespace/input@sha256:0f88ffbeb9d25525720bfa3524cb1bf0908b7f791057cf1acfae917b11266a69
  - from:
      name: input2:latest
      namespace: bc-ict-example-namespace
    lastTriggeredImageID:  image-registry.openshift-image-registry.svc:5000/bc-ict-example-namespace/input2@sha256:0f88ffbeb9d25525720bfa3524cb2ce0908b7f791057cf1acfae917b11266a69

  lastVersion: 1
Copy to Clipboard Toggle word wrap

Note

Cet exemple omet les éléments qui ne sont pas liés aux déclencheurs de changement d'image.

Conditions préalables

  • Vous avez configuré plusieurs déclencheurs de changement d'image. Ces déclencheurs ont déclenché une ou plusieurs constructions.

Procédure

  1. Dans buildConfig.status.imageChangeTriggers pour identifier le site lastTriggerTime qui a l'horodatage le plus récent.

    Le présent ImageChangeTriggerStatus

    Ensuite, vous utilisez le `name` et le `namespace` de cette compilation pour trouver le trigger de changement d'image correspondant dans `buildConfig.spec.triggers`.
    Copy to Clipboard Toggle word wrap
  2. Sous imageChangeTriggers, comparez les horodatages pour identifier le dernier

Déclencheurs de changement d'image

Dans votre configuration de construction, buildConfig.spec.triggers est un tableau de politiques de déclenchement de construction, BuildTriggerPolicy.

Chaque site BuildTriggerPolicy possède un champ type et un ensemble de champs pointeurs. Chaque champ pointeur correspond à l'une des valeurs autorisées pour le champ type. Ainsi, vous ne pouvez attribuer à BuildTriggerPolicy qu'un seul champ de pointeurs.

Pour les déclencheurs de changement d'image, la valeur de type est ImageChange. Ensuite, le champ imageChange est le pointeur vers un objet ImageChangeTrigger, qui possède les champs suivants :

  • lastTriggeredImageID: Ce champ, qui n'apparaît pas dans l'exemple, est obsolète dans OpenShift Container Platform 4.8 et sera ignoré dans une prochaine version. Il contient la référence de l'image résolue pour le ImageStreamTag lorsque le dernier build a été déclenché à partir de ce BuildConfig.
  • paused: Vous pouvez utiliser ce champ, qui n'apparaît pas dans l'exemple, pour désactiver temporairement ce déclencheur de changement d'image particulier.
  • from: Ce champ permet de référencer le site ImageStreamTag qui pilote ce déclencheur de changement d'image. Son type est le type de base de Kubernetes, OwnerReference.

The from field has the following fields of note: kind: For image change triggers, the only supported value is ImageStreamTag. namespace: You use this field to specify the namespace of the ImageStreamTag. ** name: You use this field to specify the ImageStreamTag.

Statut du déclencheur de changement d'image

Dans votre configuration de construction, buildConfig.status.imageChangeTriggers est un tableau d'éléments ImageChangeTriggerStatus. Chaque élément ImageChangeTriggerStatus comprend les éléments from, lastTriggeredImageID et lastTriggerTime présentés dans l'exemple précédent.

Le site ImageChangeTriggerStatus qui contient la version la plus récente de lastTriggerTime a déclenché la version la plus récente. Vous utilisez ses name et namespace pour identifier le déclencheur de changement d'image dans buildConfig.spec.triggers qui a déclenché la compilation.

Le site lastTriggerTime dont l'horodatage est le plus récent correspond au site ImageChangeTriggerStatus de la dernière version. Ce ImageChangeTriggerStatus a les mêmes name et namespace que le déclencheur de changement d'image dans buildConfig.spec.triggers qui a déclenché la construction.

2.8.1.4. Déclencheurs de changement de configuration

Un déclencheur de changement de configuration permet de lancer automatiquement une compilation dès qu'un nouveau site BuildConfig est créé.

Voici un exemple de définition de déclencheur YAML dans la base de données BuildConfig:

  type: "ConfigChange"
Copy to Clipboard Toggle word wrap
Note

Les déclencheurs de changement de configuration ne fonctionnent actuellement que lors de la création d'un nouveau site BuildConfig. Dans une prochaine version, les déclencheurs de changement de configuration pourront également lancer une construction à chaque fois qu'un site BuildConfig sera mis à jour.

2.8.1.4.1. Réglage manuel des déclencheurs

Les déclencheurs peuvent être ajoutés et supprimés des configurations de construction à l'aide de oc set triggers.

Procédure

  • Pour définir un déclencheur GitHub webhook sur une configuration de construction, utilisez :

    $ oc set triggers bc <name> --from-github
    Copy to Clipboard Toggle word wrap
  • Pour définir un déclencheur de changement d'image, utilisez :

    $ oc set triggers bc <name> --from-image='<image>'
    Copy to Clipboard Toggle word wrap
  • Pour supprimer un déclencheur, ajoutez --remove:

    $ oc set triggers bc <name> --from-bitbucket --remove
    Copy to Clipboard Toggle word wrap
Note

Lorsqu'un déclencheur de webhook existe déjà, le fait de l'ajouter à nouveau régénère le secret du webhook.

Pour plus d'informations, consultez la documentation d'aide avec en exécutant :

$ oc set triggers --help
Copy to Clipboard Toggle word wrap

2.8.2. Construire des crochets

Les crochets de construction permettent d'injecter un comportement dans le processus de construction.

Le champ postCommit d'un objet BuildConfig exécute des commandes à l'intérieur d'un conteneur temporaire qui exécute l'image de sortie de la compilation. Le hook est exécuté immédiatement après que la dernière couche de l'image a été validée et avant que l'image ne soit poussée vers un registre.

Le répertoire de travail actuel est défini comme étant le répertoire de l'image WORKDIR, qui est le répertoire de travail par défaut de l'image du conteneur. Pour la plupart des images, c'est là que se trouve le code source.

Le hook échoue si le script ou la commande renvoie un code de sortie non nul ou si le démarrage du conteneur temporaire échoue. Lorsque le hook échoue, il marque la compilation comme ayant échoué et l'image n'est pas poussée vers un registre. La raison de l'échec peut être vérifiée en consultant les journaux de construction.

Les crochets de construction peuvent être utilisés pour exécuter des tests unitaires afin de vérifier l'image avant que la construction ne soit considérée comme terminée et que l'image ne soit mise à disposition dans un registre. Si tous les tests réussissent et que le programme d'exécution des tests renvoie le code de sortie 0, la compilation est considérée comme réussie. En cas d'échec d'un test, la compilation est considérée comme un échec. Dans tous les cas, le journal de construction contient la sortie du programme d'essai, qui peut être utilisée pour identifier les tests qui ont échoué.

Le hook postCommit n'est pas seulement limité à l'exécution de tests, mais peut également être utilisé pour d'autres commandes. Comme il s'exécute dans un conteneur temporaire, les modifications apportées par le crochet ne persistent pas, ce qui signifie que l'exécution du crochet ne peut pas affecter l'image finale. Ce comportement permet, entre autres, l'installation et l'utilisation de dépendances de test qui sont automatiquement supprimées et ne sont pas présentes dans l'image finale.

Il existe différentes façons de configurer le crochet de post-construction. Tous les formulaires des exemples suivants sont équivalents et s'exécutent à l'adresse bundle exec rake test --verbose.

Procédure

  • Script shell :

    postCommit:
      script: "bundle exec rake test --verbose"
    Copy to Clipboard Toggle word wrap

    La valeur script est un script shell à exécuter avec /bin/sh -ic. Utilisez cette valeur lorsqu'un script shell est approprié pour exécuter le crochet de compilation. Par exemple, pour exécuter des tests unitaires comme ci-dessus. Pour contrôler le point d'entrée de l'image, ou si l'image n'a pas /bin/sh, utilisez command et/ou args.

    Note

    Le drapeau supplémentaire -i a été introduit pour améliorer l'expérience de travail avec les images CentOS et RHEL, et pourrait être supprimé dans une prochaine version.

  • Comme point d'entrée de l'image :

    postCommit:
      command: ["/bin/bash", "-c", "bundle exec rake test --verbose"]
    Copy to Clipboard Toggle word wrap

    Dans cette forme, command est la commande à exécuter, qui remplace le point d'entrée de l'image dans la forme exec, comme documenté dans la référence Dockerfile. Ceci est nécessaire si l'image n'a pas /bin/sh, ou si vous ne voulez pas utiliser un shell. Dans tous les autres cas, l'utilisation de script peut être plus pratique.

  • Commande avec arguments :

    postCommit:
      command: ["bundle", "exec", "rake", "test"]
      args: ["--verbose"]
    Copy to Clipboard Toggle word wrap

    Cette forme est équivalente à l'ajout des arguments à command.

Note

Fournir simultanément script et command crée un crochet de construction invalide.

La commande oc set build-hook peut être utilisée pour définir le crochet de compilation pour une configuration de compilation.

Procédure

  1. Pour définir une commande comme crochet de construction post-commit :

    $ oc set build-hook bc/mybc \
        --post-commit \
        --command \
        -- bundle exec rake test --verbose
    Copy to Clipboard Toggle word wrap
  2. Pour définir un script comme crochet de compilation post-commit :

    $ oc set build-hook bc/mybc --post-commit --script="bundle exec rake test --verbose"
    Copy to Clipboard Toggle word wrap

2.9. Effectuer des constructions avancées

Les sections suivantes fournissent des instructions pour les opérations de construction avancées, notamment la définition des ressources de construction et de la durée maximale, l'affectation des constructions aux nœuds, l'enchaînement des constructions, l'élagage des constructions et les stratégies d'exécution des constructions.

2.9.1. Définition des ressources de construction

Par défaut, les constructions sont réalisées par des pods utilisant des ressources non liées, telles que la mémoire et le processeur. Ces ressources peuvent être limitées.

Procédure

Vous pouvez limiter l'utilisation des ressources de deux manières :

  • Limiter l'utilisation des ressources en spécifiant des limites de ressources dans les limites du conteneur par défaut d'un projet.
  • Limit resource use by specifying resource limits as part of the build configuration. ** In the following example, each of the resources, cpu, and memory parameters are optional:

    apiVersion: "v1"
    kind: "BuildConfig"
    metadata:
      name: "sample-build"
    spec:
      resources:
        limits:
          cpu: "100m" 
    1
    
          memory: "256Mi" 
    2
    Copy to Clipboard Toggle word wrap
    1
    cpu is in CPU units: 100m represents 0.1 CPU units (100 * 1e-3).
    2
    memory is in bytes: 256Mi represents 268435456 bytes (256 * 2 ^ 20).

    Toutefois, si un quota a été défini pour votre projet, l'un des deux éléments suivants est nécessaire :

    • Un ensemble de sections resources avec un requests explicite :

      resources:
        requests: 
      1
      
          cpu: "100m"
          memory: "256Mi"
      Copy to Clipboard Toggle word wrap
      1
      L'objet requests contient la liste des ressources correspondant à la liste des ressources du quota.
    • Une plage de limites définie dans votre projet, où les valeurs par défaut de l'objet LimitRange s'appliquent aux pods créés pendant le processus de construction.

      Dans le cas contraire, la création d'un build pod échouera, car le quota n'aura pas été atteint.

2.9.2. Définition de la durée maximale

Lors de la définition d'un objet BuildConfig, vous pouvez définir sa durée maximale en définissant le champ completionDeadlineSeconds. Ce champ est spécifié en secondes et n'est pas défini par défaut. S'il n'est pas défini, aucune durée maximale n'est imposée.

La durée maximale est calculée à partir du moment où un pod de construction est planifié dans le système, et définit la durée pendant laquelle il peut être actif, y compris le temps nécessaire à l'extraction de l'image du constructeur. Après avoir atteint le délai spécifié, la construction est interrompue par OpenShift Container Platform.

Procédure

  • Pour définir la durée maximale, spécifiez completionDeadlineSeconds dans votre BuildConfig. L'exemple suivant montre la partie d'un BuildConfig spécifiant le champ completionDeadlineSeconds pour 30 minutes :

    spec:
      completionDeadlineSeconds: 1800
    Copy to Clipboard Toggle word wrap
Note

Ce paramètre n'est pas pris en charge par l'option Stratégie de pipeline.

2.9.3. Assigner des constructions à des nœuds spécifiques

Les builds peuvent être ciblés pour s'exécuter sur des nœuds spécifiques en spécifiant des étiquettes dans le champ nodeSelector d'une configuration de build. La valeur nodeSelector est un ensemble de paires clé-valeur qui sont associées aux étiquettes Node lors de la planification du module de construction.

La valeur nodeSelector peut également être contrôlée par des valeurs par défaut et des valeurs de remplacement à l'échelle du cluster. Les valeurs par défaut ne seront appliquées que si la configuration de construction ne définit aucune paire clé-valeur pour nodeSelector et ne définit pas non plus une valeur de carte explicitement vide pour nodeSelector:{}. Les valeurs de remplacement remplaceront les valeurs dans la configuration de construction sur une base clé par clé.

Note

Si l'adresse NodeSelector spécifiée ne peut être associée à un nœud portant ces étiquettes, la construction reste indéfiniment dans l'état Pending.

Procédure

  • Attribuez des builds à exécuter sur des nœuds spécifiques en attribuant des étiquettes dans le champ nodeSelector de l'adresse BuildConfig, par exemple :

    apiVersion: "v1"
    kind: "BuildConfig"
    metadata:
      name: "sample-build"
    spec:
      nodeSelector:
    1
    
        key1: value1
        key2: value2
    Copy to Clipboard Toggle word wrap
    1
    Les constructions associées à cette configuration de construction ne s'exécuteront que sur les nœuds portant les étiquettes key1=value2 et key2=value2.

2.9.4. Constructions en chaîne

Pour les langages compilés tels que Go, C, C et Java, l'inclusion des dépendances nécessaires à la compilation dans l'image de l'application peut augmenter la taille de l'image ou introduire des vulnérabilités qui peuvent être exploitées.

Pour éviter ces problèmes, il est possible d'enchaîner deux compilations. Une compilation qui produit l'artefact compilé, et une seconde qui place cet artefact dans une image séparée qui exécute l'artefact.

Dans l'exemple suivant, une compilation source-image (S2I) est combinée avec une compilation docker pour compiler un artefact qui est ensuite placé dans une image d'exécution séparée.

Note

Bien que cet exemple enchaîne une construction S2I et une construction docker, la première construction peut utiliser n'importe quelle stratégie qui produit une image contenant les artefacts souhaités, et la seconde construction peut utiliser n'importe quelle stratégie qui peut consommer du contenu d'entrée à partir d'une image.

La première compilation prend la source de l'application et produit une image contenant un fichier WAR. L'image est poussée vers le flux d'images artifact-image. Le chemin de l'artefact de sortie dépend du script assemble du constructeur S2I utilisé. Dans le cas présent, l'artefact est envoyé à /wildfly/standalone/deployments/ROOT.war.

apiVersion: build.openshift.io/v1
kind: BuildConfig
metadata:
  name: artifact-build
spec:
  output:
    to:
      kind: ImageStreamTag
      name: artifact-image:latest
  source:
    git:
      uri: https://github.com/openshift/openshift-jee-sample.git
      ref: "master"
  strategy:
    sourceStrategy:
      from:
        kind: ImageStreamTag
        name: wildfly:10.1
        namespace: openshift
Copy to Clipboard Toggle word wrap

La deuxième version utilise l'image source avec un chemin vers le fichier WAR à l'intérieur de l'image de sortie de la première version. Une page dockerfile copie le fichier WAR dans une image d'exécution.

apiVersion: build.openshift.io/v1
kind: BuildConfig
metadata:
  name: image-build
spec:
  output:
    to:
      kind: ImageStreamTag
      name: image-build:latest
  source:
    dockerfile: |-
      FROM jee-runtime:latest
      COPY ROOT.war /deployments/ROOT.war
    images:
    - from: 
1

        kind: ImageStreamTag
        name: artifact-image:latest
      paths: 
2

      - sourcePath: /wildfly/standalone/deployments/ROOT.war
        destinationDir: "."
  strategy:
    dockerStrategy:
      from: 
3

        kind: ImageStreamTag
        name: jee-runtime:latest
  triggers:
  - imageChange: {}
    type: ImageChange
Copy to Clipboard Toggle word wrap
1
from spécifie que la construction de docker doit inclure la sortie de l'image du flux d'images artifact-image, qui était la cible de la construction précédente.
2
paths spécifie les chemins de l'image cible à inclure dans la construction actuelle de Docker.
3
L'image d'exécution est utilisée comme image source pour la construction de docker.

Le résultat de cette configuration est que l'image de sortie de la deuxième compilation n'a pas besoin de contenir les outils de compilation nécessaires pour créer le fichier WAR. De plus, comme la deuxième compilation contient un déclencheur de changement d'image, chaque fois que la première compilation est exécutée et produit une nouvelle image avec l'artefact binaire, la deuxième compilation est automatiquement déclenchée pour produire une image d'exécution qui contient cet artefact. Par conséquent, les deux compilations se comportent comme une seule compilation avec deux étapes.

2.9.5. Taille des constructions

Par défaut, les versions qui ont terminé leur cycle de vie sont conservées indéfiniment. Vous pouvez limiter le nombre de versions antérieures conservées.

Procédure

  1. Limitez le nombre de constructions précédentes qui sont conservées en fournissant une valeur entière positive pour successfulBuildsHistoryLimit ou failedBuildsHistoryLimit dans votre BuildConfig, par exemple :

    apiVersion: "v1"
    kind: "BuildConfig"
    metadata:
      name: "sample-build"
    spec:
      successfulBuildsHistoryLimit: 2 
    1
    
      failedBuildsHistoryLimit: 2 
    2
    Copy to Clipboard Toggle word wrap
    1
    successfulBuildsHistoryLimit conservera jusqu'à deux constructions avec un statut de completed.
    2
    failedBuildsHistoryLimit retiendra jusqu'à deux constructions avec un statut de failed, canceled, ou error.
  2. Déclencher l'élagage de la construction par l'une des actions suivantes :

    • Mise à jour d'une configuration de construction.
    • Attente de la fin du cycle de vie d'une construction.

Les constructions sont triées en fonction de leur date de création, les plus anciennes étant élaguées en premier.

Note

Les administrateurs peuvent élaguer manuellement les constructions à l'aide de la commande d'élagage d'objets 'oc adm'.

2.9.6. Politique d'exécution de la construction

La politique d'exécution de la construction décrit l'ordre dans lequel les constructions créées à partir de la configuration de la construction doivent être exécutées. Pour ce faire, il suffit de modifier la valeur du champ runPolicy dans la section spec de la spécification Build.

Il est également possible de modifier la valeur de runPolicy pour les configurations de construction existantes :

  • Si l'on remplace Parallel par Serial ou SerialLatestOnly et que l'on déclenche une nouvelle construction à partir de cette configuration, la nouvelle construction attendra que toutes les constructions parallèles soient terminées, car la construction en série ne peut s'exécuter que seule.
  • Changer Serial en SerialLatestOnly et déclencher un nouveau build provoque l'annulation de tous les builds existants dans la file d'attente, à l'exception du build en cours d'exécution et du build créé le plus récemment. La version la plus récente s'exécute ensuite.

Utilisez les sections suivantes pour exécuter des builds intitulés sur OpenShift Container Platform.

Pour utiliser les abonnements Red Hat dans une compilation, vous créez une balise de flux d'images pour référencer l'image de base universelle (UBI).

Pour que l'UBI soit disponible à l'adresse in every project dans le cluster, vous devez ajouter la balise de flux d'images à l'espace de noms openshift. Sinon, pour le rendre disponible à l'adresse in a specific project, vous devez ajouter la balise de flux d'images à ce projet.

L'avantage d'utiliser des balises de flux d'images de cette manière est que cela permet d'accéder à l'UBI sur la base des informations d'identification registry.redhat.io dans le secret d'installation sans exposer le secret d'installation à d'autres utilisateurs. C'est plus pratique que de demander à chaque développeur d'installer des secrets d'installation avec des informations d'identification registry.redhat.io dans chaque projet.

Procédure

  • Pour créer un site ImageStreamTag dans l'espace de noms openshift, afin qu'il soit disponible pour les développeurs de tous les projets, entrez :

    $ oc tag --source=docker registry.redhat.io/ubi8/ubi:latest ubi:latest -n openshift
    Copy to Clipboard Toggle word wrap
    Astuce

    Vous pouvez également appliquer le YAML suivant pour créer un ImageStreamTag dans l'espace de noms openshift:

    apiVersion: image.openshift.io/v1
    kind: ImageStream
    metadata:
      name: ubi
      namespace: openshift
    spec:
      tags:
      - from:
          kind: DockerImage
          name: registry.redhat.io/ubi8/ubi:latest
        name: latest
        referencePolicy:
          type: Source
    Copy to Clipboard Toggle word wrap
  • Pour créer un site ImageStreamTag dans un seul projet, entrez :

    $ oc tag --source=docker registry.redhat.io/ubi8/ubi:latest ubi:latest
    Copy to Clipboard Toggle word wrap
    Astuce

    Vous pouvez également appliquer le YAML suivant pour créer un site ImageStreamTag dans un seul projet :

    apiVersion: image.openshift.io/v1
    kind: ImageStream
    metadata:
      name: ubi
    spec:
      tags:
      - from:
          kind: DockerImage
          name: registry.redhat.io/ubi8/ubi:latest
        name: latest
        referencePolicy:
          type: Source
    Copy to Clipboard Toggle word wrap

Les constructions qui utilisent les abonnements Red Hat pour installer le contenu doivent inclure les clés de droits en tant que secret de construction.

Conditions préalables

Vous devez avoir accès aux droits de Red Hat par le biais de votre abonnement. Le secret des droits est automatiquement créé par l'opérateur Insights.

Astuce

Lorsque vous effectuez un Entitlement Build à l'aide de Red Hat Enterprise Linux (RHEL) 7, vous devez avoir les instructions suivantes dans votre Dockerfile avant d'exécuter les commandes yum:

RUN rm /etc/rhsm-host
Copy to Clipboard Toggle word wrap

Procédure

  1. Ajouter le secret etc-pki-entitlement comme volume de construction dans la stratégie Docker de la configuration de construction :

    strategy:
      dockerStrategy:
        from:
          kind: ImageStreamTag
          name: ubi:latest
        volumes:
        - name: etc-pki-entitlement
          mounts:
          - destinationPath: /etc/pki/entitlement
          source:
            type: Secret
            secret:
              secretName: etc-pki-entitlement
    Copy to Clipboard Toggle word wrap

Les constructions de stratégies Docker peuvent utiliser le gestionnaire d'abonnement pour installer le contenu de l'abonnement.

Conditions préalables

Les clés de droits doivent être ajoutées en tant que volumes de stratégie de construction.

Procédure

Utilisez le fichier Docker suivant comme exemple pour installer du contenu avec le gestionnaire d'abonnement :

FROM registry.redhat.io/ubi8/ubi:latest
RUN dnf search kernel-devel --showduplicates && \
        dnf install -y kernel-devel
Copy to Clipboard Toggle word wrap

Les constructions qui utilisent Red Hat Satellite pour installer du contenu doivent fournir des configurations appropriées pour obtenir du contenu à partir des dépôts Satellite.

Conditions préalables

  • Vous devez fournir ou créer un fichier de configuration du dépôt compatible avec yum qui télécharge le contenu de votre instance Satellite.

    Exemple de configuration du référentiel

    [test-<name>]
    name=test-<number>
    baseurl = https://satellite.../content/dist/rhel/server/7/7Server/x86_64/os
    enabled=1
    gpgcheck=0
    sslverify=0
    sslclientkey = /etc/pki/entitlement/...-key.pem
    sslclientcert = /etc/pki/entitlement/....pem
    Copy to Clipboard Toggle word wrap

Procédure

  1. Créez un site ConfigMap contenant le fichier de configuration du référentiel Satellite :

    $ oc create configmap yum-repos-d --from-file /path/to/satellite.repo
    Copy to Clipboard Toggle word wrap
  2. Ajouter la configuration du référentiel satellite et la clé d'habilitation en tant que volumes de construction :

    strategy:
      dockerStrategy:
        from:
          kind: ImageStreamTag
          name: ubi:latest
        volumes:
        - name: yum-repos-d
          mounts:
          - destinationPath: /etc/yum.repos.d
          source:
            type: ConfigMap
            configMap:
              name: yum-repos-d
        - name: etc-pki-entitlement
          mounts:
          - destinationPath: /etc/pki/entitlement
          source:
            type: Secret
            secret:
              secretName: etc-pki-entitlement
    Copy to Clipboard Toggle word wrap

Les constructions de stratégie Docker peuvent utiliser les dépôts Red Hat Satellite pour installer le contenu de l'abonnement.

Conditions préalables

  • Vous avez ajouté les clés d'habilitation et les configurations du référentiel satellite en tant que volumes de construction.

Procédure

Utilisez le fichier Docker suivant comme exemple pour installer du contenu avec Satellite :

FROM registry.redhat.io/ubi8/ubi:latest
RUN dnf search kernel-devel --showduplicates && \
        dnf install -y kernel-devel
Copy to Clipboard Toggle word wrap

Vous pouvez configurer et exécuter une construction dans un espace de noms qui utilise en toute sécurité les droits RHEL d'un objet Secret dans un autre espace de noms.

Vous pouvez toujours accéder aux droits RHEL à partir d'OpenShift Builds en créant un objet Secret avec vos informations d'identification d'abonnement dans le même espace de noms que votre objet Build. Cependant, dans OpenShift Container Platform 4.10 et les versions ultérieures, vous pouvez désormais accéder à vos informations d'identification et à vos certificats à partir d'un objet Secret dans l'un des espaces de noms du système OpenShift Container Platform. Vous exécutez des constructions intitulées avec un montage de volume CSI d'une instance de ressource personnalisée (CR) SharedSecret qui référence l'objet Secret.

Cette procédure s'appuie sur la nouvelle fonctionnalité Shared Resources CSI Driver, que vous pouvez utiliser pour déclarer des montages de volumes CSI dans les Builds d'OpenShift Container Platform. Elle s'appuie également sur l'opérateur Insights d'OpenShift Container Platform.

Important

Le pilote CSI des ressources partagées et les volumes CSI de construction sont tous deux des fonctionnalités de l'aperçu technologique, qui ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et qui peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas leur utilisation en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information au cours du processus de développement.

Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.

Les fonctionnalités Shared Resources CSI Driver et Build CSI Volumes appartiennent également à l'ensemble de fonctionnalités TechPreviewNoUpgrade, qui est un sous-ensemble des fonctionnalités de l'aperçu technologique actuel. Vous pouvez activer l'ensemble de fonctionnalités TechPreviewNoUpgrade sur les clusters de test, où vous pouvez les tester entièrement tout en laissant les fonctionnalités désactivées sur les clusters de production. L'activation de cet ensemble de fonctionnalités ne peut être annulée et empêche les mises à jour mineures de la version. Ce jeu de fonctionnalités n'est pas recommandé sur les clusters de production. Voir "Activation des fonctionnalités de l'aperçu technologique à l'aide des portes de fonctionnalités" dans la section suivante "Ressources supplémentaires".

Conditions préalables

  • Vous avez activé l'ensemble de fonctions TechPreviewNoUpgrade en utilisant les portes de fonctions.
  • Vous avez une instance de ressource personnalisée (CR) SharedSecret qui fait référence à l'objet Secret dans lequel l'opérateur Insights stocke les informations d'identification de l'abonnement.
  • Vous devez être autorisé à effectuer les actions suivantes :

    • Créer des configurations de construction et démarrer des constructions.
    • Découvrez quelles instances de SharedSecret CR sont disponibles en entrant la commande oc get sharedsecrets et en obtenant une liste non vide en retour.
    • Déterminez si le compte de service builder dont vous disposez dans votre espace de noms est autorisé à utiliser l'instance de CR SharedSecret donnée. En d'autres termes, vous pouvez exécuter oc adm policy who-can use <identifier of specific SharedSecret> pour voir si le compte de service builder de votre espace de noms est répertorié.
Note

Si aucune des deux dernières conditions préalables de cette liste n'est remplie, établissez, ou demandez à quelqu'un d'établir, le contrôle d'accès basé sur les rôles (RBAC) nécessaire pour découvrir les instances de SharedSecret CR et permettre aux comptes de service d'utiliser les instances de SharedSecret CR.

Procédure

  1. Accorder au compte de service builder les autorisations RBAC pour utiliser l'instance CR SharedSecret en utilisant oc apply avec un contenu YAML :

    Note

    Actuellement, kubectl et oc ont une logique de cas spécial codée en dur qui limite le verbe use aux rôles centrés sur la sécurité des pods. Par conséquent, vous ne pouvez pas utiliser oc create role …​ pour créer le rôle nécessaire à la consommation des instances CR SharedSecret.

    Exemple de commande oc apply -f avec définition de l'objet YAML Role

    $ oc apply -f - <<EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: shared-resource-my-share
      namespace: my-namespace
    rules:
      - apiGroups:
          - sharedresource.openshift.io
        resources:
          - sharedsecrets
        resourceNames:
          - my-share
        verbs:
          - use
    EOF
    Copy to Clipboard Toggle word wrap

  2. Créez le site RoleBinding associé au rôle en utilisant la commande oc:

    Exemple de commande oc create rolebinding

    $ oc create rolebinding shared-resource-my-share --role=shared-resource-my-share --serviceaccount=my-namespace:builder
    Copy to Clipboard Toggle word wrap

  3. Créer un objet BuildConfig qui accède aux droits RHEL.

    Exemple de définition d'un objet YAML BuildConfig

    apiVersion: build.openshift.io/v1
    kind: BuildConfig
    metadata:
      name: my-csi-bc
      namespace: my-csi-app-namespace
    spec:
      runPolicy: Serial
      source:
        dockerfile: |
          FROM registry.redhat.io/ubi8/ubi:latest
          RUN ls -la /etc/pki/entitlement
          RUN rm /etc/rhsm-host
          RUN yum repolist --disablerepo=*
          RUN subscription-manager repos --enable rhocp-4.9-for-rhel-8-x86_64-rpms
          RUN yum -y update
          RUN yum install -y openshift-clients.x86_64
      strategy:
        type: Docker
        dockerStrategy:
          volumes:
            - mounts:
                - destinationPath: "/etc/pki/entitlement"
              name: my-csi-shared-secret
              source:
                csi:
                  driver: csi.sharedresource.openshift.io
                  readOnly: true
                  volumeAttributes:
                    sharedSecret: my-share-bc
                type: CSI
    Copy to Clipboard Toggle word wrap

  4. Lancez une construction à partir de l'objet BuildConfig et suivez les journaux avec la commande oc.

    Exemple de commande oc start-build

    $ oc start-build my-csi-bc -F
    Copy to Clipboard Toggle word wrap

    Exemple 2.1. Exemple de sortie de la commande oc start-build

    Note

    Certaines sections de l'édition suivante ont été remplacées par …​

    build.build.openshift.io/my-csi-bc-1 started
    Caching blobs under "/var/cache/blobs".
    
    Pulling image registry.redhat.io/ubi8/ubi:latest ...
    Trying to pull registry.redhat.io/ubi8/ubi:latest...
    Getting image source signatures
    Copying blob sha256:5dcbdc60ea6b60326f98e2b49d6ebcb7771df4b70c6297ddf2d7dede6692df6e
    Copying blob sha256:8671113e1c57d3106acaef2383f9bbfe1c45a26eacb03ec82786a494e15956c3
    Copying config sha256:b81e86a2cb9a001916dc4697d7ed4777a60f757f0b8dcc2c4d8df42f2f7edb3a
    Writing manifest to image destination
    Storing signatures
    Adding transient rw bind mount for /run/secrets/rhsm
    STEP 1/9: FROM registry.redhat.io/ubi8/ubi:latest
    STEP 2/9: RUN ls -la /etc/pki/entitlement
    total 360
    drwxrwxrwt. 2 root root 	80 Feb  3 20:28 .
    drwxr-xr-x. 10 root root	154 Jan 27 15:53 ..
    -rw-r--r--. 1 root root   3243 Feb  3 20:28 entitlement-key.pem
    -rw-r--r--. 1 root root 362540 Feb  3 20:28 entitlement.pem
    time="2022-02-03T20:28:32Z" level=warning msg="Adding metacopy option, configured globally"
    --> 1ef7c6d8c1a
    STEP 3/9: RUN rm /etc/rhsm-host
    time="2022-02-03T20:28:33Z" level=warning msg="Adding metacopy option, configured globally"
    --> b1c61f88b39
    STEP 4/9: RUN yum repolist --disablerepo=*
    Updating Subscription Management repositories.
    
    
    ...
    
    --> b067f1d63eb
    STEP 5/9: RUN subscription-manager repos --enable rhocp-4.9-for-rhel-8-x86_64-rpms
    Repository 'rhocp-4.9-for-rhel-8-x86_64-rpms' is enabled for this system.
    time="2022-02-03T20:28:40Z" level=warning msg="Adding metacopy option, configured globally"
    --> 03927607ebd
    STEP 6/9: RUN yum -y update
    Updating Subscription Management repositories.
    
    ...
    
    Upgraded:
      systemd-239-51.el8_5.3.x86_64      	systemd-libs-239-51.el8_5.3.x86_64
      systemd-pam-239-51.el8_5.3.x86_64
    Installed:
      diffutils-3.6-6.el8.x86_64           	libxkbcommon-0.9.1-1.el8.x86_64
      xkeyboard-config-2.28-1.el8.noarch
    
    Complete!
    time="2022-02-03T20:29:05Z" level=warning msg="Adding metacopy option, configured globally"
    --> db57e92ff63
    STEP 7/9: RUN yum install -y openshift-clients.x86_64
    Updating Subscription Management repositories.
    
    ...
    
    Installed:
      bash-completion-1:2.7-5.el8.noarch
      libpkgconf-1.4.2-1.el8.x86_64
      openshift-clients-4.9.0-202201211735.p0.g3f16530.assembly.stream.el8.x86_64
      pkgconf-1.4.2-1.el8.x86_64
      pkgconf-m4-1.4.2-1.el8.noarch
      pkgconf-pkg-config-1.4.2-1.el8.x86_64
    
    Complete!
    time="2022-02-03T20:29:19Z" level=warning msg="Adding metacopy option, configured globally"
    --> 609507b059e
    STEP 8/9: ENV "OPENSHIFT_BUILD_NAME"="my-csi-bc-1" "OPENSHIFT_BUILD_NAMESPACE"="my-csi-app-namespace"
    --> cab2da3efc4
    STEP 9/9: LABEL "io.openshift.build.name"="my-csi-bc-1" "io.openshift.build.namespace"="my-csi-app-namespace"
    COMMIT temp.builder.openshift.io/my-csi-app-namespace/my-csi-bc-1:edfe12ca
    --> 821b582320b
    Successfully tagged temp.builder.openshift.io/my-csi-app-namespace/my-csi-bc-1:edfe12ca
    821b582320b41f1d7bab4001395133f86fa9cc99cc0b2b64c5a53f2b6750db91
    Build complete, no image push requested
    Copy to Clipboard Toggle word wrap

2.11. Sécuriser les constructions par la stratégie

Les builds dans OpenShift Container Platform sont exécutés dans des conteneurs privilégiés. En fonction de la stratégie de construction utilisée, si vous avez des privilèges, vous pouvez exécuter des constructions pour escalader leurs permissions sur le cluster et les nœuds hôtes. En tant que mesure de sécurité, elle limite les personnes autorisées à exécuter des builds et la stratégie utilisée pour ces builds. Les builds personnalisés sont intrinsèquement moins sûrs que les builds source, car ils peuvent exécuter n'importe quel code dans un conteneur privilégié, et sont désactivés par défaut. Accordez les permissions de construction de docker avec prudence, car une vulnérabilité dans la logique de traitement de Dockerfile pourrait entraîner l'octroi de privilèges sur le nœud hôte.

Par défaut, tous les utilisateurs qui peuvent créer des builds sont autorisés à utiliser les stratégies de build docker et Source-to-image (S2I). Les utilisateurs disposant de privilèges d'administrateur de cluster peuvent activer la stratégie de build personnalisée, comme indiqué dans la section restreignant les stratégies de build à un utilisateur de manière globale.

Vous pouvez contrôler qui peut construire et quelles stratégies de construction ils peuvent utiliser en utilisant une politique d'autorisation. Chaque stratégie de construction a une sous-ressource de construction correspondante. Un utilisateur doit avoir l'autorisation de créer un build et l'autorisation de créer sur la sous-ressource de la stratégie de build pour créer des builds utilisant cette stratégie. Des rôles par défaut sont fournis pour accorder l'autorisation de création sur la sous-ressource de la stratégie de construction.

Expand
Tableau 2.3. Stratégie de construction Sous-ressources et rôles
StratégieSous-ressourceRôle

Docker

builds/docker

system:build-strategy-docker

De la source à l'image

builds/source

system:build-strategy-source

Sur mesure

constructions/personnalisées

système:construire-stratégie-personnalisée

JenkinsPipeline

builds/jenkinspipeline

système:construire-stratégie-jenkinspipeline

Pour empêcher l'accès à une stratégie de construction particulière au niveau mondial, connectez-vous en tant qu'utilisateur disposant de privilèges d'administrateur de cluster, supprimez le rôle correspondant du groupe system:authenticated et appliquez l'annotation rbac.authorization.kubernetes.io/autoupdate: "false" pour les protéger contre les modifications entre les redémarrages de l'API. L'exemple suivant montre la désactivation de la stratégie de construction Docker.

Procédure

  1. Appliquez l'annotation rbac.authorization.kubernetes.io/autoupdate:

    $ oc edit clusterrolebinding system:build-strategy-docker-binding
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      annotations:
        rbac.authorization.kubernetes.io/autoupdate: "false" 
    1
    
      creationTimestamp: 2018-08-10T01:24:14Z
      name: system:build-strategy-docker-binding
      resourceVersion: "225"
      selfLink: /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/system%3Abuild-strategy-docker-binding
      uid: 17b1f3d4-9c3c-11e8-be62-0800277d20bf
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: system:build-strategy-docker
    subjects:
    - apiGroup: rbac.authorization.k8s.io
      kind: Group
      name: system:authenticated
    Copy to Clipboard Toggle word wrap

    1
    Changez la valeur de l'annotation rbac.authorization.kubernetes.io/autoupdate en "false".
  2. Supprimer le rôle :

    $ oc adm policy remove-cluster-role-from-group system:build-strategy-docker system:authenticated
    Copy to Clipboard Toggle word wrap
  3. Assurez-vous que les sous-ressources de la stratégie de construction sont également supprimées de ces rôles :

    $ oc edit clusterrole admin
    Copy to Clipboard Toggle word wrap
    $ oc edit clusterrole edit
    Copy to Clipboard Toggle word wrap
  4. Pour chaque rôle, indiquez les sous-ressources qui correspondent à la ressource de la stratégie à désactiver.

    1. Désactiver la stratégie de construction de docker pour admin:

      kind: ClusterRole
      metadata:
        name: admin
      ...
      - apiGroups:
        - ""
        - build.openshift.io
        resources:
        - buildconfigs
        - buildconfigs/webhooks
        - builds/custom 
      1
      
        - builds/source
        verbs:
        - create
        - delete
        - deletecollection
        - get
        - list
        - patch
        - update
        - watch
      ...
      Copy to Clipboard Toggle word wrap
      1
      Ajoutez builds/custom et builds/source pour désactiver globalement les constructions de dockers pour les utilisateurs ayant le rôle admin.

Vous pouvez autoriser un ensemble d'utilisateurs spécifiques à créer des builds avec une stratégie particulière.

Conditions préalables

  • Désactiver l'accès global à la stratégie de construction.

Procédure

  • Attribuez le rôle correspondant à la stratégie de construction à un utilisateur spécifique. Par exemple, pour ajouter le rôle de cluster system:build-strategy-docker à l'utilisateur devuser:

    $ oc adm policy add-cluster-role-to-user system:build-strategy-docker devuser
    Copy to Clipboard Toggle word wrap
    Avertissement

    Accorder à un utilisateur l'accès au niveau du cluster à la sous-ressource builds/docker signifie que l'utilisateur peut créer des builds avec la stratégie docker dans n'importe quel projet dans lequel il peut créer des builds.

De la même manière que vous attribuez le rôle de stratégie de construction à un utilisateur de manière globale, vous pouvez autoriser un ensemble d'utilisateurs spécifiques au sein d'un projet à créer des constructions à l'aide d'une stratégie particulière.

Conditions préalables

  • Désactiver l'accès global à la stratégie de construction.

Procédure

  • Attribuer le rôle correspondant à la stratégie de construction à un utilisateur spécifique au sein d'un projet. Par exemple, pour ajouter le rôle system:build-strategy-docker dans le projet devproject à l'utilisateur devuser:

    $ oc adm policy add-role-to-user system:build-strategy-docker devuser -n devproject
    Copy to Clipboard Toggle word wrap

2.12. Construire des ressources de configuration

La procédure suivante permet de configurer les paramètres de construction.

La ressource build.config.openshift.io/cluster offre les paramètres de configuration suivants.

Expand
ParamètresDescription

Build

Contient des informations à l'échelle du cluster sur la manière de gérer les builds. Le nom canonique, et le seul valide, est cluster.

spec: Contient des valeurs réglables par l'utilisateur pour la configuration du contrôleur de construction.

buildDefaults

Contrôle les informations par défaut pour les constructions.

defaultProxy: Contient les paramètres proxy par défaut pour toutes les opérations de construction, y compris l'extraction ou la poussée d'images et le téléchargement de sources.

Vous pouvez remplacer les valeurs en définissant les variables d'environnement HTTP_PROXY, HTTPS_PROXY et NO_PROXY dans la stratégie BuildConfig.

gitProxy: Contient les paramètres de proxy pour les opérations Git uniquement. S'ils sont définis, ils remplacent tous les paramètres de proxy pour toutes les commandes Git, telles que git clone.

Les valeurs qui ne sont pas définies ici sont héritées de DefaultProxy.

env: Un ensemble de variables d'environnement par défaut qui sont appliquées à la compilation si les variables spécifiées n'existent pas sur la compilation.

imageLabels: Une liste d'étiquettes qui sont appliquées à l'image résultante. Vous pouvez remplacer une étiquette par défaut en fournissant une étiquette portant le même nom dans l'adresse BuildConfig.

resources: Définit les ressources nécessaires à l'exécution de la construction.

ImageLabel

name: Définit le nom de l'étiquette. Il doit avoir une longueur non nulle.

buildOverrides

Contrôle les paramètres d'annulation des constructions.

imageLabels: Une liste d'étiquettes qui sont appliquées à l'image résultante. Si vous avez fourni une étiquette dans BuildConfig avec le même nom qu'une étiquette dans cette table, votre étiquette sera écrasée.

nodeSelector: Un sélecteur qui doit être vrai pour que le module de construction tienne sur un nœud.

tolerations: Une liste de tolérances qui remplace toutes les tolérances existantes définies sur un module de construction.

BuildList

items: Métadonnées de l'objet standard.

2.12.2. Configuration des paramètres de construction

Vous pouvez configurer les paramètres de construction en modifiant la ressource build.config.openshift.io/cluster.

Procédure

  • Modifier la ressource build.config.openshift.io/cluster:

    $ oc edit build.config.openshift.io/cluster
    Copy to Clipboard Toggle word wrap

    Voici un exemple de ressource build.config.openshift.io/cluster:

    apiVersion: config.openshift.io/v1
    kind: Build
    1
    
    metadata:
      annotations:
        release.openshift.io/create-only: "true"
      creationTimestamp: "2019-05-17T13:44:26Z"
      generation: 2
      name: cluster
      resourceVersion: "107233"
      selfLink: /apis/config.openshift.io/v1/builds/cluster
      uid: e2e9cc14-78a9-11e9-b92b-06d6c7da38dc
    spec:
      buildDefaults:
    2
    
        defaultProxy:
    3
    
          httpProxy: http://proxy.com
          httpsProxy: https://proxy.com
          noProxy: internal.com
        env:
    4
    
        - name: envkey
          value: envvalue
        gitProxy:
    5
    
          httpProxy: http://gitproxy.com
          httpsProxy: https://gitproxy.com
          noProxy: internalgit.com
        imageLabels:
    6
    
        - name: labelkey
          value: labelvalue
        resources:
    7
    
          limits:
            cpu: 100m
            memory: 50Mi
          requests:
            cpu: 10m
            memory: 10Mi
      buildOverrides:
    8
    
        imageLabels:
    9
    
        - name: labelkey
          value: labelvalue
        nodeSelector:
    10
    
          selectorkey: selectorvalue
        tolerations:
    11
    
        - effect: NoSchedule
          key: node-role.kubernetes.io/builds
    operator: Exists
    Copy to Clipboard Toggle word wrap
    1
    Build: Contient des informations à l'échelle du cluster sur la manière de gérer les builds. Le nom canonique, et le seul valide, est cluster.
    2
    buildDefaults: Contrôle les informations par défaut pour les constructions.
    3
    defaultProxy: Contient les paramètres proxy par défaut pour toutes les opérations de construction, y compris l'extraction ou la poussée d'images et le téléchargement de sources.
    4
    env: Un ensemble de variables d'environnement par défaut qui sont appliquées à la compilation si les variables spécifiées n'existent pas sur la compilation.
    5
    gitProxy: Contient les paramètres du proxy pour les opérations Git uniquement. S'ils sont définis, ils remplacent tous les paramètres de proxy pour toutes les commandes Git, telles que git clone.
    6
    imageLabels: Une liste d'étiquettes qui sont appliquées à l'image résultante. Vous pouvez remplacer une étiquette par défaut en fournissant une étiquette portant le même nom dans l'adresse BuildConfig.
    7
    resources: Définit les ressources nécessaires à l'exécution de la construction.
    8
    buildOverrides: Contrôle les paramètres d'annulation des constructions.
    9
    imageLabels: Une liste d'étiquettes qui sont appliquées à l'image résultante. Si vous avez fourni une étiquette dans BuildConfig avec le même nom qu'une étiquette dans cette table, votre étiquette sera écrasée.
    10
    nodeSelector: Un sélecteur qui doit être vrai pour que le module de construction tienne sur un nœud.
    11
    tolerations: Une liste de tolérances qui remplace toutes les tolérances existantes définies sur un module de construction.

2.13. Dépannage des constructions

Utilisez les éléments suivants pour résoudre les problèmes de construction.

2.13.1. Résoudre les refus d'accès aux ressources

Si votre demande d'accès aux ressources est refusée :

Enjeu
Une construction échoue avec :
requested access to the resource is denied
Copy to Clipboard Toggle word wrap
Résolution
Vous avez dépassé l'un des quotas d'images définis pour votre projet. Vérifiez votre quota actuel et vérifiez les limites appliquées et l'espace de stockage utilisé :
$ oc describe quota
Copy to Clipboard Toggle word wrap

2.13.2. Échec de la génération du certificat de service

Si votre demande d'accès aux ressources est refusée :

Enjeu
Si la génération d'un certificat de service échoue avec (l'annotation service.beta.openshift.io/serving-cert-generation-error du service contient) :

Exemple de sortie

secret/ssl-key references serviceUID 62ad25ca-d703-11e6-9d6f-0e9c0057b608, which does not match 77b6dd80-d716-11e6-9d6f-0e9c0057b60
Copy to Clipboard Toggle word wrap

Résolution
Le service qui a généré le certificat n'existe plus, ou a un autre serviceUID. Vous devez forcer la régénération des certificats en supprimant l'ancien secret et en effaçant les annotations suivantes sur le service : service.beta.openshift.io/serving-cert-generation-error et service.beta.openshift.io/serving-cert-generation-error-num:
oc delete secret <secret_name>
Copy to Clipboard Toggle word wrap
oc annotate service <service_name> service.beta.openshift.io/serving-cert-generation-error-
Copy to Clipboard Toggle word wrap
oc annotate service <service_name> service.beta.openshift.io/serving-cert-generation-error-num-
Copy to Clipboard Toggle word wrap
Note

La commande de suppression d'une annotation comporte une adresse - après le nom de l'annotation à supprimer.

Utilisez les sections suivantes pour configurer des autorités de certification (AC) supplémentaires qui seront approuvées par les builds lors de l'extraction d'images à partir d'un registre d'images.

La procédure exige qu'un administrateur de cluster crée un site ConfigMap et ajoute des autorités de certification supplémentaires en tant que clés dans le site ConfigMap.

  • Le site ConfigMap doit être créé dans l'espace de noms openshift-config.
  • domain est la clé dans le site ConfigMap et value est le certificat codé en PEM.

    • Chaque autorité de certification doit être associée à un domaine. Le format du domaine est hostname[..port].
  • Le nom ConfigMap doit être défini dans le champ spec.additionalTrustedCA de la ressource image.config.openshift.io/cluster cluster scoped configuration.

2.14.1. Ajout d'autorités de certification au cluster

La procédure suivante permet d'ajouter des autorités de certification (AC) à la grappe afin de les utiliser lors de l'envoi et du retrait d'images.

Conditions préalables

  • Vous devez avoir accès aux certificats publics du registre, généralement un fichier hostname/ca.crt situé dans le répertoire /etc/docker/certs.d/.

Procédure

  1. Créez un site ConfigMap dans l'espace de noms openshift-config contenant les certificats approuvés pour les registres qui utilisent des certificats auto-signés. Pour chaque fichier CA, assurez-vous que la clé de ConfigMap est le nom d'hôte du registre au format hostname[..port]:

    $ oc create configmap registry-cas -n openshift-config \
    --from-file=myregistry.corp.com..5000=/etc/docker/certs.d/myregistry.corp.com:5000/ca.crt \
    --from-file=otherregistry.com=/etc/docker/certs.d/otherregistry.com/ca.crt
    Copy to Clipboard Toggle word wrap
  2. Mettre à jour la configuration de l'image du cluster :

    $ oc patch image.config.openshift.io/cluster --patch '{"spec":{"additionalTrustedCA":{"name":"registry-cas"}}}' --type=merge
    Copy to Clipboard Toggle word wrap

Chapitre 3. Pipelines

3.1. Notes de mise à jour de Red Hat OpenShift Pipelines

Red Hat OpenShift Pipelines est une expérience CI/CD cloud-native basée sur le projet Tekton qui fournit :

  • Définitions standard de pipeline natif Kubernetes (CRDs).
  • Pipelines sans serveur, sans frais de gestion des serveurs de CI.
  • Extensibilité pour construire des images en utilisant n'importe quel outil Kubernetes, comme S2I, Buildah, JIB et Kaniko.
  • Portabilité sur n'importe quelle distribution Kubernetes.
  • CLI puissant pour interagir avec les pipelines.
  • Expérience utilisateur intégrée avec la perspective Developer de la console web OpenShift Container Platform.

Pour une vue d'ensemble de Red Hat OpenShift Pipelines, voir Comprendre OpenShift Pipelines.

3.1.1. Matrice de compatibilité et de soutien

Certaines fonctionnalités de cette version sont actuellement en avant-première technologique. Ces fonctionnalités expérimentales ne sont pas destinées à être utilisées en production.

Dans le tableau, les caractéristiques sont marquées par les statuts suivants :

TP

Avant-première technologique

GA

Disponibilité générale

Expand
Tableau 3.1. Matrice de compatibilité et de soutien
Version de Red Hat OpenShift PipelinesVersion du composantVersion d'OpenShiftStatut de soutien

Opérateur

Pipelines

Déclencheurs

CLI

Catalogue

Chaînes

Hub

Les pipelines en tant que code

  

1.10

0.44.x

0.23.x

0.30.x

NA

0.15.x (TP)

1.12.x (TP)

0.17.x (GA)

4.11, 4.12, 4.13 (prévus)

GA

1.9

0.41.x

0.22.x

0.28.x

NA

0.13.x (TP)

1.11.x (TP)

0.15.x (GA)

4.11, 4.12, 4.13 (prévus)

GA

1.8

0.37.x

0.20.x

0.24.x

NA

0.9.0 (TP)

1.8.x (TP)

0.10.x (TP)

4.10, 4.11, 4.12

GA

1.7

0.33.x

0.19.x

0.23.x

0.33

0.8.0 (TP)

1.7.0 (TP)

0.5.x (TP)

4.9, 4.10, 4.11

GA

1.6

0.28.x

0.16.x

0.21.x

0.28

N/A

N/A

N/A

4.9

GA

1.5

0.24.x

0.14.x (TP)

0.19.x

0.24

N/A

N/A

N/A

4.8

GA

1.4

0.22.x

0.12.x (TP)

0.17.x

0.22

N/A

N/A

N/A

4.7

GA

En outre, la prise en charge de l'exécution de Red Hat OpenShift Pipelines sur du matériel ARM est dans l'aperçu technologique.

Pour toute question ou commentaire, vous pouvez envoyer un courriel à l'équipe produit à l'adresse pipelines-interest@redhat.com.

3.1.2. Rendre l'open source plus inclusif

Red Hat s'engage à remplacer les termes problématiques dans son code, sa documentation et ses propriétés Web. Nous commençons par ces quatre termes : master, slave, blacklist et whitelist. En raison de l'ampleur de cette entreprise, ces changements seront mis en œuvre progressivement au cours de plusieurs versions à venir. Pour plus de détails, voir le message de notre directeur technique Chris Wright.

Avec cette mise à jour, Red Hat OpenShift Pipelines General Availability (GA) 1.10 est disponible sur OpenShift Container Platform 4.11 et les versions ultérieures.

3.1.3.1. Nouvelles fonctionnalités

En plus des corrections et des améliorations de stabilité, les sections suivantes mettent en évidence les nouveautés de Red Hat OpenShift Pipelines 1.10.

3.1.3.1.1. Pipelines
  • Avec cette mise à jour, vous pouvez spécifier des variables d'environnement dans un modèle de pod PipelineRun ou TaskRun pour remplacer ou ajouter les variables configurées dans une tâche ou une étape. Vous pouvez également spécifier des variables d'environnement dans un modèle de module par défaut afin d'utiliser ces variables globalement pour tous les modules PipelineRuns et TaskRuns. Cette mise à jour ajoute également une nouvelle configuration par défaut nommée forbidden-envs pour filtrer les variables d'environnement lors de la propagation à partir des modèles de pods.
  • Avec cette mise à jour, les tâches personnalisées dans les pipelines sont activées par défaut.

    Note

    Pour désactiver cette mise à jour, définissez l'indicateur enable-custom-tasks sur false dans la ressource personnalisée feature-flags config.

  • Cette mise à jour prend en charge la version de l'API v1beta1.CustomRun pour les tâches personnalisées.
  • Cette mise à jour ajoute la prise en charge du rapprochement PipelineRun pour la création d'une exécution personnalisée. Par exemple, la version personnalisée de TaskRuns créée à partir de PipelineRuns peut désormais utiliser la version de l'API v1beta1.CustomRun au lieu de v1alpha1.Run, si l'indicateur de fonctionnalité custom-task-version est défini sur v1beta1, au lieu de la valeur par défaut v1alpha1.

    Note

    Vous devez mettre à jour le contrôleur de tâches personnalisé pour qu'il écoute la version de l'API *v1beta1.CustomRun au lieu de *v1alpha1.Run afin de répondre aux demandes v1beta1.CustomRun.

  • Cette mise à jour ajoute un nouveau champ retries aux spécifications v1beta1.TaskRun et v1.TaskRun.
3.1.3.1.2. Déclencheurs
  • Avec cette mise à jour, les déclencheurs prennent en charge la création des objets Pipelines, Tasks, PipelineRuns, et TaskRuns de la version v1 de l'API ainsi que des objets CustomRun de la version v1beta1 de l'API.
  • Avec cette mise à jour, GitHub Interceptor bloque l'exécution d'un déclencheur de demande d'extraction à moins qu'il ne soit invoqué par un propriétaire ou accompagné d'un commentaire configurable de la part d'un propriétaire.

    Note

    Pour activer ou désactiver cette mise à jour, définissez la valeur du paramètre githubOwners sur true ou false dans le fichier de configuration de GitHub Interceptor.

  • Avec cette mise à jour, GitHub Interceptor a la possibilité d'ajouter une liste délimitée par des virgules de tous les fichiers qui ont été modifiés pour les événements push et pull request. 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 des extensions de premier niveau.
  • Cette mise à jour modifie le site MinVersion de TLS en tls.VersionTLS12 afin que les déclencheurs s'exécutent sur OpenShift Container Platform lorsque le mode Federal Information Processing Standards (FIPS) est activé.
3.1.3.1.3. CLI
  • Cette mise à jour ajoute la possibilité de transmettre un fichier CSI (Container Storage Interface) en tant qu'espace de travail au moment du démarrage d'une application Task, ClusterTask ou Pipeline.
  • Cette mise à jour ajoute la prise en charge de l'API v1 à toutes les commandes CLI associées aux ressources task, pipeline, pipeline run et task run. Tekton CLI fonctionne avec les API v1beta1 et v1 pour ces ressources.
  • Cette mise à jour ajoute la prise en charge d'un paramètre de type d'objet dans les commandes start et describe.
3.1.3.1.4. Opérateur
  • Cette mise à jour ajoute un paramètre default-forbidden-env dans les propriétés optionnelles du pipeline. Ce paramètre inclut des variables d'environnement interdites qui ne doivent pas être propagées si elles sont fournies par des modèles de pods.
  • Cette mise à jour ajoute la prise en charge des logos personnalisés dans l'interface utilisateur du Tekton Hub. Pour ajouter un logo personnalisé, définissez la valeur du paramètre customLogo à l'URI codée en base64 du logo dans le Tekton Hub CR.
  • Cette mise à jour augmente le numéro de version de la tâche git-clone à 0.9.
3.1.3.1.5. Chaînes Tekton
  • Cette mise à jour ajoute des annotations et des étiquettes aux attestations PipelineRun et TaskRun.
  • Cette mise à jour ajoute un nouveau format appelé slsa/v1, qui génère la même provenance que celle générée lors d'une demande au format in-toto.
  • Avec cette mise à jour, les fonctionnalités de Sigstore sont retirées des fonctionnalités expérimentales.
  • Avec cette mise à jour, la fonction predicate.materials inclut l'URI de l'image et les informations de résumé de toutes les étapes et barres latérales d'un objet TaskRun.
3.1.3.1.6. Hub Tekton
  • Cette mise à jour prend en charge l'installation, la mise à niveau ou la rétrogradation des ressources Tekton de la version de l'API v1 sur le cluster.
  • Cette mise à jour permet d'ajouter un logo personnalisé à la place du logo du Tekton Hub dans l'interface utilisateur.
  • Cette mise à jour étend les fonctionnalités de la commande tkn hub install en ajoutant un drapeau --type artifact, qui récupère les ressources de l'Artifact Hub et les installe sur votre cluster.
  • Cette mise à jour ajoute des informations sur le niveau de support, le catalogue et l'organisation en tant qu'étiquettes pour les ressources installées depuis Artifact Hub sur votre cluster.
3.1.3.1.7. Les pipelines en tant que code
  • Cette mise à jour améliore la prise en charge des webhooks entrants. Pour une application GitHub installée sur le cluster OpenShift Container Platform, vous n'avez pas besoin de fournir la spécification git_provider pour un webhook entrant. Au lieu de cela, Pipelines as Code détecte le secret et l'utilise pour le webhook entrant.
  • Avec cette mise à jour, vous pouvez utiliser le même jeton pour récupérer des tâches distantes du même hôte sur GitHub avec une branche autre que celle par défaut.
  • Avec cette mise à jour, Pipelines as Code supporte les modèles Tekton v1. Vous pouvez avoir des modèles v1 et v1beta1, que Pipelines as Code lit pour la génération de PR. Le PR est créé en tant que v1 sur le cluster.
  • Avant cette mise à jour, l'interface utilisateur de la console OpenShift utilisait un modèle d'exécution de pipeline codé en dur comme modèle de secours lorsqu'un modèle d'exécution n'était pas trouvé dans l'espace de noms OpenShift. Cette mise à jour de la carte de configuration pipelines-as-code fournit un nouveau modèle d'exécution de pipeline par défaut nommé pipelines-as-code-template-default pour la console à utiliser.
  • Avec cette mise à jour, Pipelines as Code supporte le statut minimal de Tekton Pipelines 0.44.0.
  • Avec cette mise à jour, Pipelines as Code supporte l'API Tekton v1, ce qui signifie que Pipelines as Code est maintenant compatible avec Tekton v0.44 et plus.
  • Avec cette mise à jour, vous pouvez configurer des tableaux de bord de console personnalisés en plus de la configuration d'une console pour OpenShift et des tableaux de bord Tekton pour k8s.
  • Avec cette mise à jour, Pipelines as Code détecte l'installation d'une application GitHub initiée à l'aide de la commande tkn pac create repo et ne nécessite pas de webhook GitHub si elle a été installée globalement.
  • Avant cette mise à jour, s'il y avait une erreur sur une exécution de PipelineRun et non sur les tâches attachées à PipelineRun, Pipelines as Code ne signalait pas correctement l'échec. Avec cette mise à jour, Pipelines as Code signale correctement l'erreur sur les contrôles GitHub lorsqu'un PipelineRun n'a pas pu être créé.
  • Avec cette mise à jour, Pipelines as Code inclut une variable target_namespace, qui s'étend à l'espace de noms en cours d'exécution où PipelineRun est exécuté.
  • Avec cette mise à jour, Pipelines as Code vous permet de contourner les questions d'entreprise de GitHub dans l'application CLI bootstrap GitHub.
  • Avec cette mise à jour, Pipelines as Code ne signale pas d'erreurs lorsque le référentiel CR n'a pas été trouvé.
  • Avec cette mise à jour, Pipelines as Code signale une erreur si plusieurs exécutions de pipeline portant le même nom ont été trouvées.
3.1.3.2. Changements en cours
  • Avec cette mise à jour, la version précédente de la commande tkn n'est pas compatible avec Red Hat OpenShift Pipelines 1.10.
  • Cette mise à jour supprime la prise en charge des ressources de pipeline Cluster et CloudEvent dans Tekton CLI. Vous ne pouvez pas créer de ressources de pipeline en utilisant la commande tkn pipelineresource create. De plus, les ressources de pipeline ne sont plus prises en charge dans la commande start d'une tâche, d'une tâche de cluster ou d'un pipeline.
  • Cette mise à jour supprime tekton en tant que format de provenance des chaînes Tekton.
3.1.3.3. Fonctionnalités obsolètes et supprimées
  • Dans Red Hat OpenShift Pipelines 1.10, les commandes ClusterTask sont désormais obsolètes et devraient être supprimées dans une prochaine version. La commande tkn task create est également obsolète avec cette mise à jour.
  • Dans Red Hat OpenShift Pipelines 1.10, les drapeaux -i et -o qui étaient utilisés avec la commande tkn task start sont désormais obsolètes car l'API v1 ne prend pas en charge les ressources de pipeline.
  • Dans Red Hat OpenShift Pipelines 1.10, l'indicateur -r qui était utilisé avec la commande tkn pipeline start est obsolète car l'API v1 ne prend pas en charge les ressources de pipeline.
  • La mise à jour Red Hat OpenShift Pipelines 1.10 définit le paramètre openshiftDefaultEmbeddedStatus à both avec full et minimal statut intégré. Le drapeau permettant de modifier le statut intégré par défaut est également obsolète et sera supprimé. De plus, le statut intégré par défaut du pipeline sera modifié en minimal dans une prochaine version.
3.1.3.4. Problèmes connus
  • Cette mise à jour inclut les changements suivants, incompatibles avec le passé :

    • Suppression de la grappe PipelineResources
    • Suppression du nuage PipelineResources
  • Si la fonctionnalité de mesure des pipelines ne fonctionne pas après une mise à niveau du cluster, exécutez la commande suivante en guise de solution de contournement :

    $ oc get tektoninstallersets.operator.tekton.dev | awk '/pipeline-main-static/ {print $1}' | xargs oc delete tektoninstallersets
    Copy to Clipboard Toggle word wrap
  • Avec cette mise à jour, l'utilisation de bases de données externes, telles que Crunchy PostgreSQL, n'est pas prise en charge sur IBM Power, IBM zSystems et IBM® LinuxONE. Utilisez plutôt la base de données par défaut du Tekton Hub.
3.1.3.5. Problèmes corrigés
  • Avant cette mise à jour, la commande opc pac générait une erreur d'exécution au lieu d'afficher un message d'aide. Cette mise à jour corrige la commande opc pac pour qu'elle affiche le message d'aide.
  • Avant cette mise à jour, l'exécution de la commande tkn pac create repo nécessitait les détails du webhook pour créer un dépôt. Avec cette mise à jour, la commande tkn-pac create repo ne configure pas de webhook lorsque votre application GitHub est installée.
  • Avant cette mise à jour, Pipelines as Code ne signalait pas d'erreur de création d'une exécution de pipeline lorsque Tekton Pipelines rencontrait des problèmes lors de la création de la ressource PipelineRun. Par exemple, une tâche inexistante dans un pipeline n'affichait aucun statut. Avec cette mise à jour, Pipelines as Code affiche le message d'erreur approprié provenant de Tekton Pipelines ainsi que la tâche manquante.
  • Cette mise à jour corrige la redirection de la page de l'interface utilisateur après une authentification réussie. Désormais, vous êtes redirigé vers la même page que celle où vous avez tenté de vous connecter au Tekton Hub.
  • Cette mise à jour corrige la commande list avec ces drapeaux, --all-namespaces et --output=yaml, pour une tâche en grappe, une tâche individuelle et un pipeline.
  • Cette mise à jour supprime la barre oblique à la fin de l'URL de repo.spec.url afin qu'elle corresponde à l'URL provenant de GitHub.
  • Avant cette mise à jour, la fonction marshalJSON n'affichait pas de liste d'objets. Avec cette mise à jour, la fonction marshalJSON gère la liste d'objets.
  • Avec cette mise à jour, Pipelines as Code vous permet de contourner les questions d'entreprise de GitHub dans l'application CLI bootstrap GitHub.
  • Cette mise à jour corrige la vérification des collaborateurs GitHub lorsque votre dépôt a plus de 100 utilisateurs.
  • Avec cette mise à jour, les commandes sign et verify pour une tâche ou un pipeline fonctionnent désormais sans fichier de configuration kubernetes.
  • Avec cette mise à jour, Tekton Operator nettoie les tâches cron d'élagage restantes si l'élagage a été ignoré sur un espace de noms.
  • Avant cette mise à jour, l'objet API ConfigMap n'était pas mis à jour avec une valeur configurée par l'utilisateur pour l'intervalle de rafraîchissement du catalogue. Cette mise à jour corrige l'API CATALOG_REFRESH_INTERVAL dans le Tekon Hub CR.
  • Cette mise à jour corrige la réconciliation de PipelineRunStatus lors de la modification de l'indicateur de fonctionnalité EmbeddedStatus. Cette mise à jour réinitialise les paramètres suivants :

    • Les paramètres status.runs et status.taskruns à nil avec minimal EmbeddedStatus
    • Le paramètre status.childReferences à nil avec full EmbeddedStatus
  • Cette mise à jour ajoute une configuration de conversion au CRD ResolutionRequest. Cette mise à jour configure correctement la conversion de la requête v1alpha1.ResolutionRequest vers la requête v1beta1.ResolutionRequest.
  • Cette mise à jour vérifie la présence d'espaces de travail en double associés à une tâche de pipeline.
  • Cette mise à jour corrige la valeur par défaut de l'activation des résolveurs dans le code.
  • Cette mise à jour corrige la conversion des noms TaskRef et PipelineRef à l'aide d'un résolveur.

Avec cette mise à jour, Red Hat OpenShift Pipelines General Availability (GA) 1.9 est disponible sur OpenShift Container Platform 4.11 et les versions ultérieures.

3.1.4.1. Nouvelles fonctionnalités

En plus des corrections et des améliorations de stabilité, les sections suivantes mettent en évidence les nouveautés de Red Hat OpenShift Pipelines 1.9.

3.1.4.1.1. Pipelines
  • Avec cette mise à jour, vous pouvez spécifier les paramètres du pipeline et les résultats sous forme de tableaux et de dictionnaires d'objets.
  • Cette mise à jour prend en charge l'interface de stockage de conteneurs (CSI) et les volumes projetés pour votre espace de travail.
  • Avec cette mise à jour, vous pouvez spécifier les paramètres stdoutConfig et stderrConfig lors de la définition des étapes du pipeline. La définition de ces paramètres permet de capturer la sortie standard et l'erreur standard, associées aux étapes, dans des fichiers locaux.
  • Avec cette mise à jour, vous pouvez ajouter des variables dans le gestionnaire d'événements steps[].onError, par exemple, $(params.CONTINUE).
  • Avec cette mise à jour, vous pouvez utiliser le résultat de la tâche finally dans la définition PipelineResults. Par exemple, $(finally.<pipelinetask-name>.result.<result-name>), où <pipelinetask-name> désigne le nom de la tâche du pipeline et <result-name> le nom du résultat.
  • Cette mise à jour prend en charge les besoins en ressources au niveau des tâches pour l'exécution d'une tâche.
  • Avec cette mise à jour, vous n'avez pas besoin de recréer les paramètres qui sont partagés, sur la base de leurs noms, entre un pipeline et les tâches définies. Cette mise à jour fait partie d'une fonctionnalité de l'avant-première pour les développeurs.
  • Cette mise à jour ajoute la prise en charge de la résolution à distance, comme les résolveurs intégrés de git, cluster, bundle et hub.
3.1.4.1.2. Déclencheurs
  • Cette mise à jour ajoute le CRD Interceptor pour définir NamespacedInterceptor. Vous pouvez utiliser NamespacedInterceptor dans la section kind de la référence aux intercepteurs dans les déclencheurs ou dans la spécification EventListener.
  • Cette mise à jour permet à CloudEvents.
  • Avec cette mise à jour, vous pouvez configurer le numéro de port du webhook lors de la définition d'un déclencheur.
  • Cette mise à jour permet d'utiliser le déclencheur eventID comme entrée dans TriggerBinding.
  • Cette mise à jour prend en charge la validation et la rotation des certificats pour le serveur ClusterInterceptor.

    • Les déclencheurs effectuent la validation des certificats pour les intercepteurs principaux et transmettent un nouveau certificat à ClusterInterceptor lorsque son certificat expire.
3.1.4.1.3. CLI
  • Cette mise à jour permet d'afficher les annotations dans la commande describe.
  • Cette mise à jour permet d'afficher le pipeline, les tâches et le délai d'attente dans la commande pr describe.
  • Cette mise à jour ajoute des drapeaux permettant d'indiquer le pipeline, les tâches et le délai d'attente dans la commande pipeline start.
  • Cette mise à jour permet d'indiquer la présence d'un espace de travail, optionnel ou obligatoire, dans la commande describe d'une tâche et d'un pipeline.
  • Cette mise à jour ajoute le drapeau timestamps pour afficher les journaux avec un horodatage.
  • Cette mise à jour ajoute un nouvel indicateur --ignore-running-pipelinerun, qui ignore la suppression de TaskRun associée à PipelineRun.
  • Cette mise à jour ajoute la prise en charge des commandes expérimentales. Cette mise à jour ajoute également des sous-commandes expérimentales, sign et verify à l'outil CLI tkn.
  • Cette mise à jour permet d'utiliser la fonction d'achèvement de l'interpréteur de commandes Z (Zsh) sans générer de fichiers.
  • Cette mise à jour introduit un nouvel outil CLI appelé opc. Il est prévu qu'une prochaine version remplace l'outil CLI tkn par opc.

    Important
    • Le nouvel outil CLI opc est une fonctionnalité de l'aperçu technologique.
    • opc remplacera tkn avec des fonctionnalités supplémentaires spécifiques à Red Hat OpenShift Pipelines, qui ne s'intègrent pas nécessairement dans tkn.
3.1.4.1.4. Opérateur
  • Avec cette mise à jour, Pipelines as Code est installé par défaut. Vous pouvez désactiver Pipelines as Code en utilisant le drapeau -p:

    $ oc patch tektonconfig config --type="merge" -p '{"spec": {"platforms": {"openshift":{"pipelinesAsCode": {"enable": false}}}}}'
    Copy to Clipboard Toggle word wrap
  • Avec cette mise à jour, vous pouvez également modifier les configurations de Pipelines as Code dans le CRD TektonConfig.
  • Avec cette mise à jour, si vous désactivez la perspective développeur, l'opérateur n'installe pas les ressources personnalisées liées à la console développeur.
  • Cette mise à jour inclut le support de ClusterTriggerBinding pour Bitbucket Server et Bitbucket Cloud et vous aide à réutiliser un TriggerBinding sur l'ensemble de votre cluster.
3.1.4.1.5. Résolveurs
Important

Resolvers est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas de les utiliser en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.

Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.

  • Avec cette mise à jour, vous pouvez configurer les résolveurs de pipeline dans le CRD TektonConfig. Vous pouvez activer ou désactiver ces résolveurs de pipeline : enable-bundles-resolver, enable-cluster-resolver, enable-git-resolver, et enable-hub-resolver.

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      pipeline:
        enable-bundles-resolver: true
        enable-cluster-resolver: true
        enable-git-resolver: true
        enable-hub-resolver: true
    ...
    Copy to Clipboard Toggle word wrap

    Vous pouvez également fournir des configurations spécifiques au résolveur dans TektonConfig. Par exemple, vous pouvez définir les champs suivants dans le format map[string]string pour définir des configurations pour des résolveurs individuels :

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      pipeline:
        bundles-resolver-config:
          default-service-account: pipelines
        cluster-resolver-config:
          default-namespace: test
        git-resolver-config:
          server-url: localhost.com
        hub-resolver-config:
          default-tekton-hub-catalog: tekton
    ...
    Copy to Clipboard Toggle word wrap
3.1.4.1.6. Chaînes Tekton
Important

Tekton Chains est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas de les utiliser en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.

Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.

  • Avant cette mise à jour, seules les images de l'Open Container Initiative (OCI) étaient prises en charge en tant que sorties de TaskRun dans l'agent de provenance in-toto. Cette mise à jour ajoute les métadonnées de provenance in-toto en tant que sorties avec ces suffixes, ARTIFACT_URI et ARTIFACT_DIGEST.
  • Avant cette mise à jour, seules les attestations TaskRun étaient prises en charge. Cette mise à jour ajoute la prise en charge des attestations PipelineRun.
  • Cette mise à jour ajoute la prise en charge des chaînes Tekton pour obtenir le paramètre imgPullSecret à partir du modèle de pod. Cette mise à jour vous aide à configurer l'authentification du référentiel en fonction de chaque exécution de pipeline ou de tâche sans modifier le compte de service.
3.1.4.1.7. Hub Tekton
Important

Tekton Hub est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas de les utiliser en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.

Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.

  • Avec cette mise à jour, en tant qu'administrateur, vous pouvez utiliser une base de données externe, telle que Crunchy PostgreSQL avec Tekton Hub, au lieu d'utiliser la base de données par défaut de Tekton Hub. Cette mise à jour vous permet d'effectuer les actions suivantes :

    • Spécifier les coordonnées d'une base de données externe à utiliser avec Tekton Hub
    • Désactiver la base de données Tekton Hub par défaut déployée par l'Opérateur
  • Cette mise à jour supprime la dépendance de config.yaml à l'égard des dépôts Git externes et déplace les données de configuration complètes dans l'API ConfigMap. Cette mise à jour permet à l'administrateur d'effectuer les actions suivantes :

    • Ajoutez les données de configuration, telles que les catégories, les catalogues, les scopes et les defaultScopes dans la ressource personnalisée Tekton Hub.
    • Modifier les données de configuration du Tekton Hub sur le cluster. Toutes les modifications sont conservées lors des mises à jour de l'opérateur.
    • Mettre à jour la liste des catalogues pour Tekton Hub
    • Modifier les catégories pour Tekton Hub

      Note

      Si vous n'ajoutez pas de données de configuration, vous pouvez utiliser les données par défaut de l'API ConfigMap pour les configurations du Tekton Hub.

3.1.4.1.8. Les pipelines en tant que code
  • Cette mise à jour ajoute la prise en charge de la limite de concurrence dans le CRD Repository pour définir le nombre maximum de PipelineRuns en cours d'exécution pour un référentiel à la fois. Les PipelineRuns provenant d'une requête pull ou d'un événement push sont mis en file d'attente dans l'ordre alphabétique.
  • Cette mise à jour ajoute une nouvelle commande tkn pac logs pour afficher les journaux du dernier pipeline exécuté pour un dépôt.
  • Cette mise à jour prend en charge la correspondance d'événement avancée sur le chemin de fichier pour les requêtes push et pull vers GitHub et GitLab. Par exemple, vous pouvez utiliser le langage d'expression commun (CEL) pour lancer un pipeline uniquement si le chemin d'accès d'un fichier markdown dans le répertoire docs a changé.

      ...
      annotations:
         pipelinesascode.tekton.dev/on-cel-expression: |
          event == "pull_request" && "docs/*.md".pathChanged()
    Copy to Clipboard Toggle word wrap
  • Avec cette mise à jour, vous pouvez référencer un pipeline distant dans l'objet pipelineRef: à l'aide d'annotations.
  • Avec cette mise à jour, vous pouvez configurer automatiquement de nouveaux dépôts GitHub avec Pipelines as Code, qui met en place un espace de noms et crée un CRD Repository pour votre dépôt GitHub.
  • Avec cette mise à jour, Pipelines as Code génère des métriques pour PipelineRuns avec des informations sur les fournisseurs.
  • Cette mise à jour apporte les améliorations suivantes au plugin tkn-pac:

    • Détecte correctement les pipelines en cours d'exécution
    • Correction de l'affichage de la durée lorsqu'il n'y a pas d'heure d'achèvement de l'échec
    • Affiche un extrait d'erreur et met en évidence le modèle d'expression régulière de l'erreur dans la commande tkn-pac describe
    • Ajoute le commutateur use-real-time aux commandes tkn-pac ls et tkn-pac describe
    • Importe la documentation des journaux de tkn-pac
    • Affiche pipelineruntimeout comme un échec dans les commandes tkn-pac ls et tkn-pac describe.
    • Afficher un échec spécifique de l'exécution d'un pipeline avec l'option --target-pipelinerun.
  • Avec cette mise à jour, vous pouvez voir les erreurs de votre pipeline sous la forme d'un commentaire du système de contrôle de version (VCS) ou d'un petit extrait dans les contrôles GitHub.
  • Avec cette mise à jour, Pipelines as Code peut optionnellement détecter les erreurs dans les tâches si elles sont d'un format simple et ajouter ces tâches en tant qu'annotations dans GitHub. Cette mise à jour fait partie d'un aperçu pour les développeurs.
  • Cette mise à jour ajoute les nouvelles commandes suivantes :

    • tkn-pac webhook add: Ajoute un webhook aux paramètres du référentiel du projet et met à jour la clé webhook.secret dans l'objet k8s Secret existant sans mettre à jour le référentiel.
    • tkn-pac webhook update-token: Met à jour le jeton de fournisseur pour un objet k8s Secret existant sans mettre à jour le référentiel.
  • Cette mise à jour améliore les fonctionnalités de la commande tkn-pac create repo, qui crée et configure des webhooks pour GitHub, GitLab et BitbucketCloud, ainsi que la création de dépôts.
  • Avec cette mise à jour, la commande tkn-pac describe affiche les cinquante derniers événements dans un ordre trié.
  • Cette mise à jour ajoute l'option --last à la commande tkn-pac logs.
  • Avec cette mise à jour, la commande tkn-pac resolve demande un jeton lors de la détection d'un git_auth_secret dans le modèle de fichier.
  • Avec cette mise à jour, Pipelines as Code cache les secrets dans les extraits de journaux pour éviter d'exposer des secrets dans l'interface GitHub.
  • Avec cette mise à jour, les secrets générés automatiquement pour git_auth_secret sont une référence propriétaire avec PipelineRun. Les secrets sont nettoyés en même temps que PipelineRun, et non après l'exécution du pipeline.
  • Cette mise à jour ajoute la possibilité d'annuler l'exécution d'un pipeline à l'aide du commentaire /cancel.
  • Avant cette mise à jour, le champ d'application du jeton GitHub apps n'était pas défini et les jetons étaient utilisés pour chaque installation de référentiel. Avec cette mise à jour, vous pouvez définir la portée du jeton GitHub apps sur le référentiel cible en utilisant les paramètres suivants :

    • secret-github-app-token-scoped: Le jeton d'application est limité au référentiel cible, et non à tous les référentiels auxquels l'installation de l'application a accès.
    • secret-github-app-scope-extra-repos: Personnalise le champ d'application du jeton d'application avec un propriétaire ou un dépôt supplémentaire.
  • Avec cette mise à jour, vous pouvez utiliser Pipelines as Code avec vos propres dépôts Git hébergés sur GitLab.
  • Avec cette mise à jour, vous pouvez accéder aux détails de l'exécution du pipeline sous la forme d'événements kubernetes dans votre espace de noms. Ces détails vous aident à résoudre les erreurs de pipeline sans avoir besoin d'accéder aux espaces de noms des administrateurs.
  • Cette mise à jour supporte l'authentification des URLs dans les Pipelines en tant que résolveur de code avec le fournisseur Git.
  • Avec cette mise à jour, vous pouvez définir le nom du catalogue du concentrateur en utilisant un paramètre dans la carte de configuration pipelines-as-code.
  • Cette mise à jour permet de définir les limites maximales et par défaut du paramètre max-keep-run.
  • Cette mise à jour ajoute des documents sur la façon d'injecter des certificats SSL (Secure Sockets Layer) personnalisés dans Pipelines as Code pour vous permettre de vous connecter à l'instance du fournisseur avec des certificats personnalisés.
  • Avec cette mise à jour, la définition de la ressource PipelineRun comporte l'URL du journal en tant qu'annotation. Par exemple, la commande tkn-pac describe affiche le lien du journal lors de la description d'une ressource PipelineRun.
  • Avec cette mise à jour, les journaux de tkn-pac affichent le nom du dépôt, au lieu du nom de PipelineRun.
3.1.4.2. Changements en cours
  • Avec cette mise à jour, le type de définition de ressource personnalisée (CRD) Conditions a été supprimé. Il est possible d'utiliser le type WhenExpressions à la place.
  • Avec cette mise à jour, la prise en charge des ressources de pipeline de l'API tekton.dev/v1alpha1, telles que Pipeline, PipelineRun, Task, Clustertask et TaskRun, a été supprimée.
  • Avec cette mise à jour, la commande tkn-pac setup a été supprimée. A la place, utilisez la commande tkn-pac webhook add pour ajouter un webhook à un référentiel Git existant. Et utilisez la commande tkn-pac webhook update-token pour mettre à jour le jeton d'accès du fournisseur personnel pour un objet Secret existant dans le référentiel Git.
  • Avec cette mise à jour, un espace de noms qui exécute un pipeline avec les paramètres par défaut n'applique pas le label pod-security.kubernetes.io/enforce:privileged à une charge de travail.
3.1.4.3. Fonctionnalités obsolètes et supprimées
  • Dans la version 1.9.0 de Red Hat OpenShift Pipelines, ClusterTasks est déprécié et il est prévu de le supprimer dans une prochaine version. Comme alternative, vous pouvez utiliser Cluster Resolver.
  • Dans la version 1.9.0 de Red Hat OpenShift Pipelines, l'utilisation des champs triggers et namespaceSelector dans une seule spécification EventListener est dépréciée et il est prévu de la supprimer dans une prochaine version. Vous pouvez utiliser ces champs dans différentes spécifications EventListener avec succès.
  • Dans la version 1.9.0 de Red Hat OpenShift Pipelines, la commande tkn pipelinerun describe n'affiche pas les délais d'attente pour la ressource PipelineRun.
  • Dans la version 1.9.0 de Red Hat OpenShift Pipelines, la ressource personnalisée (CR) PipelineResource` est obsolète. La CR PipelineResource était une fonctionnalité Tech Preview et faisait partie de l'API tekton.dev/v1alpha1.
  • Dans la version 1.9.0 de Red Hat OpenShift Pipelines, les paramètres d'image personnalisée des tâches de cluster sont obsolètes. Comme alternative, vous pouvez copier une tâche de cluster et utiliser votre image personnalisée dans celle-ci.
3.1.4.4. Problèmes connus
  • Les cartes de configuration chains-secret et chains-config sont supprimées après la désinstallation de Red Hat OpenShift Pipelines Operator. Comme elles contiennent des données d'utilisateur, elles doivent être conservées et non supprimées.
  • Lorsque vous exécutez le jeu de commandes tkn pac sous Windows, vous pouvez recevoir le message d'erreur suivant : Command finished with error: not supported by Windows.

    Solution de contournement : Définissez la variable d'environnement NO_COLOR sur true.

  • L'exécution de la commande tkn pac resolve -f <filename> | oc create -f peut ne pas donner les résultats escomptés si la commande tkn pac resolve utilise une valeur de paramètre modélisée pour fonctionner.

    Solution : Pour atténuer ce problème, enregistrez la sortie de tkn pac resolve dans un fichier temporaire en exécutant la commande tkn pac resolve -f <filename> -o tempfile.yaml, puis la commande oc create -f tempfile.yaml. Par exemple, tkn pac resolve -f <filename> -o /tmp/pull-request-resolved.yaml && oc create -f /tmp/pull-request-resolved.yaml.

3.1.4.5. Problèmes corrigés
  • Avant cette mise à jour, après avoir remplacé un tableau vide, le tableau original renvoyait une chaîne vide, ce qui rendait les paramètres qu'il contenait invalides. Avec cette mise à jour, ce problème est résolu et le tableau original retourne une chaîne vide.
  • Avant cette mise à jour, si des secrets en double étaient présents dans un compte de service pour une exécution de pipeline, cela entraînait un échec dans la création du module de tâches. Avec cette mise à jour, ce problème est résolu et le module de tâches est créé avec succès même si des secrets en double sont présents dans un compte de service.
  • Avant cette mise à jour, en consultant le champ spec.StatusMessage du TaskRun, les utilisateurs ne pouvaient pas savoir si le TaskRun avait été annulé par l'utilisateur ou par un PipelineRun qui en faisait partie. Avec cette mise à jour, ce problème est résolu et les utilisateurs peuvent distinguer le statut de TaskRun en regardant le champ spec.StatusMessage de la TaskRun.
  • Avant cette mise à jour, la validation du webhook était supprimée lors de la suppression d'anciennes versions d'objets invalides. Avec cette mise à jour, ce problème est résolu.
  • Avant cette mise à jour, si vous définissiez le paramètre timeouts.pipeline sur 0, vous ne pouviez pas définir les paramètres timeouts.tasks ou timeouts.finally. Cette mise à jour résout le problème. Désormais, lorsque vous définissez la valeur du paramètre timeouts.pipeline, vous pouvez définir la valeur du paramètre "timeouts.tasks" ou du paramètre timeouts.finally. Par exemple :

    yaml
    kind: PipelineRun
    spec:
      timeouts:
        pipeline: "0"  # No timeout
        tasks: "0h3m0s"
    Copy to Clipboard Toggle word wrap
  • Avant cette mise à jour, une condition de course pouvait se produire si un autre outil mettait à jour des étiquettes ou des annotations sur un PipelineRun ou un TaskRun. Avec cette mise à jour, ce problème est résolu et vous pouvez fusionner les étiquettes ou les annotations.
  • Avant cette mise à jour, les clés de journal n'avaient pas les mêmes clés que dans les contrôleurs de pipeline. Avec cette mise à jour, ce problème a été résolu et les clés des journaux ont été mises à jour pour correspondre au flux de journaux des contrôleurs de pipeline. Les clés des journaux sont passées de "ts" à "timestamp", de "level" à "severity" et de "message" à "msg".
  • Avant cette mise à jour, si un PipelineRun était supprimé avec un statut inconnu, un message d'erreur n'était pas généré. Avec cette mise à jour, ce problème est résolu et un message d'erreur est généré.
  • Avant cette mise à jour, il était nécessaire d'utiliser le fichier kubeconfig pour accéder aux commandes de l'offre groupée telles que list et push. Avec cette mise à jour, ce problème a été résolu et le fichier kubeconfig n'est plus nécessaire pour accéder aux commandes de l'offre groupée.
  • Avant cette mise à jour, si le PipelineRun parent était en cours d'exécution pendant la suppression des TaskRuns, les TaskRuns étaient supprimées. Avec cette mise à jour, ce problème est résolu et les TaskRuns ne sont pas supprimées si le PipelineRun parent est en cours d'exécution.
  • Avant cette mise à jour, si l'utilisateur tentait de construire une grappe avec plus d'objets que le contrôleur de pipeline ne le permettait, l'interface de programmation Tekton n'affichait pas de message d'erreur. Avec cette mise à jour, ce problème est résolu et la CLI Tekton affiche un message d'erreur si l'utilisateur tente de construire une grappe avec plus d'objets que la limite autorisée dans le contrôleur de pipeline.
  • Avant cette mise à jour, si des espaces de noms étaient supprimés du cluster, l'opérateur ne supprimait pas les espaces de noms des sujets ClusterInterceptor ClusterRoleBinding. Avec cette mise à jour, ce problème a été résolu et l'opérateur supprime les espaces de noms des sujets ClusterInterceptor ClusterRoleBinding.
  • Avant cette mise à jour, l'installation par défaut de Red Hat OpenShift Pipelines Operator avait pour résultat que la ressource de liaison de rôle pipelines-scc-rolebinding security context constraint (SCC) restait dans le cluster. Avec cette mise à jour, l'installation par défaut de Red Hat OpenShift Pipelines Operator entraîne la suppression de la ressource de liaison de rôle pipelines-scc-rolebinding security context constraint (SCC) du cluster.
  • Avant cette mise à jour, Pipelines as Code ne recevait pas les valeurs mises à jour de l'objet Pipelines as Code ConfigMap. Avec cette mise à jour, ce problème est résolu et l'objet Pipelines as Code ConfigMap recherche toute nouvelle modification.
  • Avant cette mise à jour, le contrôleur de Pipelines as Code n'attendait pas que l'étiquette tekton.dev/pipeline soit mise à jour et ajoutait l'étiquette checkrun id, ce qui provoquait des conditions de concurrence. Avec cette mise à jour, le contrôleur de Pipelines as Code attend que l'étiquette tekton.dev/pipeline soit mise à jour et ajoute ensuite l'étiquette checkrun id, ce qui permet d'éviter les problèmes de concurrence.
  • Avant cette mise à jour, la commande tkn-pac create repo ne remplaçait pas une commande PipelineRun si elle existait déjà dans le dépôt git. Avec cette mise à jour, la commande tkn-pac create est corrigée pour remplacer une commande PipelineRun si elle existe dans le dépôt git, ce qui résout le problème avec succès.
  • Avant cette mise à jour, la commande tkn pac describe n'affichait pas les raisons de chaque message. Avec cette mise à jour, ce problème est corrigé et la commande tkn pac describe affiche les motifs pour chaque message.
  • Avant cette mise à jour, une demande d'extraction échouait si l'utilisateur dans l'annotation fournissait des valeurs en utilisant une forme de regex, par exemple, refs/head/rel-*. La demande d'extraction échouait parce qu'il manquait refs/heads dans sa branche de base. Avec cette mise à jour, le préfixe est ajouté et on vérifie qu'il correspond. Cela résout le problème et la demande d'extraction est acceptée.

Avec cette mise à jour, Red Hat OpenShift Pipelines General Availability (GA) 1.9.1 est disponible sur OpenShift Container Platform 4.11 et les versions ultérieures.

3.1.4.7. Problèmes corrigés
  • Avant cette mise à jour, la commande tkn pac repo list ne fonctionnait pas sous Microsoft Windows. Cette mise à jour corrige le problème et vous pouvez désormais exécuter la commande tkn pac repo list sous Microsoft Windows.
  • Avant cette mise à jour, l'observateur de Pipelines as Code ne recevait pas tous les événements de changement de configuration. Avec cette mise à jour, l'observateur de Pipelines as Code a été mis à jour, et maintenant l'observateur de Pipelines as Code ne manque pas les événements de changement de configuration.
  • Avant cette mise à jour, les pods créés par Pipelines as Code, tels que TaskRuns ou PipelineRuns ne pouvaient pas accéder aux certificats personnalisés exposés par l'utilisateur dans le cluster. Cette mise à jour corrige le problème et vous pouvez maintenant accéder aux certificats personnalisés à partir des pods TaskRuns ou PipelineRuns dans le cluster.
  • Avant cette mise à jour, sur un cluster activé avec FIPS, l'intercepteur tekton-triggers-core-interceptors core utilisé dans la ressource Trigger ne fonctionnait pas après que l'opérateur Pipelines ait été mis à niveau vers la version 1.9. Cette mise à jour résout le problème. Désormais, OpenShift utilise MInTLS 1.2 pour tous ses composants. Par conséquent, l'intercepteur central tekton-triggers-core-interceptors est mis à jour vers la version 1.2 de TLS et sa fonctionnalité fonctionne correctement.
  • Avant cette mise à jour, lors de l'utilisation d'un pipeline avec un registre d'images interne à OpenShift, l'URL de l'image devait être codée en dur dans la définition du pipeline. Par exemple, l'URL de l'image devait être codée en dur dans la définition de l'exécution du pipeline :

    ...
      - name: IMAGE_NAME
        value: 'image-registry.openshift-image-registry.svc:5000/<test_namespace>/<test_pipelinerun>'
    ...
    Copy to Clipboard Toggle word wrap

    Lors de l'utilisation d'une exécution de pipeline dans le contexte de Pipelines as Code, ces valeurs codées en dur empêchaient les définitions d'exécution de pipeline d'être utilisées dans différents clusters et espaces de noms.

    Avec cette mise à jour, vous pouvez utiliser les variables de modèle dynamiques au lieu de coder en dur les valeurs des espaces de noms et des noms d'exécutions de pipeline pour généraliser les définitions d'exécutions de pipeline. Par exemple :

    ...
      - name: IMAGE_NAME
        value: 'image-registry.openshift-image-registry.svc:5000/{{ target_namespace }}/$(context.pipelineRun.name)'
    ...
    Copy to Clipboard Toggle word wrap
  • Avant cette mise à jour, Pipelines as Code utilisait le même jeton GitHub pour récupérer une tâche distante disponible dans le même hôte uniquement sur la branche GitHub par défaut. Cette mise à jour résout le problème. Désormais, Pipelines as Code utilise le même jeton GitHub pour récupérer une tâche distante à partir de n'importe quelle branche GitHub.
3.1.4.8. Problèmes connus
  • La valeur de CATALOG_REFRESH_INTERVAL, un champ de l'objet Hub API ConfigMap utilisé dans le Tekton Hub CR, n'est pas mise à jour avec une valeur personnalisée fournie par l'utilisateur.

    Solution de contournement : Aucune. Vous pouvez suivre le problème SRVKP-2854.

3.1.4.9. Changements en cours
  • Avec cette mise à jour, un problème de mauvaise configuration de l'OLM a été introduit, ce qui empêche la mise à niveau de la plateforme OpenShift Container. Ce problème sera corrigé dans une prochaine version.

Avec cette mise à jour, Red Hat OpenShift Pipelines General Availability (GA) 1.9.2 est disponible sur OpenShift Container Platform 4.11 et les versions ultérieures.

3.1.4.11. Problèmes corrigés
  • Avant cette mise à jour, un problème de mauvaise configuration OLM avait été introduit dans la version précédente, ce qui empêchait la mise à niveau d'OpenShift Container Platform. Avec cette mise à jour, ce problème de mauvaise configuration a été corrigé.

Avec cette mise à jour, Red Hat OpenShift Pipelines General Availability (GA) 1.8 est disponible sur OpenShift Container Platform 4.10, 4.11 et 4.12.

3.1.5.1. Nouvelles fonctionnalités

En plus des corrections et des améliorations de stabilité, les sections suivantes mettent en évidence les nouveautés de Red Hat OpenShift Pipelines 1.8.

3.1.5.1.1. Pipelines
  • Avec cette mise à jour, vous pouvez exécuter Red Hat OpenShift Pipelines GA 1.8 et plus sur un cluster OpenShift Container Platform qui fonctionne sur du matériel ARM. Cela inclut la prise en charge des ressources ClusterTask et de l'outil CLI tkn.
Important

L'exécution de Red Hat OpenShift Pipelines sur du matériel ARM est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas de les utiliser en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.

Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.

  • Cette mise à jour met en œuvre les dérogations Step et Sidecar pour les ressources TaskRun.
  • Cette mise à jour ajoute les statuts minimaux TaskRun et Run dans les statuts PipelineRun.

    Pour activer cette fonctionnalité, dans la définition de la ressource personnalisée TektonConfig, dans la section pipeline, vous devez définir le champ enable-api-fields sur alpha.

  • Avec cette mise à jour, la fonctionnalité d'arrêt gracieux des exécutions de pipeline passe d'une fonctionnalité alpha à une fonctionnalité stable. Par conséquent, le statut PipelineRunCancelled, précédemment déprécié, reste déprécié et devrait être supprimé dans une prochaine version.

    Cette fonctionnalité étant disponible par défaut, il n'est plus nécessaire de donner au champ pipeline.enable-api-fields la valeur alpha dans la définition de la ressource personnalisée TektonConfig.

  • Avec cette mise à jour, vous pouvez spécifier l'espace de travail pour une tâche de pipeline en utilisant le nom de l'espace de travail. Cette modification facilite la spécification d'un espace de travail partagé pour une paire de ressources Pipeline et PipelineTask. Vous pouvez également continuer à mapper les espaces de travail de manière explicite.

    Pour activer cette fonctionnalité, dans la définition de la ressource personnalisée TektonConfig, dans la section pipeline, vous devez définir le champ enable-api-fields sur alpha.

  • Avec cette mise à jour, les paramètres des spécifications intégrées sont propagés sans mutations.
  • Avec cette mise à jour, vous pouvez spécifier les métadonnées requises d'une ressource Task référencée par une ressource PipelineRun en utilisant des annotations et des étiquettes. Ainsi, les métadonnées de Task qui dépendent du contexte d'exécution sont disponibles pendant l'exécution du pipeline.
  • Cette mise à jour ajoute la prise en charge des types d'objets ou de dictionnaires dans les valeurs params et results. Cette modification affecte la compatibilité ascendante et rompt parfois la compatibilité descendante, comme l'utilisation d'un client antérieur avec une version plus récente de Red Hat OpenShift Pipelines. Cette mise à jour modifie la structure de ArrayOrStruct, ce qui affecte les projets qui utilisent l'API du langage Go en tant que bibliothèque.
  • Cette mise à jour ajoute une valeur SkippingReason au champ SkippedTasks des champs de statut PipelineRun afin que les utilisateurs sachent pourquoi une tâche de pipeline donnée a été ignorée.
  • Cette mise à jour prend en charge une fonctionnalité alpha qui permet d'utiliser un type array pour émettre des résultats à partir d'un objet Task. Le type de résultat passe de string à ArrayOrString. Par exemple, une tâche peut spécifier un type pour produire un résultat sous forme de tableau :

    kind: Task
    apiVersion: tekton.dev/v1beta1
    metadata:
      name: write-array
      annotations:
        description: |
          A simple task that writes array
    spec:
      results:
        - name: array-results
          type: array
          description: The array results
    ...
    Copy to Clipboard Toggle word wrap

    En outre, vous pouvez exécuter un script de tâche pour remplir les résultats avec un tableau :

    $ echo -n "[\"hello\",\"world\"]" | tee $(results.array-results.path)
    Copy to Clipboard Toggle word wrap

    Pour activer cette fonctionnalité, dans la définition de la ressource personnalisée TektonConfig, dans la section pipeline, vous devez définir le champ enable-api-fields sur alpha.

    Cette fonctionnalité est en cours de réalisation et fait partie du TEP-0076.

3.1.5.1.2. Déclencheurs
  • Cette mise à jour fait passer le champ TriggerGroups de la spécification EventListener d'une fonctionnalité alpha à une fonctionnalité stable. Ce champ permet de spécifier un ensemble d'intercepteurs avant de sélectionner et d'exécuter un groupe de déclencheurs.

    Cette fonctionnalité étant disponible par défaut, il n'est plus nécessaire de donner au champ pipeline.enable-api-fields la valeur alpha dans la définition de la ressource personnalisée TektonConfig.

  • Avec cette mise à jour, la ressource Trigger prend en charge les connexions sécurisées de bout en bout en exécutant le serveur ClusterInterceptor à l'aide de HTTPS.
3.1.5.1.3. CLI
  • Avec cette mise à jour, vous pouvez utiliser la commande tkn taskrun export pour exporter une exécution de tâche en direct d'un cluster vers un fichier YAML, que vous pouvez utiliser pour importer l'exécution de tâche vers un autre cluster.
  • Avec cette mise à jour, vous pouvez ajouter l'option -o name à la commande tkn pipeline start afin d'afficher le nom de l'exécution du pipeline dès son démarrage.
  • Cette mise à jour ajoute une liste des plugins disponibles à la sortie de la commande tkn --help.
  • Avec cette mise à jour, lors de la suppression d'un pipeline ou d'une tâche, vous pouvez utiliser à la fois les drapeaux --keep et --keep-since.
  • Avec cette mise à jour, vous pouvez utiliser Cancelled comme valeur du champ spec.status plutôt que la valeur obsolète PipelineRunCancelled.
3.1.5.1.4. Opérateur
  • Avec cette mise à jour, en tant qu'administrateur, vous pouvez configurer votre instance locale de Tekton Hub pour qu'elle utilise une base de données personnalisée plutôt que la base de données par défaut.
  • Avec cette mise à jour, en tant qu'administrateur de cluster, si vous activez votre instance locale de Tekton Hub, celle-ci rafraîchit périodiquement la base de données afin que les changements dans le catalogue apparaissent dans la console web de Tekton Hub. Vous pouvez ajuster la période entre les rafraîchissements.

    Auparavant, pour ajouter les tâches et les pipelines du catalogue à la base de données, vous deviez effectuer cette tâche manuellement ou configurer un travail cron pour le faire à votre place.

  • Avec cette mise à jour, vous pouvez installer et faire fonctionner une instance de Tekton Hub avec une configuration minimale. De cette façon, vous pouvez commencer à travailler avec vos équipes pour décider des personnalisations supplémentaires qu'elles pourraient souhaiter.
  • Cette mise à jour ajoute GIT_SSL_CAINFO à la tâche git-clone afin que vous puissiez cloner des dépôts sécurisés.
3.1.5.1.5. Chaînes Tekton
Important

Tekton Chains est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas de les utiliser en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.

Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.

  • Avec cette mise à jour, vous pouvez vous connecter à un coffre-fort en utilisant OIDC plutôt qu'un jeton statique. Cette modification signifie que Spire peut générer l'identifiant OIDC afin que seules les charges de travail de confiance soient autorisées à se connecter à l'espace de stockage. En outre, vous pouvez transmettre l'adresse de l'espace de stockage en tant que valeur de configuration plutôt que de l'injecter en tant que variable d'environnement.
  • La carte de configuration chains-config pour Tekton Chains dans l'espace de noms openshift-pipelines est automatiquement réinitialisée par défaut après la mise à jour de Red Hat OpenShift Pipelines Operator car la mise à jour directe de la carte de configuration n'est pas prise en charge lors de l'installation à l'aide de Red Hat OpenShift Pipelines Operator. Cependant, avec cette mise à jour, vous pouvez configurer les chaînes Tekton en utilisant la ressource personnalisée TektonChain. Cette fonctionnalité permet à votre configuration de persister après la mise à jour, contrairement à la carte de configuration chains-config, qui est écrasée lors des mises à jour.
3.1.5.1.6. Hub Tekton
Important

Tekton Hub est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas de les utiliser en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.

Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.

  • Avec cette mise à jour, si vous installez une nouvelle instance de Tekton Hub en utilisant l'Opérateur, le login Tekton Hub est désactivé par défaut. Pour activer les fonctions de connexion et de notation, vous devez créer le secret API Hub lors de l'installation de Tekton Hub.

    Note

    Étant donné que la connexion Tekton Hub était activée par défaut dans Red Hat OpenShift Pipelines 1.7, si vous mettez à niveau l'opérateur, la connexion est activée par défaut dans Red Hat OpenShift Pipelines 1.8. Pour désactiver cette connexion, voir Désactivation de la connexion Tekton Hub après la mise à niveau d'OpenShift Pipelines 1.7.x -→ 1.8.x

  • Avec cette mise à jour, en tant qu'administrateur, vous pouvez configurer votre instance locale de Tekton Hub pour utiliser une base de données PostgreSQL 13 personnalisée plutôt que la base de données par défaut. Pour ce faire, créez une ressource Secret nommée tekton-hub-db. Par exemple :

    apiVersion: v1
    kind: Secret
    metadata:
      name: tekton-hub-db
      labels:
        app: tekton-hub-db
    type: Opaque
    stringData:
      POSTGRES_HOST: <hostname>
      POSTGRES_DB: <database_name>
      POSTGRES_USER: <user_name>
      POSTGRES_PASSWORD: <user_password>
      POSTGRES_PORT: <listening_port_number>
    Copy to Clipboard Toggle word wrap
  • Avec cette mise à jour, vous n'avez plus besoin de vous connecter à la console web Tekton Hub pour ajouter des ressources du catalogue à la base de données. Désormais, ces ressources sont automatiquement ajoutées lorsque l'API Tekton Hub est lancée pour la première fois.
  • Cette mise à jour actualise automatiquement le catalogue toutes les 30 minutes en appelant le job API d'actualisation du catalogue. Cet intervalle est configurable par l'utilisateur.
3.1.5.1.7. Les pipelines en tant que code
Important

Pipelines as Code (PAC) est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas de les utiliser en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.

Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.

  • Avec cette mise à jour, en tant que développeur, vous recevez une notification de l'outil CLI tkn-pac si vous essayez d'ajouter un référentiel dupliqué à une exécution de Pipelines as Code. Lorsque vous entrez tkn pac create repository, chaque référentiel doit avoir une URL unique. Cette notification permet également d'éviter les exploits de détournement.
  • Avec cette mise à jour, en tant que développeur, vous pouvez utiliser la nouvelle commande tkn-pac setup cli pour ajouter un dépôt Git à Pipelines as Code en utilisant le mécanisme de webhook. Ainsi, vous pouvez utiliser Pipelines as Code même lorsque l'utilisation de GitHub Apps n'est pas possible. Cette fonctionnalité inclut la prise en charge des dépôts sur GitHub, GitLab et BitBucket.
  • Avec cette mise à jour, Pipelines as Code prend en charge l'intégration de GitLab avec des fonctionnalités telles que les suivantes :

    • ACL (Access Control List) sur le projet ou le groupe
    • /ok-to-test le soutien des utilisateurs autorisés
    • /retest le soutien.
  • Avec cette mise à jour, vous pouvez effectuer un filtrage avancé des pipelines avec le langage d'expression commun (CEL). Avec CEL, vous pouvez faire correspondre des exécutions de pipeline avec différents événements du fournisseur Git en utilisant des annotations dans la ressource PipelineRun. Par exemple :

      ...
      annotations:
         pipelinesascode.tekton.dev/on-cel-expression: |
          event == "pull_request" && target_branch == "main" && source_branch == "wip"
    Copy to Clipboard Toggle word wrap
  • Auparavant, en tant que développeur, vous ne pouviez avoir qu'une seule exécution de pipeline dans votre répertoire .tekton pour chaque événement Git, tel qu'une pull request. Avec cette mise à jour, vous pouvez avoir plusieurs exécutions de pipeline dans votre répertoire .tekton. La console web affiche l'état et les rapports des exécutions. Les exécutions de pipeline fonctionnent en parallèle et renvoient des rapports à l'interface du fournisseur Git.
  • Avec cette mise à jour, vous pouvez tester ou retester un pipeline en commentant /test ou /retest sur une pull request. Vous pouvez également spécifier le pipeline par son nom. Par exemple, vous pouvez saisir /test <pipelinerun_name> ou /retest <pipelinerun-name>.
  • Avec cette mise à jour, vous pouvez supprimer une ressource personnalisée du référentiel et ses secrets associés en utilisant la nouvelle commande tkn-pac delete repository.
3.1.5.2. Changements en cours
  • Cette mise à jour modifie le niveau de métrique par défaut des ressources TaskRun et PipelineRun pour les valeurs suivantes :

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: config-observability
      namespace: tekton-pipelines
      labels:
        app.kubernetes.io/instance: default
        app.kubernetes.io/part-of: tekton-pipelines
    data:
      _example: |
      ...
        metrics.taskrun.level: "task"
        metrics.taskrun.duration-type: "histogram"
        metrics.pipelinerun.level: "pipeline"
        metrics.pipelinerun.duration-type: "histogram"
    Copy to Clipboard Toggle word wrap
  • Avec cette mise à jour, si une annotation ou un label est présent à la fois dans les ressources Pipeline et PipelineRun, la valeur du type Run est prioritaire. Il en va de même si une annotation ou un label est présent dans les ressources Task et TaskRun.
  • Dans Red Hat OpenShift Pipelines 1.8, le champ PipelineRun.Spec.ServiceAccountNames, précédemment déprécié, a été supprimé. Utilisez le champ PipelineRun.Spec.TaskRunSpecs à la place.
  • Dans Red Hat OpenShift Pipelines 1.8, le champ TaskRun.Status.ResourceResults.ResourceRef, précédemment déprécié, a été supprimé. Utilisez le champ TaskRun.Status.ResourceResults.ResourceName à la place.
  • Dans Red Hat OpenShift Pipelines 1.8, le type de ressource Conditions, précédemment déprécié, a été supprimé. Supprimez la ressource Conditions des définitions de ressources Pipeline qui l'incluent. Utilisez les expressions when dans les définitions PipelineRun à la place.
  • Pour les chaînes Tekton, le format tekton-provenance a été supprimé dans cette version. Utilisez plutôt le format in-toto en définissant "artifacts.taskrun.format": "in-toto" dans la ressource personnalisée TektonChain.
  • Red Hat OpenShift Pipelines 1.7.x était livré avec Pipelines as Code 0.5.x. La mise à jour actuelle est livrée avec Pipelines as Code 0.10.x. Ce changement crée une nouvelle route dans l'espace de noms openshift-pipelines pour le nouveau contrôleur. Vous devez mettre à jour cette route dans les applications GitHub ou les webhooks qui utilisent Pipelines as Code. Pour récupérer la route, utilisez la commande suivante :

    $ oc get route -n openshift-pipelines pipelines-as-code-controller \
      --template='https://{{ .spec.host }}'
    Copy to Clipboard Toggle word wrap
  • Avec cette mise à jour, Pipelines as Code renomme les clés secrètes par défaut pour la définition de ressource personnalisée (CRD) Repository. Dans votre CRD, remplacez token par provider.token, et remplacez secret par webhook.secret.
  • Avec cette mise à jour, Pipelines as Code remplace une variable de modèle spéciale par une variable qui prend en charge des exécutions de pipeline multiples pour des dépôts privés. Dans vos exécutions du pipeline, remplacez secret: pac-git-basic-auth-{{repo_owner}}-{{repo_name}} par secret: {{ git_auth_secret }}.
  • Avec cette mise à jour, Pipelines as Code met à jour les commandes suivantes dans l'outil CLI tkn-pac:

    • Remplacer tkn pac repository create par tkn pac create repository.
    • Remplacer tkn pac repository delete par tkn pac delete repository.
    • Remplacer tkn pac repository list par tkn pac list.
3.1.5.3. Fonctionnalités obsolètes et supprimées
  • À partir d'OpenShift Container Platform 4.11, les canaux preview et stable pour l'installation et la mise à jour de Red Hat OpenShift Pipelines Operator sont supprimés. Pour installer et mettre à niveau l'opérateur, utilisez le canal pipelines-<version> approprié ou le canal latest pour la version stable la plus récente. Par exemple, pour installer la version 1.8.x d'OpenShift Pipelines Operator, utilisez le canal pipelines-1.8.

    Note

    Dans OpenShift Container Platform 4.10 et les versions antérieures, vous pouvez utiliser les canaux preview et stable pour installer et mettre à niveau l'opérateur.

  • La prise en charge de la version de l'API tekton.dev/v1alpha1, qui était obsolète dans Red Hat OpenShift Pipelines GA 1.6, devrait être supprimée dans la prochaine version Red Hat OpenShift Pipelines GA 1.9.

    Ce changement affecte le composant pipeline, qui comprend les ressources TaskRun, PipelineRun, Task, Pipeline, et les ressources similaires tekton.dev/v1alpha1. Comme alternative, mettez à jour les ressources existantes pour utiliser apiVersion: tekton.dev/v1beta1 comme décrit dans Migrating From Tekton v1alpha1 to Tekton v1beta1.

    Les corrections de bogues et l'assistance pour la version de l'API tekton.dev/v1alpha1 ne sont fournies que jusqu'à la fin du cycle de vie actuel de l'AG 1.8.

    Important

    Pour Tekton Operator, la version de l'API operator.tekton.dev/v1alpha1 est not deprecated. Il n'est pas nécessaire de modifier cette valeur.

  • Dans Red Hat OpenShift Pipelines 1.8, la ressource personnalisée (CR) PipelineResource est disponible mais n'est plus prise en charge. La CR PipelineResource était une fonctionnalité Tech Preview et faisait partie de l'API tekton.dev/v1alpha1, qui a été dépréciée et qu'il est prévu de supprimer dans la prochaine version Red Hat OpenShift Pipelines GA 1.9.
  • Dans Red Hat OpenShift Pipelines 1.8, la ressource personnalisée (CR) Condition est supprimée. La CR Condition faisait partie de l'API tekton.dev/v1alpha1, qui a été dépréciée et devrait être supprimée dans la prochaine version de Red Hat OpenShift Pipelines GA 1.9.
  • Dans Red Hat OpenShift Pipelines 1.8, l'image gcr.io pour gsutil a été supprimée. Cette suppression pourrait interrompre les clusters avec les ressources Pipeline qui dépendent de cette image. Les corrections de bugs et l'assistance sont fournies uniquement jusqu'à la fin du cycle de vie de Red Hat OpenShift Pipelines 1.7.
  • Dans Red Hat OpenShift Pipelines 1.8, les champs PipelineRun.Status.TaskRuns et PipelineRun.Status.Runs sont dépréciés et devraient être supprimés dans une prochaine version. Voir TEP-0100 : Embedded TaskRuns and Runs Status in PipelineRuns.
  • Dans Red Hat OpenShift Pipelines 1.8, l'état pipelineRunCancelled est déprécié et il est prévu de le supprimer dans une prochaine version. La terminaison gracieuse des objets PipelineRun est maintenant promue d'une fonctionnalité alpha à une fonctionnalité stable (voir TEP-0058 : Terminaison gracieuse de l'exécution du pipeline). (Voir TEP-0058 : Graceful Pipeline Run Termination.) Comme alternative, vous pouvez utiliser l'état Cancelled, qui remplace l'état pipelineRunCancelled.

    Vous n'avez pas besoin de modifier vos ressources Pipeline et Task. Si vous avez des outils qui annulent les exécutions de pipeline, vous devez les mettre à jour dans la prochaine version. Ce changement affecte également les outils tels que le CLI, les extensions de l'IDE, etc., afin qu'ils prennent en charge les nouveaux statuts PipelineRun.

    Cette fonctionnalité étant disponible par défaut, il n'est plus nécessaire de donner au champ pipeline.enable-api-fields la valeur alpha dans la définition de la ressource personnalisée TektonConfig.

  • Dans Red Hat OpenShift Pipelines 1.8, le champ timeout dans PipelineRun a été déprécié. À la place, utilisez le champ PipelineRun.Timeouts, qui est maintenant passé d'une fonctionnalité alpha à une fonctionnalité stable.

    Cette fonctionnalité étant disponible par défaut, il n'est plus nécessaire de donner au champ pipeline.enable-api-fields la valeur alpha dans la définition de la ressource personnalisée TektonConfig.

  • Dans Red Hat OpenShift Pipelines 1.8, les conteneurs init sont omis des calculs de demande par défaut de l'objet LimitRange.
3.1.5.4. Problèmes connus
  • Le pipeline s2i-nodejs ne peut pas utiliser le flux d'images nodejs:14-ubi8-minimal pour effectuer des constructions source-image (S2I). L'utilisation de ce flux d'images produit un message error building at STEP "RUN /usr/libexec/s2i/assemble": exit status 127.

    Solution de contournement : Utilisez nodejs:14-ubi8 plutôt que le flux d'images nodejs:14-ubi8-minimal.

  • Lorsque vous exécutez des tâches de cluster Maven et Jib-Maven, l'image de conteneur par défaut n'est prise en charge que sur l'architecture Intel (x86). Par conséquent, les tâches échoueront sur les clusters ARM, IBM Power Systems (ppc64le), IBM Z et LinuxONE (s390x).

    Solution de contournement : Spécifiez une image personnalisée en définissant la valeur du paramètre MAVEN_IMAGE sur maven:3.6.3-adoptopenjdk-11.

    Astuce

    Avant d'installer des tâches basées sur le catalogue Tekton sur ARM, IBM Power Systems (ppc64le), IBM Z et LinuxONE (s390x) en utilisant tkn hub, vérifiez si la tâche peut être exécutée sur ces plates-formes. Pour vérifier si ppc64le et s390x sont répertoriés dans la section "Platforms" des informations sur la tâche, vous pouvez exécuter la commande suivante : tkn hub info task <name>

  • Sur ARM, IBM Power Systems, IBM Z et LinuxONE, la tâche s2i-dotnet cluster n'est pas prise en charge.
  • Le mappage implicite des paramètres transmet incorrectement les paramètres des définitions de premier niveau Pipeline ou PipelineRun aux tâches taskRef. Le mappage ne doit se faire qu'à partir d'une ressource de premier niveau vers des tâches avec des spécifications en ligne taskSpec. Ce problème n'affecte que les clusters où cette fonctionnalité a été activée en définissant le champ enable-api-fields sur alpha dans la section pipeline de la définition de la ressource personnalisée TektonConfig.
3.1.5.5. Problèmes corrigés
  • Avant cette mise à jour, les métriques pour les exécutions de pipeline dans la vue Développeur de la console web étaient incomplètes et obsolètes. Avec cette mise à jour, le problème a été corrigé de sorte que les métriques sont correctes.
  • Avant cette mise à jour, si un pipeline avait deux tâches parallèles qui échouaient et que l'une d'entre elles avait retries=2, les tâches finales ne s'exécutaient jamais, et le pipeline s'arrêtait et ne s'exécutait pas. Par exemple, la tâche pipelines-operator-subscription échouait par intermittence avec le message d'erreur suivant : Unable to connect to the server: EOF. Avec cette mise à jour, le problème a été corrigé de sorte que les tâches finales s'exécutent toujours.
  • Avant cette mise à jour, si l'exécution d'un pipeline s'arrêtait en raison de l'échec d'une tâche, les autres tâches risquaient de ne pas être relancées. Par conséquent, aucune tâche finally n'était programmée, ce qui entraînait un blocage du pipeline. Cette mise à jour résout le problème. Les objets TaskRuns et Run peuvent réessayer lorsqu'une exécution du pipeline s'est arrêtée, même par arrêt gracieux, afin que les exécutions du pipeline puissent se terminer.
  • Cette mise à jour modifie la façon dont les besoins en ressources sont calculés lorsqu'un ou plusieurs objets LimitRange sont présents dans l'espace de noms où un objet TaskRun existe. Le planificateur prend désormais en compte les conteneurs step et exclut tous les autres conteneurs d'applications, tels que les conteneurs sidecar, lors de la prise en compte des demandes provenant d'objets LimitRange.
  • Avant cette mise à jour, dans certaines conditions, le paquetage flag pouvait analyser incorrectement une sous-commande suivant immédiatement un double tiret de terminaison de drapeau, --. Dans ce cas, il exécutait la sous-commande du point d'entrée plutôt que la commande réelle. Cette mise à jour corrige ce problème d'analyse des drapeaux afin que le point d'entrée exécute la commande correcte.
  • Avant cette mise à jour, le contrôleur pouvait générer plusieurs paniques si l'extraction d'une image échouait ou si son statut d'extraction était incomplet. Cette mise à jour corrige le problème en vérifiant la valeur step.ImageID plutôt que la valeur status.TaskSpec.
  • Avant cette mise à jour, l'annulation d'une exécution de pipeline contenant une tâche personnalisée non planifiée produisait une erreur PipelineRunCouldntCancel. Cette mise à jour corrige ce problème. Vous pouvez annuler une exécution de pipeline contenant une tâche personnalisée non planifiée sans produire cette erreur.
  • Avant cette mise à jour, si le <NAME> dans $params["<NAME>"] ou $params['<NAME>'] contenait un point (.), toute partie du nom à droite du point n'était pas extraite. Par exemple, à partir de $params["org.ipsum.lorem"], seul org était extrait.

    Cette mise à jour corrige le problème de sorte que $params récupère la valeur complète. Par exemple, $params["org.ipsum.lorem"] et $params['org.ipsum.lorem'] sont valides et la valeur complète de <NAME>, org.ipsum.lorem, est extraite.

    Il génère également une erreur si <NAME> n'est pas entouré de guillemets simples ou doubles. Par exemple, $params.org.ipsum.lorem n'est pas valide et génère une erreur de validation.

  • Avec cette mise à jour, les ressources Trigger prennent en charge les intercepteurs personnalisés et garantissent que le port du service d'interception personnalisé est le même que celui du fichier de définition ClusterInterceptor.
  • Avant cette mise à jour, la commande tkn version pour les chaînes Tekton et les composants Operator ne fonctionnait pas correctement. Cette mise à jour corrige le problème de sorte que la commande fonctionne correctement et renvoie des informations sur la version de ces composants.
  • Avant cette mise à jour, si vous exécutiez une commande tkn pr delete --ignore-running et qu'un pipeline n'avait pas de valeur status.condition, l'outil CLI tkn générait une erreur de pointeur nul (NPE). Cette mise à jour corrige le problème de sorte que l'outil CLI génère désormais une erreur et ignore correctement les exécutions de pipeline qui sont toujours en cours.
  • Avant cette mise à jour, si vous utilisiez les commandes tkn pr delete --keep <value> ou tkn tr delete --keep <value> et que le nombre d'exécutions de pipeline ou de tâches était inférieur à la valeur, la commande ne renvoyait pas d'erreur comme prévu. Cette mise à jour corrige le problème de sorte que la commande renvoie correctement une erreur dans ces conditions.
  • Avant cette mise à jour, si vous utilisiez les commandes tkn pr delete ou tkn tr delete avec les drapeaux -p ou -t et le drapeau --ignore-running, les commandes supprimaient incorrectement les ressources en cours d'exécution ou en attente. Cette mise à jour corrige le problème de sorte que ces commandes ignorent correctement les ressources en cours d'exécution ou en attente.
  • Avec cette mise à jour, vous pouvez configurer les chaînes Tekton en utilisant la ressource personnalisée TektonChain. Cette fonctionnalité permet à votre configuration de persister après la mise à jour, contrairement à la carte de configuration chains-config, qui est écrasée lors des mises à jour.
  • Avec cette mise à jour, les ressources ClusterTask ne s'exécutent plus en tant que root par défaut, à l'exception des tâches de cluster buildah et s2i.
  • Avant cette mise à jour, les tâches sur Red Hat OpenShift Pipelines 1.7.1 échouaient lors de l'utilisation de init comme premier argument suivi de deux arguments ou plus. Avec cette mise à jour, les drapeaux sont analysés correctement, et les exécutions de tâches sont réussies.
  • Avant cette mise à jour, l'installation de Red Hat OpenShift Pipelines Operator sur OpenShift Container Platform 4.9 et 4.10 échouait en raison d'une liaison de rôle non valide, avec le message d'erreur suivant :

    error updating rolebinding openshift-operators-prometheus-k8s-read-binding: RoleBinding.rbac.authorization.k8s.io
    "openshift-operators-prometheus-k8s-read-binding" is invalid:
    roleRef: Invalid value: rbac.RoleRef{APIGroup:"rbac.authorization.k8s.io", Kind:"Role", Name:"openshift-operator-read"}: cannot change roleRef
    Copy to Clipboard Toggle word wrap

    Cette mise à jour corrige le problème de sorte que l'échec ne se produise plus.

  • Auparavant, la mise à niveau de Red Hat OpenShift Pipelines Operator entraînait la recréation du compte de service pipeline, ce qui signifiait que les secrets liés au compte de service étaient perdus. Cette mise à jour corrige ce problème. Lors des mises à niveau, l'Opérateur ne recrée plus le compte de service pipeline. Par conséquent, les secrets liés au compte de service pipeline persistent après les mises à niveau, et les ressources (tâches et pipelines) continuent de fonctionner correctement.
  • Avec cette mise à jour, les pods Pipelines as Code s'exécutent sur les nœuds d'infrastructure si les paramètres du nœud d'infrastructure sont configurés dans la ressource personnalisée (CR) TektonConfig.
  • Auparavant, avec l'élagueur de ressources, chaque opérateur d'espace de noms créait une commande qui s'exécutait dans un conteneur distinct. Cette conception consommait trop de ressources dans les grappes comportant un grand nombre d'espaces de noms. Par exemple, pour exécuter une seule commande, une grappe de 1000 espaces de noms produisait 1000 conteneurs dans un pod.

    Cette mise à jour corrige le problème. Elle transmet la configuration basée sur l'espace de noms à la tâche afin que toutes les commandes s'exécutent en boucle dans un conteneur.

  • Dans Tekton Chains, vous devez définir un secret appelé signing-secrets pour contenir la clé utilisée pour signer les tâches et les images. Cependant, avant cette mise à jour, la mise à jour de Red Hat OpenShift Pipelines Operator réinitialisait ou écrasait ce secret, et la clé était perdue. Cette mise à jour corrige ce problème. Désormais, si le secret est configuré après l'installation de Tekton Chains via l'Opérateur, le secret persiste et n'est pas écrasé par les mises à jour.
  • Avant cette mise à jour, toutes les tâches de construction de S2I échouaient avec une erreur similaire au message suivant :

    Error: error writing "0 0 4294967295\n" to /proc/22/uid_map: write /proc/22/uid_map: operation not permitted
    time="2022-03-04T09:47:57Z" level=error msg="error writing \"0 0 4294967295\\n\" to /proc/22/uid_map: write /proc/22/uid_map: operation not permitted"
    time="2022-03-04T09:47:57Z" level=error msg="(unable to determine exit status)"
    Copy to Clipboard Toggle word wrap

    Avec cette mise à jour, la contrainte de contexte de sécurité (SCC) de pipelines-scc est compatible avec la capacité de SETFCAP nécessaire pour les tâches de cluster de Buildah et S2I. Par conséquent, les tâches de construction Buildah et S2I peuvent être exécutées avec succès.

    Pour exécuter avec succès la tâche de cluster Buildah et les tâches de construction S2I pour les applications écrites dans différents langages et frameworks, ajoutez l'extrait suivant pour les objets steps appropriés tels que build et push:

    securityContext:
      capabilities:
        add: ["SETFCAP"]
    Copy to Clipboard Toggle word wrap
  • Avant cette mise à jour, l'installation de Red Hat OpenShift Pipelines Operator prenait plus de temps que prévu. Cette mise à jour optimise certains paramètres afin d'accélérer le processus d'installation.
  • Avec cette mise à jour, les tâches des clusters Buildah et S2I comportent moins d'étapes que dans les versions précédentes. Certaines étapes ont été regroupées en une seule afin de mieux fonctionner avec les objets ResourceQuota et LimitRange et de ne pas nécessiter plus de ressources que nécessaire.
  • Cette mise à jour met à jour les versions de Buildah, de l'outil CLI tkn et de l'outil CLI skopeo dans les tâches en grappe.
  • Avant cette mise à jour, l'opérateur échouait lors de la création de ressources RBAC si un espace de noms était dans l'état Terminating. Avec cette mise à jour, l'opérateur ignore les espaces de noms dans l'état Terminating et crée les ressources RBAC.
  • Avant cette mise à jour, les pods pour les cronjobs prune n'étaient pas planifiés sur les nœuds d'infrastructure, comme prévu. Au lieu de cela, ils étaient planifiés sur les nœuds de travail ou n'étaient pas planifiés du tout. Avec cette mise à jour, ces types de pods peuvent désormais être planifiés sur les nœuds d'infrastructure s'ils sont configurés dans la ressource personnalisée (CR) TektonConfig.

Avec cette mise à jour, Red Hat OpenShift Pipelines General Availability (GA) 1.8.1 est disponible sur OpenShift Container Platform 4.10, 4.11 et 4.12.

3.1.5.6.1. Problèmes connus
  • Par défaut, les conteneurs ont des permissions restreintes pour une sécurité accrue. Les permissions restreintes s'appliquent à tous les pods contrôleurs dans l'Opérateur Red Hat OpenShift Pipelines, ainsi qu'à certaines tâches de cluster. En raison des permissions restreintes, la tâche de cluster git-clone échoue dans certaines configurations.

    Solution de contournement : Aucune. Vous pouvez suivre le problème SRVKP-2634.

  • Lorsque les ensembles d'installation sont dans un état d'échec, l'état de la ressource personnalisée TektonConfig est incorrectement affiché comme True au lieu de False.

    Exemple : Échec de l'installation des jeux

    $ oc get tektoninstallerset
    NAME                                     READY   REASON
    addon-clustertasks-nx5xz                 False   Error
    addon-communityclustertasks-cfb2p        True
    addon-consolecli-ftrb8                   True
    addon-openshift-67dj2                    True
    addon-pac-cf7pz                          True
    addon-pipelines-fvllm                    True
    addon-triggers-b2wtt                     True
    addon-versioned-clustertasks-1-8-hqhnw   False   Error
    pipeline-w75ww                           True
    postpipeline-lrs22                       True
    prepipeline-ldlhw                        True
    rhosp-rbac-4dmgb                         True
    trigger-hfg64                            True
    validating-mutating-webhoook-28rf7       True
    Copy to Clipboard Toggle word wrap

    Exemple : Statut incorrect TektonConfig

    $ oc get tektonconfig config
    NAME     VERSION   READY   REASON
    config   1.8.1     True
    Copy to Clipboard Toggle word wrap

3.1.5.6.2. Problèmes corrigés
  • Avant cette mise à jour, l'élagueur supprimait les tâches des pipelines en cours d'exécution et affichait l'avertissement suivant : some tasks were indicated completed without ancestors being done. Avec cette mise à jour, l'élagueur conserve les tâches qui font partie des pipelines en cours d'exécution.
  • Avant cette mise à jour, pipeline-1.8 était le canal par défaut pour l'installation de Red Hat OpenShift Pipelines Operator 1.8.x. Avec cette mise à jour, latest est le canal par défaut.
  • Avant cette mise à jour, les pods contrôleurs de Pipelines as Code n'avaient pas accès aux certificats exposés par l'utilisateur. Avec cette mise à jour, Pipelines as Code peut désormais accéder aux routes et aux dépôts Git protégés par un certificat auto-signé ou personnalisé.
  • Avant cette mise à jour, la tâche échouait avec des erreurs RBAC après la mise à niveau de Red Hat OpenShift Pipelines 1.7.2 à 1.8.0. Avec cette mise à jour, les tâches s'exécutent avec succès sans aucune erreur RBAC.
  • Avant cette mise à jour, à l'aide de l'outil CLI tkn, vous ne pouviez pas supprimer les exécutions de tâches et les exécutions de pipeline qui contenaient un objet result dont le type était array. Avec cette mise à jour, vous pouvez utiliser l'outil CLI tkn pour supprimer les exécutions de tâches et les exécutions de pipeline qui contiennent un objet result dont le type est array.
  • Avant cette mise à jour, si une spécification de pipeline contenait une tâche avec un paramètre ENV_VARS de type array, l'exécution du pipeline échouait avec l'erreur suivante : invalid input params for task func-buildpacks: param types don’t match the user-specified type: [ENV_VARS]. Avec cette mise à jour, les exécutions de pipeline avec de telles spécifications de pipeline et de tâche n'échouent pas.
  • Avant cette mise à jour, les administrateurs de grappes ne pouvaient pas fournir de fichier config.json à la tâche de grappe Buildah pour accéder à un registre de conteneurs. Avec cette mise à jour, les administrateurs de clusters peuvent fournir un fichier config.json à la tâche de cluster Buildah en utilisant l'espace de travail dockerconfig.

Avec cette mise à jour, Red Hat OpenShift Pipelines General Availability (GA) 1.8.2 est disponible sur OpenShift Container Platform 4.10, 4.11 et 4.12.

3.1.5.7.1. Problèmes corrigés
  • Avant cette mise à jour, la tâche git-clone échouait lors du clonage d'un référentiel à l'aide de clés SSH. Avec cette mise à jour, le rôle de l'utilisateur non root dans la tâche git-init est supprimé, et le programme SSH recherche les clés correctes dans le répertoire $HOME/.ssh/.

Avec cette mise à jour, Red Hat OpenShift Pipelines General Availability (GA) 1.7 est disponible sur OpenShift Container Platform 4.9, 4.10 et 4.11.

3.1.6.1. Nouvelles fonctionnalités

En plus des corrections et des améliorations de stabilité, les sections suivantes mettent en évidence les nouveautés de Red Hat OpenShift Pipelines 1.7.

3.1.6.1.1. Pipelines
  • Avec cette mise à jour, pipelines-<version> est le canal par défaut pour installer Red Hat OpenShift Pipelines Operator. Par exemple, le canal par défaut pour installer la version 1.7 d'OpenShift Pipelines Operator est pipelines-1.7. Les administrateurs de cluster peuvent également utiliser le canal latest pour installer la version stable la plus récente de l'Opérateur.

    Note

    Les canaux preview et stable seront dépréciés et supprimés dans une prochaine version.

  • Lorsque vous exécutez une commande dans un espace de noms utilisateur, votre conteneur s'exécute en tant que root (user id 0) mais dispose de privilèges d'utilisateur sur l'hôte. Avec cette mise à jour, pour exécuter des pods dans l'espace de noms utilisateur, vous devez passer les annotations attendues par CRI-O.

    • Pour ajouter ces annotations pour tous les utilisateurs, exécutez la commande oc edit clustertask buildah et modifiez la tâche de cluster buildah.
    • Pour ajouter les annotations à un espace de noms spécifique, exportez la tâche de cluster en tant que tâche vers cet espace de noms.
  • Avant cette mise à jour, si certaines conditions n'étaient pas remplies, l'expression when sautait un objet Task et ses tâches dépendantes. Avec cette mise à jour, vous pouvez étendre l'expression when pour garder l'objet Task uniquement, et non ses tâches dépendantes. Pour activer cette mise à jour, définissez l'indicateur scope-when-expressions-to-task sur true dans le CRD TektonConfig.

    Note

    L'indicateur scope-when-expressions-to-task est obsolète et sera supprimé dans une prochaine version. En tant que meilleure pratique pour OpenShift Pipelines, utilisez les expressions when limitées à l'élément gardé Task uniquement.

  • Avec cette mise à jour, vous pouvez utiliser la substitution de variables dans le champ subPath d'un espace de travail au sein d'une tâche.
  • Avec cette mise à jour, vous pouvez référencer les paramètres et les résultats en utilisant une notation entre crochets avec des guillemets simples ou doubles. Avant cette mise à jour, vous ne pouviez utiliser que la notation par points. Par exemple, les éléments suivants sont désormais équivalents :

    • $(param.myparam), $(param['myparam']), et $(param["myparam"]).

      Vous pouvez utiliser des guillemets simples ou doubles pour entourer les noms de paramètres qui contiennent des caractères problématiques, tels que ".". Par exemple, $(param['my.param']) et $(param["my.param"]).

  • Avec cette mise à jour, vous pouvez inclure le paramètre onError d'une étape dans la définition de la tâche sans activer l'indicateur enable-api-fields.
3.1.6.1.2. Déclencheurs
  • Avec cette mise à jour, la carte de configuration feature-flag-triggers dispose d'un nouveau champ labels-exclusion-pattern. Vous pouvez définir la valeur de ce champ par une expression régulière (regex). Le contrôleur filtre les étiquettes qui correspondent au motif de l'expression régulière et les empêche de se propager de l'auditeur d'événements vers les ressources créées pour l'auditeur d'événements.
  • Avec cette mise à jour, le champ TriggerGroups est ajouté à la spécification EventListener. Ce champ permet de spécifier un ensemble d'intercepteurs à exécuter avant de sélectionner et d'exécuter un groupe de déclencheurs. Pour activer cette fonctionnalité, dans la définition de la ressource personnalisée TektonConfig, dans la section pipeline, vous devez définir le champ enable-api-fields sur alpha.
  • Avec cette mise à jour, les ressources Trigger prennent en charge les exécutions personnalisées définies par un modèle TriggerTemplate.
  • Avec cette mise à jour, les déclencheurs prennent en charge l'émission d'événements Kubernetes à partir d'un pod EventListener.
  • Avec cette mise à jour, les mesures de comptage sont disponibles pour les objets suivants : ClusterInteceptor, EventListener, TriggerTemplate, ClusterTriggerBinding, et TriggerBinding.
  • Cette mise à jour ajoute la spécification ServicePort à la ressource Kubernetes. Vous pouvez utiliser cette spécification pour modifier le port qui expose le service d'écoute d'événements. Le port par défaut est 8080.
  • Avec cette mise à jour, vous pouvez utiliser le champ targetURI dans la spécification EventListener pour envoyer des événements cloud pendant le traitement des déclencheurs. Pour activer cette fonctionnalité, dans la définition de la ressource personnalisée TektonConfig, dans la section pipeline, vous devez définir le champ enable-api-fields sur alpha.
  • Avec cette mise à jour, l'objet tekton-triggers-eventlistener-roles a maintenant un verbe patch, en plus du verbe create qui existe déjà.
  • Avec cette mise à jour, le paramètre securityContext.runAsUser est supprimé du déploiement de l'écouteur d'événements.
3.1.6.1.3. CLI
  • Avec cette mise à jour, la commande tkn [pipeline | pipelinerun] export exporte un pipeline ou une exécution de pipeline sous la forme d'un fichier YAML. Par exemple, il est possible d'exporter un pipeline ou une exécution de pipeline sous forme de fichier YAML :

    • Exporter un pipeline nommé test_pipeline dans l'espace de noms openshift-pipelines:

      $ tkn pipeline export test_pipeline -n openshift-pipelines
      Copy to Clipboard Toggle word wrap
    • Exporter un pipeline nommé test_pipeline_run dans l'espace de noms openshift-pipelines:

      $ tkn pipelinerun export test_pipeline_run -n openshift-pipelines
      Copy to Clipboard Toggle word wrap
  • Avec cette mise à jour, l'option --grace est ajoutée à l'option tkn pipelinerun cancel. Utilisez l'option --grace pour mettre fin à l'exécution d'un pipeline de manière gracieuse au lieu de forcer la fin. Pour activer cette fonctionnalité, dans la définition de la ressource personnalisée TektonConfig, dans la section pipeline, vous devez définir le champ enable-api-fields à alpha.
  • Cette mise à jour ajoute les versions Operator et Chains à la sortie de la commande tkn version.

    Important

    Tekton Chains est une fonctionnalité de l'aperçu technologique.

  • Avec cette mise à jour, la commande tkn pipelinerun describe affiche toutes les exécutions de tâches annulées, lorsque vous annulez une exécution de pipeline. Avant cette correction, une seule tâche était affichée.
  • Avec cette mise à jour, vous pouvez ne pas fournir les spécifications de l'espace de travail optionnel lorsque vous exécutez la commande tkn [t | p | ct] start skips avec l'option --skip-optional-workspace. Vous pouvez également ne pas le faire en mode interactif.
  • Avec cette mise à jour, vous pouvez utiliser la commande tkn chains pour gérer les chaînes Tekton. Vous pouvez également utiliser l'option --chains-namespace pour spécifier l'espace de noms dans lequel vous souhaitez installer les chaînes Tekton.

    Important

    Tekton Chains est une fonctionnalité de l'aperçu technologique.

3.1.6.1.4. Opérateur
  • Avec cette mise à jour, vous pouvez utiliser l'opérateur Red Hat OpenShift Pipelines pour installer et déployer Tekton Hub et Tekton Chains.

    Important

    Les chaînes Tekton et le déploiement de Tekton Hub sur un cluster sont des fonctionnalités de l'aperçu technologique.

  • Avec cette mise à jour, vous pouvez trouver et utiliser Pipelines as Code (PAC) en tant qu'option supplémentaire.

    Important

    Pipelines as Code est une fonctionnalité de l'aperçu technologique.

  • Avec cette mise à jour, vous pouvez désormais désactiver l'installation des tâches de cluster communautaire en définissant le paramètre communityClusterTasks sur false. Par exemple :

    ...
    spec:
      profile: all
      targetNamespace: openshift-pipelines
      addon:
        params:
        - name: clusterTasks
          value: "true"
        - name: pipelineTemplates
          value: "true"
        - name: communityClusterTasks
          value: "false"
    ...
    Copy to Clipboard Toggle word wrap
  • Avec cette mise à jour, vous pouvez désactiver l'intégration de Tekton Hub avec la perspective Developer en définissant l'indicateur enable-devconsole-integration dans la ressource personnalisée TektonConfig sur false. Par exemple :

    ...
    hub:
      params:
        - name: enable-devconsole-integration
          value: "true"
    ...
    Copy to Clipboard Toggle word wrap
  • Avec cette mise à jour, la carte de configuration operator-config.yaml permet à la sortie de la commande tkn version d'afficher la version de l'opérateur.
  • Avec cette mise à jour, la version des tâches argocd-task-sync-and-wait est modifiée en v0.2.
  • Avec cette mise à jour du CRD TektonConfig, la commande oc get tektonconfig affiche la version de l'OPerator.
  • Avec cette mise à jour, le moniteur de service est ajouté aux mesures des déclencheurs.
3.1.6.1.5. Hub
Important

Le déploiement de Tekton Hub sur un cluster est une fonctionnalité de l'aperçu technologique.

Tekton Hub vous aide à découvrir, rechercher et partager des tâches et des pipelines réutilisables pour vos flux de travail CI/CD. Une instance publique de Tekton Hub est disponible sur hub.tekton.dev.

Depuis Red Hat OpenShift Pipelines 1.7, les administrateurs de clusters peuvent également installer et déployer une instance personnalisée de Tekton Hub sur les clusters d'entreprise. Vous pouvez créer un catalogue avec des tâches réutilisables et des pipelines spécifiques à votre organisation.

3.1.6.1.6. Chaînes
Important

Tekton Chains est une fonctionnalité de l'aperçu technologique.

Tekton Chains est un contrôleur de définition de ressources personnalisées (CRD) de Kubernetes. Vous pouvez l'utiliser pour gérer la sécurité de la chaîne logistique des tâches et des pipelines créés à l'aide de Red Hat OpenShift Pipelines.

Par défaut, Tekton Chains surveille les exécutions de tâches dans votre cluster OpenShift Container Platform. Chains prend des instantanés des exécutions de tâches terminées, les convertit en un ou plusieurs formats de charge utile standard, et signe et stocke tous les artefacts.

Tekton Chains prend en charge les fonctionnalités suivantes :

  • Vous pouvez signer les exécutions de tâches, les résultats des exécutions de tâches et les images de registre OCI avec des types de clés cryptographiques et des services tels que cosign.
  • Vous pouvez utiliser des formats d'attestation tels que in-toto.
  • Vous pouvez stocker en toute sécurité des signatures et des artefacts signés en utilisant le référentiel OCI comme backend de stockage.
3.1.6.1.7. Les pipelines en tant que code (PAC)
Important

Pipelines as Code est une fonctionnalité de l'aperçu technologique.

Avec Pipelines as Code, les administrateurs de clusters et les utilisateurs disposant des privilèges requis peuvent définir des modèles de pipelines dans le cadre de dépôts Git de code source. Lorsqu'elle est déclenchée par un push de code source ou une pull request pour le dépôt Git configuré, la fonctionnalité exécute le pipeline et signale son état.

Pipelines as Code prend en charge les fonctionnalités suivantes :

  • Statut de la demande d'extraction. Lors de l'itération sur une demande d'extraction, le statut et le contrôle de la demande d'extraction sont exercés sur la plateforme hébergeant le dépôt Git.
  • GitHub vérifie l'API pour définir le statut d'une exécution de pipeline, y compris les recontrôles.
  • Événements GitHub relatifs aux demandes d'extraction et aux livraisons.
  • Actions de demande d'extraction dans les commentaires, telles que /retest.
  • Filtrage des événements Git et pipeline séparé pour chaque événement.
  • Résolution automatique des tâches dans OpenShift Pipelines pour les tâches locales, Tekton Hub, et les URLs distantes.
  • Utilisation des blobs et des objets de l'API GitHub pour récupérer les configurations.
  • Liste de contrôle d'accès (ACL) sur une organisation GitHub, ou en utilisant un fichier de type Prow OWNER.
  • Le plugin tkn pac pour l'outil CLI tkn, que vous pouvez utiliser pour gérer les dépôts de Pipelines as Code et le bootstrapping.
  • Prise en charge de l'application GitHub, de GitHub Webhook, du serveur Bitbucket et de Bitbucket Cloud.
3.1.6.2. Fonctionnalités obsolètes
  • Changement radical : Cette mise à jour supprime les champs disable-working-directory-overwrite et disable-home-env-overwrite de la ressource personnalisée (CR) TektonConfig. Par conséquent, la CR TektonConfig ne définit plus automatiquement la variable d'environnement $HOME et le paramètre workingDir. Vous pouvez toujours définir la variable d'environnement $HOME et le paramètre workingDir en utilisant les champs env et workingDir dans la définition de ressource personnalisée (CRD) Task.
  • Le type de définition de ressource personnalisée (CRD) Conditions est obsolète et devrait être supprimé dans une prochaine version. Utilisez plutôt l'expression recommandée When.
  • Changement radical : La ressource Triggers valide les modèles et génère une erreur si vous ne spécifiez pas les valeurs EventListener et TriggerBinding.
3.1.6.3. Problèmes connus
  • Lorsque vous exécutez des tâches de cluster Maven et Jib-Maven, l'image de conteneur par défaut n'est prise en charge que sur l'architecture Intel (x86). Par conséquent, les tâches échoueront sur les clusters ARM, IBM Power Systems (ppc64le), IBM Z et LinuxONE (s390x). Pour contourner le problème, vous pouvez spécifier une image personnalisée en définissant la valeur du paramètre MAVEN_IMAGE sur maven:3.6.3-adoptopenjdk-11.

    Astuce

    Avant d'installer des tâches basées sur le catalogue Tekton sur ARM, IBM Power Systems (ppc64le), IBM Z et LinuxONE (s390x) en utilisant tkn hub, vérifiez si la tâche peut être exécutée sur ces plates-formes. Pour vérifier si ppc64le et s390x sont répertoriés dans la section "Platforms" des informations sur la tâche, vous pouvez exécuter la commande suivante : tkn hub info task <name>

  • Sur IBM Power Systems, IBM Z et LinuxONE, la tâche s2i-dotnet cluster n'est pas prise en charge.
  • Vous ne pouvez pas utiliser le flux d'images nodejs:14-ubi8-minimal car cela génère les erreurs suivantes :

    STEP 7: RUN /usr/libexec/s2i/assemble
    /bin/sh: /usr/libexec/s2i/assemble: No such file or directory
    subprocess exited with status 127
    subprocess exited with status 127
    error building at STEP "RUN /usr/libexec/s2i/assemble": exit status 127
    time="2021-11-04T13:05:26Z" level=error msg="exit status 127"
    Copy to Clipboard Toggle word wrap
  • Le mappage implicite des paramètres transmet incorrectement les paramètres des définitions de premier niveau Pipeline ou PipelineRun aux tâches taskRef. Le mappage ne doit se faire qu'à partir d'une ressource de premier niveau vers des tâches avec des spécifications en ligne taskSpec. Ce problème n'affecte que les clusters où cette fonctionnalité a été activée en définissant le champ enable-api-fields sur alpha dans la section pipeline de la définition de la ressource personnalisée TektonConfig.
3.1.6.4. Problèmes corrigés
  • Avec cette mise à jour, si des métadonnées telles que labels et annotations sont présentes dans les définitions des objets Pipeline et PipelineRun, les valeurs du type PipelineRun sont prioritaires. Vous pouvez observer un comportement similaire pour les objets Task et TaskRun.
  • Avec cette mise à jour, si le champ timeouts.tasks ou le champ timeouts.finally est défini sur 0, le champ timeouts.pipeline est également défini sur 0.
  • Avec cette mise à jour, l'indicateur -x set est supprimé des scripts qui n'utilisent pas de shebang. Cette correction réduit les risques de fuite de données lors de l'exécution des scripts.
  • Avec cette mise à jour, tout caractère backslash présent dans les noms d'utilisateur des identifiants Git est échappé par un backslash supplémentaire dans le fichier .gitconfig.
  • Avec cette mise à jour, la propriété finalizer de l'objet EventListener n'est pas nécessaire pour nettoyer les logs et les cartes de configuration.
  • Avec cette mise à jour, le client HTTP par défaut associé au serveur d'écoute des événements est supprimé et un client HTTP personnalisé est ajouté. En conséquence, les délais d'attente ont été améliorés.
  • Avec cette mise à jour, le rôle de cluster Déclencheurs fonctionne désormais avec les références de propriétaires.
  • Avec cette mise à jour, la condition de course dans l'écouteur d'événements ne se produit pas lorsque plusieurs intercepteurs renvoient des extensions.
  • Avec cette mise à jour, la commande tkn pr delete n'efface pas les pipelines exécutés avec l'indicateur ignore-running.
  • Avec cette mise à jour, les pods de l'opérateur ne continuent pas à redémarrer lorsque vous modifiez les paramètres d'un add-on.
  • Avec cette mise à jour, le pod tkn serve CLI est planifié sur les nœuds infra, s'il n'est pas configuré dans les ressources personnalisées d'abonnement et de configuration.
  • Avec cette mise à jour, les tâches de cluster avec les versions spécifiées ne sont pas supprimées lors de la mise à niveau.

Avec cette mise à jour, Red Hat OpenShift Pipelines General Availability (GA) 1.7.1 est disponible sur OpenShift Container Platform 4.9, 4.10 et 4.11.

3.1.6.5.1. Problèmes corrigés
  • Avant cette mise à jour, la mise à niveau de Red Hat OpenShift Pipelines Operator supprimait les données de la base de données associée à Tekton Hub et installait une nouvelle base de données. Avec cette mise à jour, une mise à niveau de l'Opérateur préserve les données.
  • Avant cette mise à jour, seuls les administrateurs de cluster pouvaient accéder aux métriques de pipeline dans la console OpenShift Container Platform. Avec cette mise à jour, les utilisateurs ayant d'autres rôles dans le cluster peuvent également accéder aux métriques du pipeline.
  • Avant cette mise à jour, les exécutions de pipeline échouaient pour les pipelines contenant des tâches qui émettent des messages de fin volumineux. Les exécutions de pipeline échouaient parce que la taille totale des messages de fin de tous les conteneurs dans un pod ne peut pas dépasser 12 KB. Avec cette mise à jour, les conteneurs d'initialisation place-tools et step-init qui utilisent la même image sont fusionnés pour réduire le nombre de conteneurs en cours d'exécution dans le pod de chaque tâche. La solution réduit le risque d'échec des exécutions du pipeline en minimisant le nombre de conteneurs en cours d'exécution dans le pod d'une tâche. Cependant, elle ne supprime pas la limitation de la taille maximale autorisée d'un message de fin.
  • Avant cette mise à jour, les tentatives d'accès aux URL de ressources directement depuis la console web Tekton Hub entraînaient une erreur Nginx 404. Avec cette mise à jour, l'image de la console web Tekton Hub est corrigée pour permettre l'accès aux URLs des ressources directement depuis la console web Tekton Hub.
  • Avant cette mise à jour, la tâche d'élagage des ressources créait un conteneur distinct pour chaque espace de noms afin d'élaguer les ressources. Avec cette mise à jour, la tâche d'élagage des ressources exécute les commandes pour tous les espaces de noms en boucle dans un seul conteneur.

Avec cette mise à jour, Red Hat OpenShift Pipelines General Availability (GA) 1.7.2 est disponible sur OpenShift Container Platform 4.9, 4.10, et la version à venir.

3.1.6.6.1. Problèmes connus
  • La carte de configuration chains-config pour les chaînes Tekton dans l'espace de noms openshift-pipelines est automatiquement réinitialisée par défaut après la mise à niveau de Red Hat OpenShift Pipelines Operator. Actuellement, il n'y a pas de solution de contournement pour ce problème.
3.1.6.6.2. Problèmes corrigés
  • Avant cette mise à jour, les tâches sur OpenShift Pipelines 1.7.1 échouaient lors de l'utilisation de init comme premier argument, suivi de deux arguments ou plus. Avec cette mise à jour, les drapeaux sont analysés correctement et les tâches sont exécutées avec succès.
  • Avant cette mise à jour, l'installation de Red Hat OpenShift Pipelines Operator sur OpenShift Container Platform 4.9 et 4.10 échouait en raison d'une liaison de rôle non valide, avec le message d'erreur suivant :

    error updating rolebinding openshift-operators-prometheus-k8s-read-binding: RoleBinding.rbac.authorization.k8s.io "openshift-operators-prometheus-k8s-read-binding" is invalid: roleRef: Invalid value: rbac.RoleRef{APIGroup:"rbac.authorization.k8s.io", Kind:"Role", Name:"openshift-operator-read"}: cannot change roleRef
    Copy to Clipboard Toggle word wrap

    Avec cette mise à jour, l'opérateur Red Hat OpenShift Pipelines s'installe avec des espaces de noms de liaison de rôle distincts pour éviter les conflits avec l'installation d'autres opérateurs.

  • Avant cette mise à jour, la mise à niveau de l'opérateur entraînait la réinitialisation de la clé secrète signing-secrets pour les chaînes Tekton à sa valeur par défaut. Avec cette mise à jour, la clé secrète personnalisée persiste après la mise à niveau de l'opérateur.

    Note

    La mise à niveau vers Red Hat OpenShift Pipelines 1.7.2 réinitialise la clé. Cependant, lorsque vous mettez à niveau vers des versions ultérieures, la clé est censée persister.

  • Avant cette mise à jour, toutes les tâches de construction de S2I échouaient avec une erreur similaire au message suivant :

    Error: error writing "0 0 4294967295\n" to /proc/22/uid_map: write /proc/22/uid_map: operation not permitted
    time="2022-03-04T09:47:57Z" level=error msg="error writing \"0 0 4294967295\\n\" to /proc/22/uid_map: write /proc/22/uid_map: operation not permitted"
    time="2022-03-04T09:47:57Z" level=error msg="(unable to determine exit status)"
    Copy to Clipboard Toggle word wrap

    Avec cette mise à jour, la contrainte de contexte de sécurité (SCC) de pipelines-scc est compatible avec la capacité de SETFCAP nécessaire pour les tâches de cluster de Buildah et S2I. Par conséquent, les tâches de construction Buildah et S2I peuvent être exécutées avec succès.

    Pour exécuter avec succès la tâche de cluster Buildah et les tâches de construction S2I pour les applications écrites dans différents langages et frameworks, ajoutez l'extrait suivant pour les objets steps appropriés tels que build et push:

    securityContext:
      capabilities:
        add: ["SETFCAP"]
    Copy to Clipboard Toggle word wrap

Avec cette mise à jour, Red Hat OpenShift Pipelines General Availability (GA) 1.7.3 est disponible sur OpenShift Container Platform 4.9, 4.10 et 4.11.

3.1.6.7.1. Problèmes corrigés
  • Avant cette mise à jour, l'opérateur échouait lors de la création de ressources RBAC si un espace de noms était dans l'état Terminating. Avec cette mise à jour, l'opérateur ignore les espaces de noms dans l'état Terminating et crée les ressources RBAC.
  • Auparavant, la mise à niveau de Red Hat OpenShift Pipelines Operator entraînait la recréation du compte de service pipeline, ce qui signifiait que les secrets liés au compte de service étaient perdus. Cette mise à jour corrige ce problème. Lors des mises à niveau, l'Opérateur ne recrée plus le compte de service pipeline. Par conséquent, les secrets liés au compte de service pipeline persistent après les mises à niveau, et les ressources (tâches et pipelines) continuent de fonctionner correctement.

Avec cette mise à jour, Red Hat OpenShift Pipelines General Availability (GA) 1.6 est disponible sur OpenShift Container Platform 4.9.

3.1.7.1. Nouvelles fonctionnalités

En plus des corrections et des améliorations de la stabilité, les sections suivantes mettent en évidence les nouveautés de Red Hat OpenShift Pipelines 1.6.

  • Avec cette mise à jour, vous pouvez configurer la commande start d'un pipeline ou d'une tâche pour qu'elle renvoie une chaîne formatée YAML ou JSON en utilisant l'option --output <string>, où <string> est yaml ou json. Sinon, sans l'option --output, la commande start renvoie un message convivial difficile à analyser par d'autres programmes. Le renvoi d'une chaîne au format YAML ou JSON est utile pour les environnements d'intégration continue (CI). Par exemple, après la création d'une ressource, vous pouvez utiliser yq ou jq pour analyser le message au format YAML ou JSON concernant la ressource et attendre que cette ressource soit terminée sans utiliser l'option showlog.
  • Avec cette mise à jour, vous pouvez vous authentifier auprès d'un registre en utilisant le fichier d'authentification auth.json de Podman. Par exemple, vous pouvez utiliser tkn bundle push pour pousser vers un registre distant en utilisant Podman au lieu de Docker CLI.
  • Avec cette mise à jour, si vous utilisez la commande tkn [taskrun | pipelinerun] delete --all, vous pouvez conserver les exécutions datant de moins d'un certain nombre de minutes en utilisant la nouvelle option --keep-since <minutes>. Par exemple, pour conserver les exécutions datant de moins de cinq minutes, vous devez saisir tkn [taskrun | pipelinerun] delete -all --keep-since 5.
  • Avec cette mise à jour, lorsque vous supprimez des exécutions de tâches ou des exécutions de pipeline, vous pouvez utiliser les options --parent-resource et --keep-since en même temps. Par exemple, la commande tkn pipelinerun delete --pipeline pipelinename --keep-since 5 préserve les exécutions de pipeline dont la ressource parente est nommée pipelinename et dont l'ancienneté est inférieure ou égale à cinq minutes. Les commandes tkn tr delete -t <taskname> --keep-since 5 et tkn tr delete --clustertask <taskname> --keep-since 5 fonctionnent de la même manière pour les exécutions de tâches.
  • Cette mise à jour ajoute la prise en charge des ressources de déclenchement pour qu'elles fonctionnent avec les ressources v1beta1.
  • Cette mise à jour ajoute une option ignore-running aux commandes tkn pipelinerun delete et tkn taskrun delete.
  • Cette mise à jour ajoute une sous-commande create aux commandes tkn task et tkn clustertask.
  • Avec cette mise à jour, lorsque vous utilisez la commande tkn pipelinerun delete --all, vous pouvez utiliser la nouvelle option --label <string> pour filtrer les parcours du pipeline par étiquette. Vous pouvez également utiliser l'option --label avec = et == comme opérateurs d'égalité, ou != comme opérateur d'inégalité. Par exemple, les commandes tkn pipelinerun delete --all --label asdf et tkn pipelinerun delete --all --label==asdf suppriment toutes deux toutes les séries de pipelines portant le label asdf.
  • Avec cette mise à jour, vous pouvez récupérer la version des composants Tekton installés à partir de la carte de configuration ou, si la carte de configuration n'est pas présente, à partir du contrôleur de déploiement.
  • Avec cette mise à jour, les déclencheurs prennent en charge les cartes de configuration feature-flags et config-defaults pour configurer les drapeaux des fonctionnalités et définir les valeurs par défaut, respectivement.
  • Cette mise à jour ajoute une nouvelle métrique, eventlistener_event_count, que vous pouvez utiliser pour compter les événements reçus par la ressource EventListener.
  • Cette mise à jour ajoute les types d'API v1beta1 Go. Avec cette mise à jour, les déclencheurs prennent désormais en charge la version de l'API v1beta1.

    Avec la version actuelle, les fonctionnalités de v1alpha1 sont désormais obsolètes et seront supprimées dans une prochaine version. Commencez à utiliser les fonctionnalités de v1beta1 à la place.

  • Dans la version actuelle, l'exécution automatique des ressources est activée par défaut. En outre, vous pouvez configurer l'exécution automatique des tâches et des pipelines pour chaque espace de noms séparément, en utilisant les nouvelles annotations suivantes :

    • operator.tekton.dev/prune.schedule: Si la valeur de cette annotation est différente de la valeur spécifiée dans la définition de la ressource personnalisée TektonConfig, un nouveau travail cron est créé dans cet espace de noms.
    • operator.tekton.dev/prune.skip: Lorsqu'il est défini sur true, l'espace de noms pour lequel il est configuré ne sera pas élagué.
    • operator.tekton.dev/prune.resources: Cette annotation accepte une liste de ressources séparées par des virgules. Pour élaguer une seule ressource, telle qu'une exécution de pipeline, définissez cette annotation à "pipelinerun". Pour élaguer plusieurs ressources, telles qu'une exécution de tâche et une exécution de pipeline, définissez cette annotation à "taskrun, pipelinerun".
    • operator.tekton.dev/prune.keep: Utilisez cette annotation pour conserver une ressource sans l'élaguer.
    • operator.tekton.dev/prune.keep-since: Cette annotation permet de conserver les ressources en fonction de leur âge. La valeur de cette annotation doit être égale à l'âge de la ressource en minutes. Par exemple, pour conserver les ressources qui ont été créées il y a cinq jours au maximum, définissez keep-since sur 7200.

      Note

      Les annotations keep et keep-since s'excluent mutuellement. Pour toute ressource, vous ne devez configurer qu'une seule d'entre elles.

    • operator.tekton.dev/prune.strategy: Fixer la valeur de cette annotation à keep ou keep-since.
  • Les administrateurs peuvent désactiver la création du compte de service pipeline pour l'ensemble du cluster, et empêcher l'escalade des privilèges par une mauvaise utilisation du SCC associé, qui est très similaire à anyuid.
  • Vous pouvez désormais configurer les drapeaux de fonctionnalité et les composants en utilisant la ressource personnalisée (CR) TektonConfig et les CR pour les composants individuels, tels que TektonPipeline et TektonTriggers. Ce niveau de granularité permet de personnaliser et de tester des fonctionnalités alpha telles que le Tekton OCI bundle pour des composants individuels.
  • Vous pouvez désormais configurer le champ optionnel Timeouts pour la ressource PipelineRun. Par exemple, vous pouvez configurer des délais séparément pour l'exécution d'un pipeline, l'exécution de chaque tâche et les tâches finally.
  • Les pods générés par la ressource TaskRun définissent désormais le champ activeDeadlineSeconds des pods. Cela permet à OpenShift de les considérer comme terminés, et vous permet d'utiliser l'objet spécifiquement scoped ResourceQuota pour les pods.
  • Vous pouvez utiliser les cartes de configuration pour éliminer les balises de métriques ou les types d'étiquettes sur une exécution de tâche, une exécution de pipeline, une tâche et un pipeline. En outre, vous pouvez configurer différents types de métriques pour mesurer la durée, tels qu'un histogramme, une jauge ou la dernière valeur.
  • Vous pouvez définir les demandes et les limites d'un pod de manière cohérente, car Tekton prend désormais entièrement en charge l'objet LimitRange en tenant compte des champs Min, Max, Default et DefaultRequest.
  • Les fonctionnalités alpha suivantes sont introduites :

    • L'exécution d'un pipeline peut maintenant s'arrêter après l'exécution des tâches finally, plutôt que d'arrêter directement l'exécution de toutes les tâches comme c'était le cas auparavant. Cette mise à jour ajoute les valeurs spec.status suivantes :

      • StoppedRunFinally arrêtera les tâches en cours d'exécution une fois qu'elles seront terminées, puis exécutera les tâches finally.
      • CancelledRunFinally annulera immédiatement les tâches en cours, puis exécutera les tâches finally.
      • Cancelled conservera le comportement antérieur fourni par le statut PipelineRunCancelled.

        Note

        Le statut Cancelled remplace le statut PipelineRunCancelled, qui est obsolète et qui sera supprimé dans la version v1.

    • Vous pouvez désormais utiliser la commande oc debug pour mettre une tâche en mode débogage, ce qui met l'exécution en pause et vous permet d'inspecter des étapes spécifiques d'un module.
    • Lorsque vous attribuez la valeur continue au champ onError d'une étape, le code de sortie de l'étape est enregistré et transmis aux étapes suivantes. Toutefois, l'exécution de la tâche n'échoue pas et l'exécution des autres étapes de la tâche se poursuit. Pour conserver le comportement existant, vous pouvez attribuer au champ onError la valeur stopAndFail.
    • Les tâches peuvent désormais accepter plus de paramètres qu'elles n'en utilisent réellement. Lorsque l'option alpha est activée, les paramètres peuvent se propager implicitement aux spécifications intégrées. Par exemple, une tâche intégrée peut accéder aux paramètres de son pipeline parent, sans définir explicitement chaque paramètre pour la tâche.
    • Si vous activez l'indicateur pour les caractéristiques alpha, les conditions des expressions When ne s'appliqueront qu'à la tâche à laquelle elle est directement associée, et non aux dépendances de la tâche. Pour appliquer les expressions When à la tâche associée et à ses dépendances, vous devez associer l'expression à chaque tâche dépendante séparément. Notez qu'à l'avenir, ce sera le comportement par défaut des expressions When dans toutes les nouvelles versions API de Tekton. Le comportement par défaut existant sera supprimé en faveur de cette mise à jour.
  • La version actuelle vous permet de configurer la sélection des nœuds en spécifiant les valeurs nodeSelector et tolerations dans la ressource personnalisée (CR) TektonConfig. L'opérateur ajoute ces valeurs à tous les déploiements qu'il crée.

    • Pour configurer la sélection des nœuds pour le contrôleur de l'opérateur et le déploiement des webhooks, vous devez modifier les champs config.nodeSelector et config.tolerations dans la spécification de Subscription CR, après avoir installé l'opérateur.
    • Pour déployer le reste des pods du plan de contrôle d'OpenShift Pipelines sur un nœud d'infrastructure, mettez à jour le CR TektonConfig avec les champs nodeSelector et tolerations. Les modifications sont ensuite appliquées à tous les pods créés par Operator.
3.1.7.2. Fonctionnalités obsolètes
  • Dans le CLI 0.21.0, la prise en charge de toutes les ressources v1alpha1 pour les commandes clustertask, task, taskrun, pipeline, et pipelinerun est obsolète. Ces ressources sont désormais obsolètes et seront supprimées dans une prochaine version.
  • Dans la version 0.16.0 de Tekton Triggers, l'étiquette redondante status est supprimée des métriques de la ressource EventListener.

    Important

    Changement radical : Le label status a été supprimé de la métrique eventlistener_http_duration_seconds_*. Supprimez les requêtes basées sur le label status.

  • Avec la version actuelle, les fonctionnalités de v1alpha1 sont désormais obsolètes et seront supprimées dans une prochaine version. Avec cette mise à jour, vous pouvez commencer à utiliser les types d'API v1beta1 Go à la place. Les déclencheurs prennent désormais en charge la version de l'API v1beta1.
  • Avec la version actuelle, la ressource EventListener envoie une réponse avant que les déclencheurs ne terminent leur traitement.

    Important

    Changement de rupture : Avec cette modification, la ressource EventListener ne répond plus avec un code d'état 201 Created lorsqu'elle crée des ressources. Au lieu de cela, elle répond avec un code de réponse 202 Accepted.

  • La version actuelle supprime le champ podTemplate de la ressource EventListener.

    Important

    Changement radical : Le champ podTemplate, qui a été supprimé dans le cadre de #1100, a été supprimé.

  • La version actuelle supprime le champ replicas, obsolète, de la spécification de la ressource EventListener.

    Important

    Changement radical : Le champ replicas, obsolète, a été supprimé.

  • Dans Red Hat OpenShift Pipelines 1.6, les valeurs de HOME="/tekton/home" et workingDir="/workspace" sont supprimées de la spécification des objets Step.

    Au lieu de cela, Red Hat OpenShift Pipelines définit HOME et workingDir aux valeurs définies par les conteneurs exécutant les objets Step. Vous pouvez remplacer ces valeurs dans la spécification de vos objets Step.

    Pour utiliser l'ancien comportement, vous pouvez remplacer les champs disable-working-directory-overwrite et disable-home-env-overwrite de la CR TektonConfig par false:

    apiVersion: operator.tekton.dev/v1alpha1
      kind: TektonConfig
      metadata:
        name: config
      spec:
        pipeline:
          disable-working-directory-overwrite: false
          disable-home-env-overwrite: false
      ...
    Copy to Clipboard Toggle word wrap
    Important

    Les champs disable-working-directory-overwrite et disable-home-env-overwrite de la CR TektonConfig sont désormais obsolètes et seront supprimés dans une prochaine version.

3.1.7.3. Problèmes connus
  • Lorsque vous exécutez des tâches de cluster Maven et Jib-Maven, l'image de conteneur par défaut n'est prise en charge que sur l'architecture Intel (x86). Par conséquent, les tâches échoueront sur les clusters IBM Power Systems (ppc64le), IBM Z et LinuxONE (s390x). Pour contourner ce problème, vous pouvez spécifier une image personnalisée en définissant la valeur du paramètre MAVEN_IMAGE sur maven:3.6.3-adoptopenjdk-11.
  • Sur IBM Power Systems, IBM Z et LinuxONE, la tâche s2i-dotnet cluster n'est pas prise en charge.
  • Avant d'installer des tâches basées sur le catalogue Tekton sur IBM Power Systems (ppc64le), IBM Z et LinuxONE (s390x) à l'aide de tkn hub, vérifiez si la tâche peut être exécutée sur ces plates-formes. Pour vérifier si ppc64le et s390x sont listés dans la section "Platforms" des informations sur la tâche, vous pouvez exécuter la commande suivante : tkn hub info task <name>
  • Vous ne pouvez pas utiliser le flux d'images nodejs:14-ubi8-minimal car cela génère les erreurs suivantes :

    STEP 7: RUN /usr/libexec/s2i/assemble
    /bin/sh: /usr/libexec/s2i/assemble: No such file or directory
    subprocess exited with status 127
    subprocess exited with status 127
    error building at STEP "RUN /usr/libexec/s2i/assemble": exit status 127
    time="2021-11-04T13:05:26Z" level=error msg="exit status 127"
    Copy to Clipboard Toggle word wrap
3.1.7.4. Problèmes corrigés
  • La commande tkn hub est désormais prise en charge sur les systèmes IBM Power, IBM Z et LinuxONE.
  • Avant cette mise à jour, le terminal n'était pas disponible après que l'utilisateur ait exécuté une commande tkn, et l'exécution du pipeline était terminée, même si retries était spécifié. La spécification d'un délai d'attente dans l'exécution de la tâche ou du pipeline n'avait aucun effet. Cette mise à jour corrige le problème afin que le terminal soit disponible après l'exécution de la commande.
  • Avant cette mise à jour, l'exécution de tkn pipelinerun delete --all supprimait toutes les ressources. Cette mise à jour empêche la suppression des ressources en cours d'exécution.
  • Avant cette mise à jour, l'utilisation de la commande tkn version --component=<component> ne renvoyait pas la version du composant. Cette mise à jour corrige le problème de sorte que cette commande renvoie la version du composant.
  • Avant cette mise à jour, lorsque vous utilisiez la commande tkn pr logs, elle affichait les journaux de sortie des pipelines dans le mauvais ordre des tâches. Cette mise à jour résout le problème de sorte que les journaux de PipelineRuns sont répertoriés dans l'ordre d'exécution approprié de TaskRun.
  • Avant cette mise à jour, la modification de la spécification d'un pipeline en cours d'exécution pouvait empêcher l'exécution du pipeline de s'arrêter lorsqu'elle était terminée. Cette mise à jour corrige le problème en ne récupérant la définition qu'une seule fois et en utilisant ensuite la spécification stockée dans l'état pour la vérification. Cette modification réduit la probabilité d'une condition de course lorsqu'un PipelineRun ou un TaskRun fait référence à un Pipeline ou un Task qui change pendant l'exécution.
  • When les valeurs d'expression peuvent désormais contenir des références à des paramètres de type tableau, comme par exemple : values: [$(params.arrayParam[*])].
3.1.7.5.1. Problèmes connus
  • Après la mise à niveau vers Red Hat OpenShift Pipelines 1.6.1 à partir d'une version plus ancienne, OpenShift Pipelines peut entrer dans un état incohérent dans lequel vous ne pouvez pas effectuer d'opérations (créer/supprimer/appliquer) sur les ressources Tekton (tâches et pipelines). Par exemple, lors de la suppression d'une ressource, vous pouvez rencontrer l'erreur suivante :

    Error from server (InternalError): Internal error occurred: failed calling webhook "validation.webhook.pipeline.tekton.dev": Post "https://tekton-pipelines-webhook.openshift-pipelines.svc:443/resource-validation?timeout=10s": service "tekton-pipelines-webhook" not found.
    Copy to Clipboard Toggle word wrap
3.1.7.5.2. Problèmes corrigés
  • La variable d'environnement SSL_CERT_DIR (/tekton-custom-certs) définie par Red Hat OpenShift Pipelines ne remplacera pas les répertoires système par défaut suivants par des fichiers de certificats :

    • /etc/pki/tls/certs
    • /etc/ssl/certs
    • /system/etc/security/cacerts
  • L'Horizontal Pod Autoscaler peut gérer le nombre de répliques des déploiements contrôlés par Red Hat OpenShift Pipelines Operator. À partir de cette version, si le compte est modifié par un utilisateur final ou un agent sur le cluster, Red Hat OpenShift Pipelines Operator ne réinitialisera pas le compte de répliques des déploiements qu'il gère. Cependant, les répliques seront réinitialisées lorsque vous mettrez à niveau le Red Hat OpenShift Pipelines Operator.
  • Le pod qui sert le CLI tkn sera désormais programmé sur des nœuds, en fonction du sélecteur de nœuds et des limites de tolérance spécifiées dans la ressource personnalisée TektonConfig.
3.1.7.6.1. Problèmes connus
  • Lorsque vous créez un nouveau projet, la création du compte de service pipeline est retardée, et la suppression des tâches de cluster et des modèles de pipeline existants prend plus de 10 minutes.
3.1.7.6.2. Problèmes corrigés
  • Avant cette mise à jour, plusieurs instances d'ensembles d'installation Tekton étaient créées pour un pipeline après la mise à niveau vers Red Hat OpenShift Pipelines 1.6.1 à partir d'une version plus ancienne. Avec cette mise à jour, l'opérateur s'assure qu'une seule instance de chaque type de TektonInstallerSet existe après une mise à niveau.
  • Avant cette mise à jour, tous les réconciliateurs de l'Opérateur utilisaient la version du composant pour décider de la recréation des ressources lors d'une mise à niveau vers Red Hat OpenShift Pipelines 1.6.1 à partir d'une version plus ancienne. Par conséquent, les ressources dont la version des composants n'a pas changé lors de la mise à niveau n'ont pas été recréées. Avec cette mise à jour, l'opérateur utilise la version de l'opérateur au lieu de la version du composant pour décider de la recréation des ressources lors d'une mise à niveau.
  • Avant cette mise à jour, le service pipelines webhook était absent du cluster après une mise à jour. Cela était dû à un blocage de la mise à jour sur les cartes de configuration. Avec cette mise à jour, un mécanisme est ajouté pour désactiver la validation du webhook si les cartes de configuration sont absentes dans le cluster. Par conséquent, le service pipelines webhook persiste dans le cluster après une mise à jour.
  • Avant cette mise à jour, les tâches cron pour l'élagage automatique étaient recréées après tout changement de configuration de l'espace de noms. Avec cette mise à jour, les tâches cron pour l'élagage automatique ne sont recréées que s'il y a un changement d'annotation pertinent dans l'espace de noms.
  • La version amont de Tekton Pipelines est révisée en v0.28.3, qui comporte les corrections suivantes :

    • Correction des objets PipelineRun ou TaskRun pour permettre la propagation des étiquettes ou des annotations.
    • Pour les paramètres implicites :

      • Ne pas appliquer les paramètres de PipelineSpec à l'objet TaskRefs.
      • Désactive le comportement param implicite pour les objets Pipeline.
3.1.7.7.1. Problèmes corrigés
  • Avant cette mise à jour, l'Opérateur Red Hat OpenShift Pipelines installait des politiques de sécurité de pods à partir de composants tels que Pipelines et Triggers. Cependant, les politiques de sécurité de pods livrées dans le cadre des composants ont été dépréciées dans une version antérieure. Avec cette mise à jour, l'opérateur arrête d'installer des politiques de sécurité de pods à partir de composants. Par conséquent, les chemins de mise à niveau suivants sont concernés :

    • La mise à jour d'OpenShift Pipelines 1.6.1 ou 1.6.2 vers OpenShift Pipelines 1.6.3 supprime les politiques de sécurité des pods, y compris celles des composants Pipelines et Triggers.
    • La mise à niveau d'OpenShift Pipelines 1.5.x vers 1.6.3 conserve les politiques de sécurité des pods installées à partir des composants. En tant qu'administrateur de cluster, vous pouvez les supprimer manuellement.

      Note

      Lorsque vous mettez à niveau vers des versions ultérieures, l'Opérateur Red Hat OpenShift Pipelines supprimera automatiquement toutes les politiques de sécurité de pods obsolètes.

  • Avant cette mise à jour, seuls les administrateurs de cluster pouvaient accéder aux métriques de pipeline dans la console OpenShift Container Platform. Avec cette mise à jour, les utilisateurs ayant d'autres rôles dans le cluster peuvent également accéder aux métriques du pipeline.
  • Avant cette mise à jour, des problèmes de contrôle d'accès basé sur les rôles (RBAC) avec l'opérateur OpenShift Pipelines causaient des problèmes de mise à niveau ou d'installation de composants. Cette mise à jour améliore la fiabilité et la cohérence de l'installation de divers composants Red Hat OpenShift Pipelines.
  • Avant cette mise à jour, le fait de définir les champs clusterTasks et pipelineTemplates sur false dans le CR TektonConfig ralentissait la suppression des tâches en grappe et des modèles de pipeline. Cette mise à jour améliore la vitesse de gestion du cycle de vie des ressources Tekton telles que les tâches de cluster et les modèles de pipeline.
3.1.7.8.1. Problèmes connus
  • Après la mise à niveau de Red Hat OpenShift Pipelines 1.5.2 vers 1.6.4, l'accès aux routes d'écoute d'événements renvoie une erreur 503.

    Solution : Modifiez le port cible dans le fichier YAML pour la route de l'écouteur d'événements.

    1. Extraire le nom de la route pour l'espace de noms concerné.

      $ oc get route -n <namespace>
      Copy to Clipboard Toggle word wrap
    2. Editer l'itinéraire pour modifier la valeur du champ targetPort.

      $ oc edit route -n <namespace> <el-route_name>
      Copy to Clipboard Toggle word wrap

      Exemple : Route d'écoute d'événements existante

      ...
      spec:
        host: el-event-listener-q8c3w5-test-upgrade1.apps.ve49aws.aws.ospqa.com
        port:
          targetPort: 8000
        to:
          kind: Service
          name: el-event-listener-q8c3w5
          weight: 100
        wildcardPolicy: None
      ...
      Copy to Clipboard Toggle word wrap

      Exemple : Modification de l'itinéraire de l'auditeur d'événements

      ...
      spec:
        host: el-event-listener-q8c3w5-test-upgrade1.apps.ve49aws.aws.ospqa.com
        port:
          targetPort: http-listener
        to:
          kind: Service
          name: el-event-listener-q8c3w5
          weight: 100
        wildcardPolicy: None
      ...
      Copy to Clipboard Toggle word wrap

3.1.7.8.2. Problèmes corrigés
  • Avant cette mise à jour, l'opérateur échouait lors de la création de ressources RBAC si un espace de noms était dans l'état Terminating. Avec cette mise à jour, l'opérateur ignore les espaces de noms dans l'état Terminating et crée les ressources RBAC.
  • Avant cette mise à jour, les tâches échouaient ou redémarraient en raison de l'absence d'annotation spécifiant la version du contrôleur Tekton associé. Avec cette mise à jour, l'inclusion des annotations appropriées est automatisée et les tâches s'exécutent sans échec ni redémarrage.

Red Hat OpenShift Pipelines General Availability (GA) 1.5 est désormais disponible sur OpenShift Container Platform 4.8.

3.1.8.1. Matrice de compatibilité et de soutien

Certaines fonctionnalités de cette version sont actuellement en avant-première technologique. Ces fonctionnalités expérimentales ne sont pas destinées à être utilisées en production.

Dans le tableau, les caractéristiques sont marquées par les statuts suivants :

TP

Avant-première technologique

GA

Disponibilité générale

Notez l'étendue de l'assistance suivante sur le portail client de Red Hat pour ces fonctionnalités :

Expand
Tableau 3.2. Matrice de compatibilité et de soutien
FonctionnalitéVersionStatut de soutien

Pipelines

0.24

GA

CLI

0.19

GA

Catalogue

0.24

GA

Déclencheurs

0.14

TP

Ressources en gazoducs

-

TP

Pour toute question ou commentaire, vous pouvez envoyer un courriel à l'équipe produit à l'adresse pipelines-interest@redhat.com.

3.1.8.2. Nouvelles fonctionnalités

En plus des corrections et des améliorations de la stabilité, les sections suivantes mettent en évidence les nouveautés de Red Hat OpenShift Pipelines 1.5.

  • Les exécutions de pipelines et de tâches seront automatiquement élaguées par une tâche cron dans l'espace de noms cible. La tâche cron utilise la variable d'environnement IMAGE_JOB_PRUNER_TKN pour obtenir la valeur de tkn image. Avec cette amélioration, les champs suivants sont introduits dans la ressource personnalisée TektonConfig:

    ...
    pruner:
      resources:
        - pipelinerun
        - taskrun
      schedule: "*/5 * * * *" # cron schedule
      keep: 2 # delete all keeping n
    ...
    Copy to Clipboard Toggle word wrap
  • Dans OpenShift Container Platform, vous pouvez personnaliser l'installation du composant Tekton Add-ons en modifiant les valeurs des nouveaux paramètres clusterTasks et pipelinesTemplates dans la ressource personnalisée TektonConfig:

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      profile: all
      targetNamespace: openshift-pipelines
      addon:
        params:
        - name: clusterTasks
          value: "true"
        - name: pipelineTemplates
          value: "true"
    ...
    Copy to Clipboard Toggle word wrap

    La personnalisation est possible si vous créez le module complémentaire à l'aide de TektonConfig ou directement à l'aide de Tekton Add-ons. Toutefois, si les paramètres ne sont pas transmis, le contrôleur ajoute des paramètres avec des valeurs par défaut.

    Note
    • Si le module complémentaire est créé à l'aide de la ressource personnalisée TektonConfig et que vous modifiez ultérieurement les valeurs des paramètres dans la ressource personnalisée Addon, les valeurs de la ressource personnalisée TektonConfig remplacent les modifications.
    • Vous ne pouvez définir la valeur du paramètre pipelinesTemplates sur true que si la valeur du paramètre clusterTasks est true.
  • Le paramètre enableMetrics est ajouté à la ressource personnalisée TektonConfig. Vous pouvez l'utiliser pour désactiver le moniteur de service, qui fait partie de Tekton Pipelines pour OpenShift Container Platform.

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      profile: all
      targetNamespace: openshift-pipelines
      pipeline:
        params:
        - name: enableMetrics
          value: "true"
    ...
    Copy to Clipboard Toggle word wrap
  • Les métriques OpenCensus d'Eventlistener, qui capturent les métriques au niveau du processus, sont ajoutées.
  • Les déclencheurs disposent désormais d'un sélecteur d'étiquettes ; vous pouvez configurer les déclencheurs d'un auditeur d'événements à l'aide d'étiquettes.
  • La définition de la ressource personnalisée ClusterInterceptor pour l'enregistrement des intercepteurs a été ajoutée, ce qui vous permet d'enregistrer de nouveaux types Interceptor que vous pouvez ajouter. En outre, les modifications suivantes ont été apportées :

    • Dans les spécifications du déclencheur, vous pouvez configurer les intercepteurs à l'aide d'une nouvelle API qui comprend un champ ref pour faire référence à un intercepteur de cluster. En outre, vous pouvez utiliser le champ params pour ajouter des paramètres qui seront transmis aux intercepteurs pour traitement.
    • Les intercepteurs intégrés CEL, GitHub, GitLab et BitBucket ont été migrés. Ils sont mis en œuvre à l'aide de la nouvelle définition de ressource personnalisée ClusterInterceptor.
    • Les intercepteurs de base sont migrés vers le nouveau format et tous les nouveaux déclencheurs créés à l'aide de l'ancienne syntaxe passent automatiquement à la nouvelle syntaxe basée sur ref ou params.
  • Pour désactiver le préfixe du nom de la tâche ou de l'étape lors de l'affichage des journaux, utilisez l'option --prefix pour les commandes log.
  • Pour afficher la version d'un composant spécifique, utilisez le nouvel indicateur --component dans la commande tkn version.
  • La commande tkn hub check-upgrade a été ajoutée et d'autres commandes ont été révisées pour être basées sur la version du pipeline. En outre, les noms des catalogues sont affichés dans la sortie de la commande search.
  • La prise en charge des espaces de travail optionnels a été ajoutée à la commande start.
  • Si les plugins ne sont pas présents dans le répertoire plugins, ils sont recherchés dans le chemin courant.
  • La commande tkn start [task | clustertask | pipeline] démarre de manière interactive et demande la valeur params, même si les paramètres par défaut sont spécifiés. Pour arrêter les invites interactives, passez le drapeau --use-param-defaults au moment de l'invocation de la commande. Par exemple :

    $ 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/pipelines-tutorial/pipelines-vote-api \
        --use-param-defaults
    Copy to Clipboard Toggle word wrap
  • Le champ version est ajouté dans la commande tkn task describe.
  • L'option permettant de sélectionner automatiquement des ressources telles que TriggerTemplate, ou TriggerBinding, ou ClusterTriggerBinding, ou Eventlistener, est ajoutée dans la commande describe, si une seule est présente.
  • Dans la commande tkn pr describe, une section pour les tâches ignorées a été ajoutée.
  • La prise en charge du site tkn clustertask logs a été ajoutée.
  • La fusion YAML et la variable de config.yaml sont supprimées. En outre, le fichier release.yaml peut désormais être utilisé plus facilement par des outils tels que kustomize et ytt.
  • La prise en charge des noms de ressources contenant le caractère point (".") a été ajoutée.
  • Le tableau hostAliases de la spécification PodTemplate est ajouté à l'annulation de la résolution des noms d'hôtes au niveau du pod. Il est obtenu en modifiant le fichier /etc/hosts.
  • Une variable $(tasks.status) est introduite pour accéder à l'état d'exécution global des tâches.
  • Un point d'entrée binaire pour Windows a été ajouté.
3.1.8.3. Fonctionnalités obsolètes
  • Dans les expressions when, la prise en charge des champs écrits en PascalCase est supprimée. Les expressions when ne prennent en charge que les champs écrits en minuscules.

    Note

    Si vous avez appliqué un pipeline avec des expressions when dans Tekton Pipelines v0.16 (Operator v1.2.x), vous devez le réappliquer.

  • Lorsque vous mettez à niveau Red Hat OpenShift Pipelines Operator vers v1.5, les tâches de cluster openshift-client et openshift-client-v-1-5-0 ont le paramètre SCRIPT. Cependant, le paramètre ARGS et la ressource git sont supprimés de la spécification de la tâche de cluster openshift-client. Il s'agit d'un changement radical, et seules les tâches de cluster qui n'ont pas de version spécifique dans le champ name de la ressource ClusterTask sont mises à niveau de manière transparente.

    Pour éviter que le pipeline ne s'interrompe, utilisez le paramètre SCRIPT après la mise à niveau, car il déplace les valeurs précédemment spécifiées dans le paramètre ARGS vers le paramètre SCRIPT de la tâche de cluster. Par exemple :

    ...
    - name: deploy
      params:
      - name: SCRIPT
        value: oc rollout status <deployment-name>
      runAfter:
        - build
      taskRef:
        kind: ClusterTask
        name: openshift-client
    ...
    Copy to Clipboard Toggle word wrap
  • Lorsque vous mettez à niveau Red Hat OpenShift Pipelines Operator v1.4 vers v1.5, les noms de profil dans lesquels la ressource personnalisée TektonConfig est installée changent désormais.

    Expand
    Tableau 3.3. Profils pour TektonConfig ressource personnalisée
    Profils dans les pipelines 1.5Profil correspondant dans Pipelines 1.4Installation des composants Tekton

    Tous (default profile)

    Tous (default profile)

    Pipelines, déclencheurs, modules complémentaires

    De base

    Défaut

    Pipelines, déclencheurs

    Lite

    De base

    Pipelines

    Note

    Si vous avez utilisé profile: all dans l'instance config de la ressource personnalisée TektonConfig, aucune modification n'est nécessaire dans la spécification de la ressource.

    Toutefois, si l'opérateur installé est dans le profil Default ou Basic avant la mise à niveau, vous devez modifier l'instance config de la ressource personnalisée TektonConfig après la mise à niveau. Par exemple, si la configuration était profile: basic avant la mise à niveau, assurez-vous qu'elle est profile: lite après la mise à niveau vers Pipelines 1.5.

  • Les champs disable-home-env-overwrite et disable-working-dir-overwrite sont désormais obsolètes et seront supprimés dans une prochaine version. Pour cette version, la valeur par défaut de ces drapeaux est fixée à true pour des raisons de compatibilité ascendante.

    Note

    Dans la prochaine version (Red Hat OpenShift Pipelines 1.6), la variable d'environnement HOME ne sera pas automatiquement définie à /tekton/home, et le répertoire de travail par défaut ne sera pas défini à /workspace pour les exécutions de tâches. Ces valeurs par défaut entrent en conflit avec toute valeur définie par l'image Dockerfile de l'étape.

  • Les champs ServiceType et podTemplate sont supprimés de la spécification EventListener.
  • Le compte de service du contrôleur ne demande plus l'autorisation de lister et de surveiller les espaces de noms à l'échelle du cluster.
  • Le statut de la ressource EventListener est assorti d'une nouvelle condition appelée Ready.

    Note

    À l'avenir, les autres conditions d'état de la ressource EventListener seront supprimées au profit de la condition d'état Ready.

  • Les champs eventListener et namespace de la réponse EventListener sont obsolètes. Utilisez plutôt le champ eventListenerUID.
  • Le champ replicas est obsolète dans la spécification EventListener. Le champ spec.replicas est déplacé vers spec.resources.kubernetesResource.replicas dans la spécification KubernetesResource.

    Note

    Le champ replicas sera supprimé dans une prochaine version.

  • L'ancienne méthode de configuration des intercepteurs de base est obsolète. Cependant, elle continue de fonctionner jusqu'à ce qu'elle soit supprimée dans une prochaine version. À la place, les intercepteurs d'une ressource Trigger sont désormais configurés à l'aide d'une nouvelle syntaxe basée sur ref et params. Le webhook par défaut qui en résulte passe automatiquement de l'ancienne syntaxe à la nouvelle syntaxe pour les nouveaux déclencheurs.
  • Utilisez rbac.authorization.k8s.io/v1 au lieu de l'ancien rbac.authorization.k8s.io/v1beta1 pour la ressource ClusterRoleBinding.
  • Dans les rôles de grappe, l'accès en écriture à l'échelle de la grappe à des ressources telles que serviceaccounts, secrets, configmaps, et limitranges est supprimé. En outre, l'accès aux ressources telles que deployments, statefulsets, et deployment/finalizers est supprimé pour l'ensemble de la grappe.
  • La définition de la ressource personnalisée image dans le groupe caching.internal.knative.dev n'est plus utilisée par Tekton et est exclue de cette version.
3.1.8.4. Problèmes connus
  • La tâche cluster git-cli est construite à partir de l'image de base alpine/git, qui attend /root comme répertoire personnel de l'utilisateur. Cependant, cela n'est pas explicitement défini dans la tâche de cluster git-cli.

    Dans Tekton, le répertoire d'accueil par défaut est remplacé par /tekton/home à chaque étape d'une tâche, sauf indication contraire. Cet écrasement de la variable d'environnement $HOME de l'image de base entraîne l'échec de la tâche de cluster git-cli.

    Ce problème devrait être corrigé dans les prochaines versions. Pour Red Hat OpenShift Pipelines 1.5 et les versions antérieures, vous pouvez use any one of the following workarounds pour éviter l'échec de la tâche de cluster git-cli:

    • Définissez la variable d'environnement $HOME dans les étapes, afin qu'elle ne soit pas écrasée.

      1. [OPTIONNEL] Si vous avez installé Red Hat OpenShift Pipelines à l'aide de l'Opérateur, clonez la tâche de cluster git-cli dans une tâche séparée. Cette approche garantit que l'Opérateur n'écrase pas les modifications apportées à la tâche de cluster.
      2. Exécutez la commande oc edit clustertasks git-cli.
      3. Ajouter la variable d'environnement HOME au YAML de l'étape :

        ...
        steps:
          - name: git
            env:
            - name: HOME
              value: /root
            image: $(params.BASE_IMAGE)
            workingDir: $(workspaces.source.path)
        ...
        Copy to Clipboard Toggle word wrap
        Avertissement

        Pour Red Hat OpenShift Pipelines installé par l'Opérateur, si vous ne clonez pas la tâche de cluster git-cli dans une tâche séparée avant de modifier la variable d'environnement HOME, les modifications sont écrasées lors de la réconciliation de l'Opérateur.

    • Désactive l'écrasement de la variable d'environnement HOME dans la carte de configuration feature-flags.

      1. Exécutez la commande oc edit -n openshift-pipelines configmap feature-flags.
      2. Fixer la valeur de l'indicateur disable-home-env-overwrite à true.

        Avertissement
        • Si vous avez installé Red Hat OpenShift Pipelines à l'aide de l'Opérateur, les modifications sont écrasées lors de la réconciliation de l'Opérateur.
        • La modification de la valeur par défaut de l'indicateur disable-home-env-overwrite peut perturber d'autres tâches et des tâches en grappe, car elle modifie le comportement par défaut de toutes les tâches.
    • Utilisez un compte de service différent pour la tâche de cluster git-cli, car l'écrasement de la variable d'environnement HOME se produit lorsque le compte de service par défaut pour les pipelines est utilisé.

      1. Créer un nouveau compte de service.
      2. Liez votre secret Git au compte de service que vous venez de créer.
      3. Utiliser le compte de service lors de l'exécution d'une tâche ou d'un pipeline.
  • Sur IBM Power Systems, IBM Z et LinuxONE, la tâche s2i-dotnet cluster et la commande tkn hub ne sont pas prises en charge.
  • Lorsque vous exécutez des tâches de cluster Maven et Jib-Maven, l'image de conteneur par défaut n'est prise en charge que sur l'architecture Intel (x86). Par conséquent, les tâches échoueront sur les clusters IBM Power Systems (ppc64le), IBM Z et LinuxONE (s390x). Pour contourner ce problème, vous pouvez spécifier une image personnalisée en définissant la valeur du paramètre MAVEN_IMAGE sur maven:3.6.3-adoptopenjdk-11.
3.1.8.5. Problèmes corrigés
  • Les expressions when dans les tâches dag ne sont pas autorisées à spécifier la variable de contexte accédant à l'état d'exécution ($(tasks.<pipelineTask>.status)) d'une autre tâche.
  • Utilisez les UID des propriétaires plutôt que les noms des propriétaires, car cela permet d'éviter les conditions de course créées par la suppression d'un PVC volumeClaimTemplate, dans les situations où une ressource PipelineRun est rapidement supprimée puis recréée.
  • Un nouveau fichier Docker est ajouté pour pullrequest-init pour l'image build-base déclenchée par des utilisateurs non root.
  • Lorsqu'un pipeline ou une tâche est exécuté avec l'option -f et que le param dans sa définition n'a pas de type défini, une erreur de validation est générée au lieu de l'échec silencieux du pipeline ou de l'exécution de la tâche.
  • Pour les commandes tkn start [task | pipeline | clustertask], la description de l'indicateur --workspace est désormais cohérente.
  • Lors de l'analyse des paramètres, si un tableau vide est rencontré, l'aide interactive correspondante est affichée sous la forme d'une chaîne vide.

Red Hat OpenShift Pipelines General Availability (GA) 1.4 est désormais disponible sur OpenShift Container Platform 4.7.

Note

En plus des canaux stable et preview Operator, Red Hat OpenShift Pipelines Operator 1.4.0 est livré avec les canaux dépréciés ocp-4.6, ocp-4.5, et ocp-4.4. Ces canaux dépréciés et leur prise en charge seront supprimés dans la prochaine version de Red Hat OpenShift Pipelines.

3.1.9.1. Matrice de compatibilité et de soutien

Certaines fonctionnalités de cette version sont actuellement en avant-première technologique. Ces fonctionnalités expérimentales ne sont pas destinées à être utilisées en production.

Dans le tableau, les caractéristiques sont marquées par les statuts suivants :

TP

Avant-première technologique

GA

Disponibilité générale

Notez l'étendue de l'assistance suivante sur le portail client de Red Hat pour ces fonctionnalités :

Expand
Tableau 3.4. Matrice de compatibilité et de soutien
FonctionnalitéVersionStatut de soutien

Pipelines

0.22

GA

CLI

0.17

GA

Catalogue

0.22

GA

Déclencheurs

0.12

TP

Ressources en gazoducs

-

TP

Pour toute question ou commentaire, vous pouvez envoyer un courriel à l'équipe produit à l'adresse pipelines-interest@redhat.com.

3.1.9.2. Nouvelles fonctionnalités

En plus des corrections et des améliorations de la stabilité, les sections suivantes mettent en évidence les nouveautés de Red Hat OpenShift Pipelines 1.4.

  • Les tâches personnalisées présentent les améliorations suivantes :

    • Les résultats du pipeline peuvent désormais faire référence aux résultats produits par les tâches personnalisées.
    • Les tâches personnalisées peuvent désormais utiliser des espaces de travail, des comptes de service et des modèles de pods pour créer des tâches personnalisées plus complexes.
  • La tâche finally présente les améliorations suivantes :

    • Les expressions when sont prises en charge dans les tâches finally, ce qui permet une exécution gardée efficace et une réutilisation améliorée des tâches.
    • Une tâche finally peut être configurée pour consommer les résultats de n'importe quelle tâche au sein du même pipeline.

      Note

      La prise en charge des expressions when et des tâches finally n'est pas disponible dans la console Web d'OpenShift Container Platform 4.7.

  • La prise en charge de plusieurs secrets du type dockercfg ou dockerconfigjson a été ajoutée pour l'authentification au moment de l'exécution.
  • La fonctionnalité de prise en charge de la vérification éparse avec la tâche git-clone a été ajoutée. Cela vous permet de ne cloner qu'un sous-ensemble du référentiel en tant que copie locale et de limiter la taille des référentiels clonés.
  • Vous pouvez créer des exécutions de pipeline dans un état d'attente sans les démarrer. Dans les clusters fortement sollicités, cela permet aux opérateurs de contrôler l'heure de démarrage des opérations de pipeline.
  • Veillez à définir manuellement la variable d'environnement SYSTEM_NAMESPACE pour le contrôleur ; elle était auparavant définie par défaut.
  • Un utilisateur non-root est maintenant ajouté à l'image build-base de pipelines afin que git-init puisse cloner des dépôts en tant qu'utilisateur non-root.
  • La prise en charge de la validation des dépendances entre les ressources résolues avant le début de l'exécution d'un pipeline a été ajoutée. Toutes les variables de résultat du pipeline doivent être valides, et les espaces de travail optionnels d'un pipeline ne peuvent être transmis qu'aux tâches qui s'y attendent pour que le pipeline commence à fonctionner.
  • Le contrôleur et le webhook s'exécutent en tant que groupe non root, et leurs capacités superflues ont été supprimées pour les rendre plus sûrs.
  • Vous pouvez utiliser la commande tkn pr logs pour voir les flux de journaux pour les exécutions de tâches répétées.
  • Vous pouvez utiliser l'option --clustertask de la commande tkn tr delete pour supprimer toutes les exécutions de tâches associées à une tâche de cluster particulière.
  • La possibilité d'utiliser le service Knative avec la ressource EventListener est ajoutée par l'introduction d'un nouveau champ customResource.
  • Un message d'erreur s'affiche lorsque la charge utile d'un événement n'utilise pas le format JSON.
  • Les intercepteurs de contrôle de source tels que GitLab, BitBucket et GitHub utilisent désormais la nouvelle interface de type InterceptorRequest ou InterceptorResponse.
  • Une nouvelle fonction CEL marshalJSON est implémentée pour vous permettre d'encoder un objet JSON ou un tableau en une chaîne de caractères.
  • Un gestionnaire HTTP pour servir le CEL et les intercepteurs centraux de contrôle de source a été ajouté. Il regroupe quatre intercepteurs principaux dans un seul serveur HTTP qui est déployé dans l'espace de noms tekton-pipelines. L'objet EventListener transmet les événements à l'intercepteur via le serveur HTTP. Chaque intercepteur est disponible sur un chemin différent. Par exemple, l'intercepteur CEL est disponible sur le chemin /cel.
  • La contrainte de contexte de sécurité (SCC) pipelines-scc est utilisée avec le compte de service par défaut pipeline pour les pipelines. Ce nouveau compte de service est similaire à anyuid, mais avec une différence mineure telle que définie dans le YAML pour SCC de OpenShift Container Platform 4.7 :

    fsGroup:
      type: MustRunAs
    Copy to Clipboard Toggle word wrap
3.1.9.3. Fonctionnalités obsolètes
  • Le sous-type build-gcs dans le stockage des ressources du pipeline et l'image gcs-fetcher ne sont pas pris en charge.
  • Dans le champ taskRun des tâches en grappe, l'étiquette tekton.dev/task est supprimée.
  • Pour les webhooks, la valeur v1beta1 correspondant au champ admissionReviewVersions est supprimée.
  • L'image d'aide creds-init pour la construction et le déploiement est supprimée.
  • Dans la spécification et la liaison des déclencheurs, le champ obsolète template.name est supprimé au profit de template.ref. Vous devez mettre à jour toutes les définitions de eventListener pour utiliser le champ ref.

    Note

    La mise à niveau d'OpenShift Pipelines 1.3.x et des versions antérieures vers OpenShift Pipelines 1.4.0 interrompt les auditeurs d'événements en raison de l'indisponibilité du champ template.name. Dans ce cas, utilisez OpenShift Pipelines 1.4.1 pour bénéficier du champ template.name restauré.

  • Pour les ressources/objets personnalisés EventListener, les champs PodTemplate et ServiceType sont obsolètes au profit de Resource.
  • Le style de spécification "embedded bindings", obsolète, a été supprimé.
  • Le champ spec est supprimé du champ triggerSpecBinding.
  • La représentation de l'ID de l'événement passe d'une chaîne aléatoire de cinq caractères à un UUID.
3.1.9.4. Problèmes connus
  • Sur le site Developer, les fonctionnalités de métriques et de déclencheurs de pipeline ne sont disponibles que sur OpenShift Container Platform 4.7.6 ou les versions ultérieures.
  • Sur les systèmes IBM Power, IBM Z et LinuxONE, la commande tkn hub n'est pas prise en charge.
  • Lorsque vous exécutez les tâches Maven et Jib Maven sur des clusters IBM Power Systems (ppc64le), IBM Z et LinuxONE (s390x), définissez la valeur du paramètre MAVEN_IMAGE sur maven:3.6.3-adoptopenjdk-11.
  • Les déclencheurs génèrent une erreur résultant d'une mauvaise gestion du format JSON, si vous avez la configuration suivante dans la liaison du déclencheur :

    params:
      - name: github_json
        value: $(body)
    Copy to Clipboard Toggle word wrap

    Pour résoudre le problème :

    • Si vous utilisez les déclencheurs v0.11.0 et plus, utilisez la fonction marshalJSON CEL, qui prend un objet ou un tableau JSON et renvoie l'encodage JSON de cet objet ou de ce tableau sous la forme d'une chaîne.
    • Si vous utilisez une version plus ancienne des déclencheurs, ajoutez l'annotation suivante dans le modèle de déclencheur :

      annotations:
        triggers.tekton.dev/old-escape-quotes: "true"
      Copy to Clipboard Toggle word wrap
  • Lors de la mise à jour d'OpenShift Pipelines 1.3.x vers 1.4.x, vous devez recréer les routes.
3.1.9.5. Problèmes corrigés
  • Auparavant, l'étiquette tekton.dev/task avait été supprimée de l'exécution des tâches en grappe et l'étiquette tekton.dev/clusterTask avait été introduite. Les problèmes résultant de ce changement sont résolus en corrigeant les commandes clustertask describe et delete. De plus, la fonction lastrun pour les tâches est modifiée, afin de résoudre le problème de l'étiquette tekton.dev/task appliquée aux tâches et aux tâches en grappe dans les anciennes versions des pipelines.
  • Lors d'une opération interactive tkn pipeline start pipelinename, un PipelineResource est créé de manière interactive. La commande tkn p start imprime l'état de la ressource si l'état de la ressource n'est pas nil.
  • Auparavant, l'étiquette tekton.dev/task=name était supprimée des exécutions de tâches créées à partir de tâches en grappe. Ce correctif modifie la commande tkn clustertask start avec l'indicateur --last pour vérifier la présence de l'étiquette tekton.dev/task=name dans les exécutions de tâches créées.
  • Lorsqu'une tâche utilise une spécification de tâche en ligne, l'exécution de la tâche correspondante est désormais intégrée dans le pipeline lorsque vous exécutez la commande tkn pipeline describe, et le nom de la tâche est renvoyé comme étant intégré.
  • La commande tkn version permet d'afficher la version de l'outil CLI Tekton installé, sans kubeConfiguration namespace configuré ni accès à un cluster.
  • Si un argument est inattendu ou si plusieurs arguments sont utilisés, la commande tkn completion génère une erreur.
  • Auparavant, les exécutions de pipeline avec les tâches finally imbriquées dans une spécification de pipeline perdaient ces tâches finally, lorsqu'elles étaient converties en version v1alpha1 et restaurées en version v1beta1. Cette erreur survenant lors de la conversion a été corrigée afin d'éviter toute perte potentielle de données. Les exécutions de pipeline avec les tâches finally imbriquées dans une spécification de pipeline sont désormais sérialisées et stockées sur la version alpha, pour être désérialisées ultérieurement.
  • Auparavant, il y avait une erreur dans la génération de pods lorsqu'un compte de service avait le champ secrets comme {}. L'exécution de la tâche échouait avec CouldntGetTask parce que la requête GET avec un nom secret vide renvoyait une erreur, indiquant que le nom de la ressource pouvait ne pas être vide. Ce problème est corrigé en évitant d'utiliser un nom secret vide dans la requête GET kubeclient.
  • Les pipelines avec les versions de l'API v1beta1 peuvent maintenant être demandés avec la version v1alpha1, sans perdre les tâches finally. L'application de la version v1alpha1 renvoyée stockera la ressource en tant que v1beta1, la section finally étant rétablie dans son état d'origine.
  • Auparavant, un champ selfLink non défini dans le contrôleur provoquait une erreur dans les clusters Kubernetes v1.20. Comme solution temporaire, le champ source CloudEvent est défini à une valeur qui correspond à l'URI source actuel, sans la valeur du champ selfLink auto-remplie.
  • Auparavant, un nom secret comportant des points, tel que gcr.io, entraînait l'échec de la création d'une exécution de tâche. Cela était dû au fait que le nom secret était utilisé en interne dans le cadre d'un nom de montage de volume. Le nom de montage du volume est conforme à l'étiquette DNS RFC1123 et interdit les points dans le nom. Ce problème est résolu en remplaçant le point par un tiret, ce qui permet d'obtenir un nom lisible.
  • Les variables contextuelles sont désormais validées dans les tâches finally.
  • Auparavant, lorsque l'outil de rapprochement des tâches recevait une tâche qui n'avait pas fait l'objet d'une mise à jour de statut contenant le nom du module qu'elle avait créé, l'outil de rapprochement des tâches répertoriait les modules associés à la tâche. Il utilise les étiquettes de l'exécution de la tâche, qui ont été propagées dans le module, pour trouver le module. La modification de ces étiquettes pendant l'exécution de la tâche a eu pour effet que le code n'a pas trouvé le module existant. Par conséquent, des modules en double ont été créés. Ce problème est résolu en modifiant le réconciliateur de tâches pour qu'il n'utilise que l'étiquette tekton.dev/taskRun contrôlée par Tekton lors de la recherche de la nacelle.
  • Auparavant, lorsqu'un pipeline acceptait un espace de travail optionnel et le transmettait à une tâche du pipeline, l'outil de réconciliation de l'exécution du pipeline s'arrêtait avec une erreur si l'espace de travail n'était pas fourni, même si une liaison d'espace de travail manquante est un état valide pour un espace de travail optionnel. Ce problème est corrigé en s'assurant que le réconciliateur d'exécution de pipeline n'échoue pas à créer une exécution de tâche, même si un espace de travail optionnel n'est pas fourni.
  • L'ordre trié des statuts d'étape correspond à l'ordre des conteneurs d'étape.
  • Auparavant, le statut d'exécution de la tâche était défini sur unknown lorsqu'un module rencontrait la raison CreateContainerConfigError, ce qui signifiait que la tâche et le pipeline s'exécutaient jusqu'à ce que le module s'arrête. Ce problème est résolu en définissant le statut d'exécution de la tâche sur false, de sorte que la tâche soit considérée comme ayant échoué lorsque le module rencontre la raison CreateContainerConfigError.
  • Auparavant, les résultats du pipeline étaient résolus lors de la première réconciliation, après l'achèvement de l'exécution du pipeline. Cela pouvait faire échouer la résolution et entraîner l'écrasement de la condition Succeeded de l'exécution du pipeline. En conséquence, les informations sur l'état final étaient perdues, ce qui risquait de perturber les services qui surveillaient les conditions de l'exécution du pipeline. Ce problème est résolu en déplaçant la résolution des résultats du pipeline à la fin d'une réconciliation, lorsque le pipeline est placé dans une condition Succeeded ou True.
  • La variable d'état d'exécution est désormais validée. Cela évite de valider les résultats de la tâche tout en validant les variables de contexte pour accéder à l'état d'exécution.
  • Auparavant, un résultat de pipeline contenant une variable non valide était ajouté à l'exécution du pipeline avec l'expression littérale de la variable intacte. Il était donc difficile d'évaluer si les résultats étaient correctement remplis. Ce problème est résolu en filtrant les résultats de l'exécution de la chaîne de production qui font référence à des exécutions de tâches qui ont échoué. Désormais, un résultat de pipeline qui contient une variable non valide ne sera pas du tout émis par le pipeline.
  • La commande tkn eventlistener describe a été corrigée pour éviter les plantages en l'absence de modèle. Elle affiche également les détails des références des déclencheurs.
  • Les mises à niveau d'OpenShift Pipelines 1.3.x et des versions antérieures vers OpenShift Pipelines 1.4.0 interrompent les auditeurs d'événements en raison de l'indisponibilité de template.name. Dans OpenShift Pipelines 1.4.1, template.name a été restauré pour éviter d'interrompre les auditeurs d'événements dans les déclencheurs.
  • Dans OpenShift Pipelines 1.4.1, la ressource personnalisée ConsoleQuickStart a été mise à jour pour s'aligner sur les capacités et le comportement d'OpenShift Container Platform 4.7.
3.1.10.1. Nouvelles fonctionnalités

Red Hat OpenShift Pipelines Technology Preview (TP) 1.3 est maintenant disponible sur OpenShift Container Platform 4.7. Red Hat OpenShift Pipelines TP 1.3 est mis à jour pour prendre en charge :

  • Tekton Pipelines 0.19.0
  • Tekton tkn CLI 0.15.0
  • Tekton Triggers 0.10.2
  • tâches en grappe basées sur le catalogue Tekton 0.19.0
  • IBM Power Systems sur OpenShift Container Platform 4.7
  • IBM Z et LinuxONE sur OpenShift Container Platform 4.7

En plus des corrections et des améliorations de stabilité, les sections suivantes mettent en évidence les nouveautés de Red Hat OpenShift Pipelines 1.3.

3.1.10.1.1. Pipelines
  • Les tâches qui construisent des images, telles que les tâches S2I et Buildah, émettent désormais une URL de l'image construite qui inclut l'image SHA.
  • Les conditions dans les tâches du pipeline qui font référence à des tâches personnalisées ne sont pas autorisées car la définition des ressources personnalisées (CRD) de Condition a été supprimée.
  • L'expansion des variables est désormais ajoutée dans le CRD Task pour les champs suivants : spec.steps[].imagePullPolicy et spec.sidecar[].imagePullPolicy.
  • Vous pouvez désactiver le mécanisme d'authentification intégré dans Tekton en définissant le drapeau de fonctionnalité disable-creds-init sur true.
  • Résolu lorsque les expressions sont maintenant listées dans les sections Skipped Tasks et Task Runs dans le champ Status de la configuration PipelineRun.
  • La commande git init peut désormais cloner des sous-modules récursifs.
  • L'auteur d'un CR Task peut désormais spécifier un délai pour une étape dans la spécification Task.
  • Vous pouvez maintenant baser l'image du point d'entrée sur l'image distroless/static:nonroot et lui donner un mode pour se copier vers la destination, sans dépendre de la présence de la commande cp dans l'image de base.
  • Vous pouvez désormais utiliser l'indicateur de configuration require-git-ssh-secret-known-hosts pour interdire l'omission d'hôtes connus dans le secret SSH de Git. Lorsque la valeur de l'indicateur est true, vous devez inclure le champ known_host dans le secret SSH de Git. La valeur par défaut de l'indicateur est false.
  • Le concept d'espaces de travail optionnels est désormais introduit. Une tâche ou un pipeline peut déclarer un espace de travail optionnel et modifier conditionnellement son comportement en fonction de sa présence. Une tâche ou un pipeline peut également omettre cet espace de travail, modifiant ainsi le comportement de la tâche ou du pipeline. Les espaces de travail par défaut de l'exécution de la tâche ne sont pas ajoutés à la place d'un espace de travail optionnel omis.
  • L'initialisation des identifiants dans Tekton détecte désormais un identifiant SSH utilisé avec une URL non-SSH, et vice versa dans les ressources du pipeline Git, et enregistre un avertissement dans les conteneurs d'étapes.
  • Le contrôleur d'exécution des tâches émet un avertissement si l'affinité spécifiée par le modèle de pod est remplacée par l'assistant d'affinité.
  • Le réconciliateur d'exécution des tâches enregistre désormais des mesures pour les événements du nuage qui sont émis une fois l'exécution d'une tâche terminée. Cela inclut les tentatives.
3.1.10.1.2. L'interface de programmation des pipelines
  • La prise en charge de --no-headers flag est maintenant ajoutée aux commandes suivantes : tkn condition list,tkn triggerbinding list,tkn eventlistener list,tkn clustertask list, tkn clustertriggerbinding list.
  • Lorsqu'elles sont utilisées ensemble, les options --last ou --use sont prioritaires sur les options --prefix-name et --timeout.
  • La commande tkn eventlistener logs a été ajoutée pour afficher les journaux de EventListener.
  • Les commandes de tekton hub sont désormais intégrées dans le CLI de tkn.
  • L'option --nocolour est désormais remplacée par --no-color.
  • L'indicateur --all-namespaces est ajouté aux commandes suivantes : tkn triggertemplate list, tkn condition list, tkn triggerbinding list, tkn eventlistener list.
3.1.10.1.3. Déclencheurs
  • Vous pouvez maintenant spécifier vos informations sur les ressources dans le modèle EventListener.
  • Il est désormais obligatoire pour les comptes de service EventListener d'avoir les verbes list et watch, en plus du verbe get pour toutes les ressources de déclenchement. Cela vous permet d'utiliser Listers pour récupérer des données des ressources EventListener, Trigger, TriggerBinding, TriggerTemplate et ClusterTriggerBinding. Vous pouvez utiliser cette fonctionnalité pour créer un objet Sink au lieu de spécifier plusieurs informateurs, et faire directement des appels au serveur API.
  • Une nouvelle interface Interceptor a été ajoutée pour prendre en charge les corps d'événements d'entrée immuables. Les intercepteurs peuvent désormais ajouter des données ou des champs à un nouveau champ extensions et ne peuvent pas modifier les corps d'entrée, ce qui les rend immuables. L'intercepteur CEL utilise cette nouvelle interface Interceptor.
  • Un champ namespaceSelector est ajouté à la ressource EventListener. Il permet de spécifier les espaces de noms à partir desquels la ressource EventListener peut récupérer l'objet Trigger pour traiter les événements. Pour utiliser le champ namespaceSelector, le compte de service de la ressource EventListener doit avoir un rôle de cluster.
  • La ressource EventListener prend désormais en charge la connexion sécurisée de bout en bout avec le module eventlistener.
  • The escaping parameters behavior in the TriggerTemplates resource by replacing " with \" is now removed.
  • Un nouveau champ resources, prenant en charge les ressources Kubernetes, est introduit dans le cadre de la spécification EventListener.
  • Une nouvelle fonctionnalité pour l'intercepteur CEL, avec la prise en charge des majuscules et minuscules des chaînes ASCII, a été ajoutée.
  • Vous pouvez intégrer des ressources TriggerBinding en utilisant les champs name et value dans un déclencheur ou un récepteur d'événements.
  • La configuration de PodSecurityPolicy est mise à jour pour fonctionner dans des environnements restreints. Elle garantit que les conteneurs doivent être exécutés en tant que non-root. En outre, le contrôle d'accès basé sur les rôles pour l'utilisation de la politique de sécurité du pod est déplacé de l'échelle du cluster à l'échelle de l'espace de noms. Cela garantit que les déclencheurs ne peuvent pas utiliser d'autres politiques de sécurité de pods qui ne sont pas liées à un espace de noms.
  • La prise en charge des modèles de déclenchement intégrés a été ajoutée. Vous pouvez utiliser le champ name pour faire référence à un modèle incorporé ou incorporer le modèle dans le champ spec.
3.1.10.2. Fonctionnalités obsolètes
  • Les modèles de pipeline qui utilisent les CRD PipelineResources sont désormais obsolètes et seront supprimés dans une prochaine version.
  • Le champ template.name est obsolète en faveur du champ template.ref et sera supprimé dans une prochaine version.
  • L'abréviation -c pour la commande --check a été supprimée. En outre, les drapeaux globaux tkn sont ajoutés à la commande version.
3.1.10.3. Problèmes connus
  • Les superpositions CEL ajoutent des champs à une nouvelle fonction de niveau supérieur extensions, au lieu de modifier le corps de l'événement entrant. Les ressources TriggerBinding peuvent accéder aux valeurs de cette nouvelle fonction extensions à l'aide de la syntaxe $(extensions.<key>). Mettez à jour votre liaison pour utiliser la syntaxe $(extensions.<key>) au lieu de la syntaxe $(body.<overlay-key>).
  • The escaping parameters behavior by replacing " with \" is now removed. If you need to retain the old escaping parameters behavior add the tekton.dev/old-escape-quotes: true" annotation to your TriggerTemplate specification.
  • Vous pouvez intégrer des ressources TriggerBinding en utilisant les champs name et value à l'intérieur d'un déclencheur ou d'un récepteur d'événements. Toutefois, vous ne pouvez pas spécifier les champs name et ref pour une seule liaison. Utilisez le champ ref pour faire référence à une ressource TriggerBinding et le champ name pour les liaisons intégrées.
  • Un intercepteur ne peut pas tenter de référencer une ressource secret en dehors de l'espace de noms d'une ressource EventListener. Vous devez inclure des secrets dans l'espace de noms de la ressource `EventListener`.
  • Dans les déclencheurs 0.9.0 et ultérieurs, si un paramètre TriggerBinding basé sur le corps ou l'en-tête est manquant ou malformé dans la charge utile d'un événement, les valeurs par défaut sont utilisées au lieu d'afficher une erreur.
  • Les tâches et les pipelines créés avec des objets WhenExpression avec Tekton Pipelines 0.16.x doivent être réappliqués pour fixer leurs annotations JSON.
  • Lorsqu'un pipeline accepte un espace de travail optionnel et le donne à une tâche, l'exécution du pipeline se bloque si l'espace de travail n'est pas fourni.
  • Pour utiliser la tâche Buildah cluster dans un environnement déconnecté, assurez-vous que le fichier Docker utilise un flux d'images interne comme image de base, puis utilisez-le de la même manière que n'importe quelle tâche S2I cluster.
3.1.10.4. Problèmes corrigés
  • Les extensions ajoutées par un intercepteur CEL sont transmises aux intercepteurs de webhook en ajoutant le champ Extensions dans le corps de l'événement.
  • Le délai d'inactivité des lecteurs de journaux est désormais configurable à l'aide du champ LogOptions. Toutefois, le comportement par défaut, à savoir un délai d'attente de 10 secondes, est conservé.
  • La commande log ignore l'indicateur --follow lorsque l'exécution d'une tâche ou d'un pipeline est terminée, et lit les journaux disponibles au lieu des journaux en direct.
  • Les références aux ressources Tekton suivantes : EventListener, TriggerBinding, ClusterTriggerBinding, Condition, et TriggerTemplate sont désormais normalisées et rendues cohérentes dans tous les messages destinés aux utilisateurs dans les commandes tkn.
  • Auparavant, si vous lanciez une exécution de tâche ou de pipeline annulée avec les drapeaux --use-taskrun <canceled-task-run-name>, --use-pipelinerun <canceled-pipeline-run-name> ou --last, la nouvelle exécution était annulée. Ce bogue est maintenant corrigé.
  • La commande tkn pr desc a été améliorée afin de garantir qu'elle n'échoue pas en cas d'exécution d'un pipeline avec des conditions.
  • Lorsque vous supprimez une exécution de tâche à l'aide de la commande tkn tr delete avec l'option --task et qu'il existe une tâche de cluster portant le même nom, les exécutions de tâches de la tâche de cluster sont également supprimées. Pour contourner ce problème, filtrez les exécutions de tâches en utilisant le champ TaskRefKind.
  • La commande tkn triggertemplate describe n'affichait qu'une partie de la valeur apiVersion dans la sortie. Par exemple, seul triggers.tekton.dev était affiché au lieu de triggers.tekton.dev/v1alpha1. Ce bogue est maintenant corrigé.
  • Dans certaines conditions, le webhook ne parvenait pas à acquérir un bail et ne fonctionnait pas correctement. Ce bogue est maintenant corrigé.
  • Les pipelines avec des expressions when créés dans la version 0.16.3 peuvent maintenant être exécutés dans la version 0.17.1 et les versions ultérieures. Après une mise à jour, il n'est pas nécessaire de réappliquer les définitions de pipelines créées dans les versions précédentes, car les premières lettres des annotations, qu'elles soient en majuscules ou en minuscules, sont désormais prises en charge.
  • Par défaut, le champ leader-election-ha est maintenant activé pour la haute disponibilité. Lorsque l'indicateur du contrôleur disable-ha est défini sur true, il désactive la prise en charge de la haute disponibilité.
  • Les problèmes de duplication des événements cloud sont désormais résolus. Les événements cloud ne sont désormais envoyés que lorsqu'une condition modifie l'état, la raison ou le message.
  • Lorsqu'un nom de compte de service est absent d'une spécification PipelineRun ou TaskRun, le contrôleur utilise le nom de compte de service de la carte de configuration config-defaults. Si le nom du compte de service est également absent de la carte de configuration config-defaults, le contrôleur lui attribue désormais la valeur default dans la spécification.
  • La validation de la compatibilité avec l'assistant d'affinité est désormais prise en charge lorsque la même revendication de volume persistant est utilisée pour plusieurs espaces de travail, mais avec des sous-chemins différents.
3.1.11.1. Nouvelles fonctionnalités

Red Hat OpenShift Pipelines Technology Preview (TP) 1.2 est maintenant disponible sur OpenShift Container Platform 4.6. Red Hat OpenShift Pipelines TP 1.2 est mis à jour pour prendre en charge :

  • Tekton Pipelines 0.16.3
  • Tekton tkn CLI 0.13.1
  • Tekton Triggers 0.8.1
  • tâches en grappe basées sur le catalogue Tekton 0.16
  • IBM Power Systems sur OpenShift Container Platform 4.6
  • IBM Z et LinuxONE sur OpenShift Container Platform 4.6

En plus des corrections et des améliorations de stabilité, les sections suivantes mettent en évidence les nouveautés de Red Hat OpenShift Pipelines 1.2.

3.1.11.1.1. Pipelines
  • Cette version de Red Hat OpenShift Pipelines ajoute la prise en charge d'une installation déconnectée.

    Note

    Les installations dans des environnements restreints ne sont actuellement pas prises en charge sur les systèmes IBM Power, IBM Z et LinuxONE.

  • Vous pouvez désormais utiliser le champ when, au lieu de la ressource conditions, pour exécuter une tâche uniquement lorsque certains critères sont remplis. Les composants clés des ressources WhenExpression sont Input, Operator et Values. Si toutes les expressions when évaluent True, la tâche est exécutée. Si l'une des expressions when évalue False, la tâche est ignorée.
  • Les statuts des étapes sont désormais mis à jour en cas d'annulation ou de dépassement du délai d'exécution d'une tâche.
  • La prise en charge de Git Large File Storage (LFS) est désormais disponible pour construire l'image de base utilisée par git-init.
  • Vous pouvez désormais utiliser le champ taskSpec pour spécifier des métadonnées, telles que des étiquettes et des annotations, lorsqu'une tâche est intégrée dans un pipeline.
  • Les événements "cloud" sont désormais pris en charge par le pipeline. Les tentatives avec backoff sont désormais activées pour les événements cloud envoyés par la ressource pipeline d'événements cloud.
  • Vous pouvez désormais définir une configuration Workspace par défaut pour tout espace de travail qu'une ressource Task déclare, mais qu'une ressource TaskRun ne fournit pas explicitement.
  • L'interpolation des variables de l'espace de noms est prise en charge pour l'espace de noms PipelineRun et l'espace de noms TaskRun.
  • La validation des objets TaskRun est désormais ajoutée pour vérifier qu'il n'y a pas plus d'un espace de travail de réclamation de volume persistant utilisé lorsqu'une ressource TaskRun est associée à un assistant d'affinité. Si plus d'un espace de travail de réclamation de volume persistant est utilisé, l'exécution de la tâche échoue avec une condition TaskRunValidationFailed. Notez que par défaut, l'assistant Affinity est désactivé dans Red Hat OpenShift Pipelines, vous devrez donc activer l'assistant pour l'utiliser.
3.1.11.1.2. L'interface de programmation des pipelines
  • Les commandes tkn task describe, tkn taskrun describe, tkn clustertask describe, tkn pipeline describe, et tkn pipelinerun describe maintenant :

    • Sélectionne automatiquement les ressources Task, TaskRun, ClusterTask, Pipeline et PipelineRun, respectivement, si une seule d'entre elles est présente.
    • Affichez les résultats des ressources Task, TaskRun, ClusterTask, Pipeline et PipelineRun dans leurs sorties respectives.
    • Afficher les espaces de travail déclarés dans les ressources Task, TaskRun, ClusterTask, Pipeline et PipelineRun dans leurs sorties, respectivement.
  • Vous pouvez désormais utiliser l'option --prefix-name avec la commande tkn clustertask start pour spécifier un préfixe pour le nom d'une exécution de tâche.
  • La commande tkn clustertask start est désormais compatible avec le mode interactif.
  • Vous pouvez désormais spécifier les propriétés PodTemplate prises en charge par les pipelines à l'aide de définitions de fichiers locaux ou distants pour les objets TaskRun et PipelineRun.
  • Vous pouvez maintenant utiliser l'option --use-params-defaults avec la commande tkn clustertask start pour utiliser les valeurs par défaut définies dans la configuration ClusterTask et créer l'exécution de la tâche.
  • Le drapeau --use-param-defaults de la commande tkn pipeline start invite désormais à passer en mode interactif si les valeurs par défaut n'ont pas été spécifiées pour certains paramètres.
3.1.11.1.3. Déclencheurs
  • La fonction du langage d'expression commun (CEL) appelée parseYAML a été ajoutée pour analyser une chaîne YAML en une carte de chaînes.
  • Les messages d'erreur pour l'analyse des expressions CEL ont été améliorés pour les rendre plus granulaires lors de l'évaluation des expressions et lors de l'analyse du corps du crochet pour créer l'environnement d'évaluation.
  • La prise en charge du marshaling des valeurs booléennes et des cartes est désormais possible si elles sont utilisées comme valeurs d'expressions dans un mécanisme de recouvrement CEL.
  • Les champs suivants ont été ajoutés à l'objet EventListener:

    • Le champ replicas permet à l'auditeur d'événements d'exécuter plus d'un pod en spécifiant le nombre de répliques dans le fichier YAML.
    • Le champ NodeSelector permet à l'objet EventListener de programmer le pod d'écoute d'événements sur un nœud spécifique.
  • Les intercepteurs de webhook peuvent désormais analyser l'en-tête EventListener-Request-URL pour extraire les paramètres de l'URL de la requête originale gérée par l'écouteur d'événements.
  • Les annotations de l'écouteur d'événements peuvent maintenant être propagées au déploiement, aux services et aux autres pods. Notez que les annotations personnalisées sur les services ou le déploiement sont écrasées, et doivent donc être ajoutées aux annotations de l'écouteur d'événements afin qu'elles soient propagées.
  • La validation correcte des répliques dans la spécification EventListener est maintenant disponible pour les cas où un utilisateur spécifie les valeurs spec.replicas comme negative ou zero.
  • Vous pouvez désormais spécifier l'objet TriggerCRD dans la spécification EventListener en tant que référence en utilisant le champ TriggerRef pour créer l'objet TriggerCRD séparément et le lier ensuite dans la spécification EventListener.
  • La validation et les valeurs par défaut de l'objet TriggerCRD sont désormais disponibles.
3.1.11.2. Fonctionnalités obsolètes
  • $(params) sont désormais supprimés de la ressource triggertemplate et remplacés par $(tt.params) afin d'éviter toute confusion entre les paramètres des ressources resourcetemplate et triggertemplate.
  • La référence ServiceAccount du niveau d'authentification optionnel basé sur EventListenerTrigger est passée d'une référence d'objet à une chaîne ServiceAccountName. Cela garantit que la référence ServiceAccount se trouve dans le même espace de noms que l'objet EventListenerTrigger.
  • La définition de ressource personnalisée (CRD) Conditions est désormais obsolète ; utilisez la CRD WhenExpressions à la place.
  • L'objet PipelineRun.Spec.ServiceAccountNames est obsolète et remplacé par l'objet PipelineRun.Spec.TaskRunSpec[].ServiceAccountName.
3.1.11.3. Problèmes connus
  • Cette version de Red Hat OpenShift Pipelines ajoute la prise en charge d'une installation déconnectée. Cependant, certaines images utilisées par les tâches de cluster doivent être mises en miroir pour qu'elles fonctionnent dans des clusters déconnectés.
  • Les pipelines dans l'espace de noms openshift ne sont pas supprimés après la désinstallation de Red Hat OpenShift Pipelines Operator. Utilisez la commande oc delete pipelines -n openshift --all pour supprimer les pipelines.
  • La désinstallation de Red Hat OpenShift Pipelines Operator ne supprime pas les écouteurs d'événements.

    En guise de solution de contournement, supprimer les CRD EventListener et Pod:

    1. Modifier l'objet EventListener avec les finaliseurs foregroundDeletion:

      $ oc patch el/<eventlistener_name> -p '{"metadata":{"finalizers" :[\N-"foregroundDeletion"]}}' --type=merge
      Copy to Clipboard Toggle word wrap

      Par exemple :

      $ oc patch el/github-listener-interceptor -p '{"metadata":{"finalizers":["foregroundDeletion"]}}' --type=merge
      Copy to Clipboard Toggle word wrap
    2. Supprimer le CRD EventListener:

      $ oc patch crd/eventlisteners.triggers.tekton.dev -p '{"metadata":{"finalizers":[]}}' --type=merge
      Copy to Clipboard Toggle word wrap
  • Lorsque vous exécutez une tâche d'image de conteneur multiarchitecture sans spécification de commande sur un cluster IBM Power Systems (ppc64le) ou IBM Z (s390x), la ressource TaskRun échoue avec l'erreur suivante :

    Error executing command: fork/exec /bin/bash: exec format error
    Copy to Clipboard Toggle word wrap

    Comme solution de contournement, utilisez une image de conteneur spécifique à l'architecture ou spécifiez le résumé sha256 pour qu'il pointe vers l'architecture correcte. Pour obtenir le condensé sha256, entrez :

    $ skopeo inspect --raw <image_name>| jq '.manifests[] | select(.platform.architecture == "<architecture>") | .digest'
    Copy to Clipboard Toggle word wrap
3.1.11.4. Problèmes corrigés
  • Une validation syntaxique simple pour vérifier le filtre CEL, les superpositions dans le validateur Webhook et les expressions dans l'intercepteur a été ajoutée.
  • Les déclencheurs n'écrasent plus les annotations définies sur les objets de déploiement et de service sous-jacents.
  • Auparavant, un écouteur d'événements pouvait cesser d'accepter des événements. Ce correctif ajoute un délai d'inactivité de 120 secondes pour le puits EventListener afin de résoudre ce problème.
  • Auparavant, l'annulation de l'exécution d'un pipeline avec un état Failed(Canceled) donnait un message de réussite. Ce problème a été corrigé et un message d'erreur est désormais affiché.
  • La commande tkn eventlistener list fournit désormais l'état des récepteurs d'événements répertoriés, ce qui vous permet d'identifier facilement ceux qui sont disponibles.
  • Des messages d'erreur cohérents sont désormais affichés pour les commandes triggers list et triggers describe lorsque les déclencheurs ne sont pas installés ou lorsqu'une ressource ne peut être trouvée.
  • Auparavant, un grand nombre de connexions inactives s'accumulaient lors de la livraison d'événements dans le nuage. Le paramètre DisableKeepAlives: true a été ajouté à la configuration de cloudeventclient pour résoudre ce problème. Ainsi, une nouvelle connexion est établie pour chaque événement en nuage.
  • Auparavant, le code creds-init écrivait des fichiers vides sur le disque même si les informations d'identification d'un type donné n'étaient pas fournies. Ce correctif modifie le code creds-init pour qu'il écrive des fichiers uniquement pour les informations d'identification qui ont été effectivement montées à partir de secrets correctement annotés.
3.1.12.1. Nouvelles fonctionnalités

Red Hat OpenShift Pipelines Technology Preview (TP) 1.1 est maintenant disponible sur OpenShift Container Platform 4.5. Red Hat OpenShift Pipelines TP 1.1 est mis à jour pour prendre en charge :

  • Tekton Pipelines 0.14.3
  • Tekton tkn CLI 0.11.0
  • Tekton Triggers 0.6.1
  • tâches en grappe basées sur le catalogue Tekton 0.14

En plus des corrections et des améliorations de stabilité, les sections suivantes mettent en évidence les nouveautés de Red Hat OpenShift Pipelines 1.1.

3.1.12.1.1. Pipelines
  • Les espaces de travail peuvent désormais être utilisés à la place des ressources de pipeline. Il est recommandé d'utiliser les espaces de travail dans OpenShift Pipelines, car les ressources de pipeline sont difficiles à déboguer, limitées dans leur portée et rendent les tâches moins réutilisables. Pour plus de détails sur les espaces de travail, voir la section Comprendre OpenShift Pipelines.
  • La prise en charge de l'espace de travail pour les modèles de demande en volume a été ajoutée :

    • Le modèle de demande de volume pour une exécution de pipeline et une exécution de tâche peut désormais être ajouté en tant que source de volume pour les espaces de travail. Le contrôleur tekton crée alors une demande de volume persistante (PVC) en utilisant le modèle qui est vu comme un PVC pour toutes les exécutions de tâches dans le pipeline. Ainsi, il n'est pas nécessaire de définir la configuration du PVC à chaque fois qu'il lie un espace de travail qui s'étend sur plusieurs tâches.
    • L'aide à la recherche du nom du PVC lorsqu'un modèle de demande de volume est utilisé comme source de volume est désormais disponible en utilisant la substitution de variable.
  • Soutien à l'amélioration des audits :

    • Le champ PipelineRun.Status contient désormais l'état de chaque tâche exécutée dans le pipeline et la spécification du pipeline utilisée pour instancier une exécution du pipeline afin de surveiller la progression de l'exécution du pipeline.
    • Les résultats des pipelines ont été ajoutés à la spécification des pipelines et au statut PipelineRun.
    • Le champ TaskRun.Status contient désormais la spécification exacte de la tâche utilisée pour instancier la ressource TaskRun.
  • Prise en charge de l'application du paramètre par défaut aux conditions.
  • Une exécution de tâche créée en référençant une tâche de cluster ajoute désormais l'étiquette tekton.dev/clusterTask au lieu de l'étiquette tekton.dev/task.
  • Le rédacteur de la configuration kube ajoute maintenant les configurations ClientKeyData et ClientCertificateData dans la structure de la ressource pour permettre le remplacement du cluster de type de ressource pipeline avec la tâche kubeconfig-creator.
  • Les noms des cartes de configuration feature-flags et config-defaults sont désormais personnalisables.
  • La prise en charge du réseau hôte dans le modèle de pod utilisé par l'exécution de la tâche est désormais disponible.
  • Un assistant d'affinité est maintenant disponible pour prendre en charge l'affinité des nœuds dans les exécutions de tâches qui partagent le volume de l'espace de travail. Par défaut, cette fonctionnalité est désactivée sur OpenShift Pipelines.
  • Le modèle de pod a été mis à jour pour spécifier imagePullSecrets afin d'identifier les secrets que le runtime du conteneur doit utiliser pour autoriser les extractions d'images de conteneurs lors du démarrage d'un pod.
  • Prise en charge de l'émission d'événements d'avertissement par le contrôleur d'exécution des tâches si ce dernier ne parvient pas à mettre à jour l'exécution des tâches.
  • Des étiquettes k8s standard ou recommandées ont été ajoutées à toutes les ressources pour identifier les ressources appartenant à une application ou à un composant.
  • Le processus Entrypoint est maintenant informé des signaux et ces signaux sont ensuite propagés à l'aide d'un groupe PID dédié du processus Entrypoint.
  • Le modèle de pod peut désormais être défini au niveau d'une tâche au moment de l'exécution en utilisant les spécifications d'exécution de la tâche.
  • Prise en charge de l'émission d'événements Kubernetes :

    • Le contrôleur émet maintenant des événements pour des événements supplémentaires du cycle de vie de l'exécution de la tâche - taskrun started et taskrun running.
    • Le contrôleur d'exécution des pipelines émet désormais un événement à chaque fois qu'un pipeline démarre.
  • En plus des événements Kubernetes par défaut, la prise en charge des événements cloud pour les exécutions de tâches est désormais disponible. Le contrôleur peut être configuré pour envoyer tous les événements d'exécution de tâches, tels que la création, le démarrage et l'échec, en tant qu'événements cloud.
  • Prise en charge de l'utilisation de la variable $context.<task|taskRun|pipeline|pipelineRun>.name pour référencer le nom approprié lors de l'exécution d'un pipeline ou d'une tâche.
  • La validation des paramètres d'exécution du pipeline est désormais disponible pour s'assurer que tous les paramètres requis par le pipeline sont fournis par l'exécution du pipeline. Cela permet également aux opérations de pipelines de fournir des paramètres supplémentaires en plus des paramètres requis.
  • Vous pouvez désormais spécifier des tâches au sein d'un pipeline qui seront toujours exécutées avant que le pipeline ne se termine, soit après avoir terminé toutes les tâches avec succès, soit après l'échec d'une tâche du pipeline, en utilisant le champ finally dans le fichier YAML du pipeline.
  • La tâche git-clone est maintenant disponible.
3.1.12.1.2. L'interface de programmation des pipelines
  • La commande tkn evenlistener describe prend désormais en charge les déclencheurs intégrés.
  • Support pour recommander des sous-commandes et faire des suggestions si une sous-commande incorrecte est utilisée.
  • La commande tkn task describe sélectionne désormais automatiquement la tâche si une seule tâche est présente dans le pipeline.
  • Vous pouvez désormais lancer une tâche en utilisant des valeurs de paramètres par défaut en spécifiant l'indicateur --use-param-defaults dans la commande tkn task start.
  • Vous pouvez désormais spécifier un modèle de demande de volume pour les exécutions de pipeline ou de tâches en utilisant l'option --workspace avec les commandes tkn pipeline start ou tkn task start.
  • La commande tkn pipelinerun logs affiche désormais les journaux des dernières tâches énumérées dans la section finally.
  • La prise en charge du mode interactif a été ajoutée à la commande tkn task start et à la sous-commande describe pour les ressources tkn suivantes : pipeline, pipelinerun, task, taskrun, clustertask, et pipelineresource.
  • La commande tkn version affiche désormais la version des déclencheurs installés dans le cluster.
  • La commande tkn pipeline describe affiche désormais les valeurs des paramètres et les délais spécifiés pour les tâches utilisées dans le pipeline.
  • Prise en charge de l'option --last pour les commandes tkn pipelinerun describe et tkn taskrun describe afin de décrire l'exécution la plus récente du pipeline ou de la tâche, respectivement.
  • La commande tkn pipeline describe affiche désormais les conditions applicables aux tâches du pipeline.
  • Vous pouvez désormais utiliser les drapeaux --no-headers et --all-namespaces avec la commande tkn resource list.
3.1.12.1.3. Déclencheurs
  • Les fonctions suivantes du langage d'expression commun (CEL) sont désormais disponibles :

    • parseURL pour analyser et extraire des parties d'une URL
    • parseJSON pour analyser les types de valeurs JSON intégrés dans une chaîne de caractères dans le champ payload du webhook deployment
  • Un nouvel intercepteur pour les webhooks de Bitbucket a été ajouté.
  • Les auditeurs d'événements affichent désormais les champs Address URL et Available status comme champs supplémentaires lorsqu'ils sont listés avec la commande kubectl get.
  • les paramètres des modèles de déclenchement utilisent désormais la syntaxe $(tt.params.<paramName>) au lieu de $(params.<paramName>) afin de réduire la confusion entre les paramètres des modèles de déclenchement et ceux des modèles de ressources.
  • Vous pouvez désormais ajouter tolerations dans le CRD EventListener pour vous assurer que les auditeurs d'événements sont déployés avec la même configuration même si tous les nœuds sont altérés en raison de problèmes de sécurité ou de gestion.
  • Vous pouvez maintenant ajouter une sonde de préparation pour l'événement Deployment à l'adresse URL/live.
  • La prise en charge de l'intégration des spécifications TriggerBinding dans les déclencheurs d'écoute d'événements a été ajoutée.
  • Les ressources de déclenchement sont maintenant annotées avec les étiquettes recommandées app.kubernetes.io.
3.1.12.2. Fonctionnalités obsolètes

Les éléments suivants sont obsolètes dans cette version :

  • Les drapeaux --namespace ou -n pour toutes les commandes de l'ensemble du cluster, y compris les commandes clustertask et clustertriggerbinding, sont obsolètes. Ils seront supprimés dans une prochaine version.
  • Le champ name dans triggers.bindings au sein d'une liste d'événements a été abandonné au profit du champ ref et sera supprimé dans une prochaine version.
  • L'interpolation de variables dans les modèles de déclenchement à l'aide de $(params) a été abandonnée au profit de $(tt.params) afin de réduire la confusion avec la syntaxe d'interpolation des variables du pipeline. La syntaxe $(params.<paramName>) sera supprimée dans une prochaine version.
  • L'étiquette tekton.dev/task est obsolète pour les tâches en grappe.
  • Le champ TaskRun.Status.ResourceResults.ResourceRef est obsolète et sera supprimé.
  • Les sous-commandes tkn pipeline create, tkn task create et tkn resource create -f ont été supprimées.
  • La validation des espaces de noms a été supprimée des commandes tkn.
  • Le délai d'attente par défaut de 1h et l'indicateur -t pour la commande tkn ct start ont été supprimés.
  • La tâche s2i a été supprimée.
3.1.12.3. Problèmes connus
  • Les conditions ne favorisent pas les espaces de travail.
  • L'option --workspace et le mode interactif ne sont pas pris en charge pour la commande tkn clustertask start.
  • La prise en charge de la compatibilité ascendante pour la syntaxe $(params.<paramName>) vous oblige à utiliser des modèles de déclencheurs avec des paramètres spécifiques aux pipelines, car le webhook du déclencheur n'est pas en mesure de différencier les paramètres des déclencheurs de ceux des pipelines.
  • Les métriques de pipeline indiquent des valeurs incorrectes lorsque vous exécutez une requête promQL pour tekton_taskrun_count et tekton_taskrun_duration_seconds_count.
  • les exécutions de pipeline et les exécutions de tâches continuent d'être dans les états Running et Running(Pending) respectivement, même lorsqu'un nom de PVC non existant est donné à un espace de travail.
3.1.12.4. Problèmes corrigés
  • Auparavant, la commande tkn task delete <name> --trs supprimait à la fois la tâche et la tâche de cluster si le nom de la tâche et de la tâche de cluster était le même. Avec cette correction, la commande ne supprime que les exécutions de tâches créées par la tâche <name>.
  • Auparavant, la commande tkn pr delete -p <name> --keep 2 ne tenait pas compte de l'indicateur -p lorsqu'elle était utilisée avec l'indicateur --keep et supprimait toutes les exécutions du pipeline, à l'exception des deux dernières. Avec cette correction, la commande ne supprime que les exécutions de pipeline créées par le pipeline <name>, à l'exception des deux dernières.
  • La sortie de tkn triggertemplate describe affiche désormais les modèles de ressources sous forme de tableau au lieu du format YAML.
  • Auparavant, la tâche de cluster buildah échouait lorsqu'un nouvel utilisateur était ajouté à un conteneur. Avec cette correction, le problème a été résolu.
3.1.13.1. Nouvelles fonctionnalités

Red Hat OpenShift Pipelines Technology Preview (TP) 1.0 est maintenant disponible sur OpenShift Container Platform 4.4. Red Hat OpenShift Pipelines TP 1.0 est mis à jour pour prendre en charge :

  • Tekton Pipelines 0.11.3
  • Tekton tkn CLI 0.9.0
  • Tekton Triggers 0.4.0
  • tâches en grappe basées sur le catalogue Tekton 0.11

En plus des corrections et des améliorations de la stabilité, les sections suivantes mettent en évidence les nouveautés de Red Hat OpenShift Pipelines 1.0.

3.1.13.1.1. Pipelines
  • Prise en charge de la version v1beta1 de l'API.
  • Prise en charge d'une plage de limites améliorée. Auparavant, la plage de limites était spécifiée exclusivement pour l'exécution de la tâche et l'exécution du pipeline. Désormais, il n'est plus nécessaire de spécifier explicitement la plage de limites. La plage de limites minimale de l'espace de noms est utilisée.
  • Prise en charge du partage des données entre les tâches à l'aide des résultats et des paramètres des tâches.
  • Les pipelines peuvent désormais être configurés pour ne pas écraser la variable d'environnement HOME et le répertoire de travail des étapes.
  • À l'instar des tâches, sidecars prend désormais en charge le mode script.
  • Vous pouvez désormais spécifier un nom de planificateur différent dans la ressource d'exécution de la tâche podTemplate.
  • Prise en charge de la substitution de variables à l'aide de la notation en tableau étoilé.
  • Le contrôleur Tekton peut désormais être configuré pour surveiller un espace de noms individuel.
  • Un nouveau champ de description est désormais ajouté à la spécification des pipelines, des tâches, des tâches en grappe, des ressources et des conditions.
  • Ajout de paramètres proxy aux ressources du pipeline Git.
3.1.13.1.2. L'interface de programmation des pipelines
  • La sous-commande describe est désormais ajoutée pour les ressources tkn suivantes : EventListener, Condition, TriggerTemplate, ClusterTask, et TriggerSBinding.
  • La prise en charge de v1beta1 a été ajoutée aux ressources suivantes, ainsi que la compatibilité ascendante pour v1alpha1: ClusterTask, Task, Pipeline, PipelineRun, et TaskRun.
  • Les commandes suivantes peuvent désormais lister les résultats de tous les espaces de noms en utilisant l'option --all-namespaces: tkn task list, tkn pipeline list, tkn taskrun list, tkn pipelinerun list

    La sortie de ces commandes est également améliorée pour afficher des informations sans en-tête à l'aide de l'option --no-headers.

  • Vous pouvez maintenant démarrer un pipeline en utilisant les valeurs de paramètres par défaut en spécifiant l'indicateur --use-param-defaults dans la commande tkn pipelines start.
  • La prise en charge de l'espace de travail est désormais ajoutée aux commandes tkn pipeline start et tkn task start.
  • Une nouvelle commande clustertriggerbinding a été ajoutée avec les sous-commandes suivantes : describe, delete, et list.
  • Vous pouvez désormais lancer directement un pipeline à l'aide d'un fichier local ou distant yaml.
  • La sous-commande describe affiche désormais une sortie améliorée et détaillée. Avec l'ajout de nouveaux champs, tels que description, timeout, param description, et sidecar status, la sortie de la commande fournit désormais des informations plus détaillées sur une ressource tkn spécifique.
  • La commande tkn task log affiche désormais les journaux directement si une seule tâche est présente dans l'espace de noms.
3.1.13.1.3. Déclencheurs
  • Les déclencheurs peuvent désormais créer des ressources de pipeline v1alpha1 et v1beta1.
  • Prise en charge de la nouvelle fonction d'interception du langage d'expression commun (CEL) - compareSecret. Cette fonction compare en toute sécurité les chaînes de caractères aux secrets contenus dans les expressions CEL.
  • Prise en charge de l'authentification et de l'autorisation au niveau du déclencheur de l'auditeur d'événements.
3.1.13.2. Fonctionnalités obsolètes

Les éléments suivants sont obsolètes dans cette version :

  • La variable d'environnement $HOME et la variable workingDir dans la spécification Steps sont obsolètes et pourraient être modifiées dans une version ultérieure. Actuellement, dans un conteneur Step, les variables HOME et workingDir sont remplacées par les variables /tekton/home et /workspace, respectivement.

    Dans une version ultérieure, ces deux champs ne seront pas modifiés et prendront les valeurs définies dans l'image du conteneur et dans le YAML Task. Pour cette version, utilisez les drapeaux disable-home-env-overwrite et disable-working-directory-overwrite pour désactiver l'écrasement des variables HOME et workingDir.

  • Les commandes suivantes sont obsolètes et pourraient être supprimées dans une prochaine version : tkn pipeline create, tkn task create.
  • L'indicateur -f de la commande tkn resource create est désormais obsolète. Il pourrait être supprimé dans une prochaine version.
  • L'indicateur -t et l'indicateur --timeout (avec le format des secondes) pour la commande tkn clustertask create sont désormais obsolètes. Seul le format durée est désormais pris en charge, par exemple 1h30s. Ces drapeaux obsolètes pourraient être supprimés dans une prochaine version.
3.1.13.3. Problèmes connus
  • Si vous effectuez une mise à niveau à partir d'une ancienne version de Red Hat OpenShift Pipelines, vous devez supprimer vos déploiements existants avant d'effectuer la mise à niveau vers Red Hat OpenShift Pipelines version 1.0. Pour supprimer un déploiement existant, vous devez d'abord supprimer les ressources personnalisées, puis désinstaller l'opérateur Red Hat OpenShift Pipelines. Pour plus de détails, consultez la section sur la désinstallation de Red Hat OpenShift Pipelines.
  • La soumission des mêmes tâches v1alpha1 plus d'une fois entraîne une erreur. Utilisez la commande oc replace au lieu de oc apply lorsque vous soumettez à nouveau une tâche v1alpha1.
  • La tâche buildah cluster ne fonctionne pas lorsqu'un nouvel utilisateur est ajouté à un conteneur.

    Lors de l'installation de l'Opérateur, l'indicateur --storage-driver pour la tâche de cluster buildah n'est pas spécifié, et l'indicateur prend donc sa valeur par défaut. Dans certains cas, cela entraîne un mauvais paramétrage du pilote de stockage. Lorsqu'un nouvel utilisateur est ajouté, le pilote de stockage incorrect entraîne l'échec de la tâche de cluster buildah avec l'erreur suivante :

    useradd: /etc/passwd.8: lock file already used
    useradd: cannot lock /etc/passwd; try again later.
    Copy to Clipboard Toggle word wrap

    Pour contourner le problème, définissez manuellement la valeur de l'indicateur --storage-driver à overlay dans le fichier buildah-task.yaml:

    1. Connectez-vous à votre cluster en tant que cluster-admin:

      $ oc login -u <login> -p <password> https://openshift.example.com:6443
      Copy to Clipboard Toggle word wrap
    2. Utilisez la commande oc edit pour éditer la tâche de cluster buildah:

      $ oc edit clustertask buildah
      Copy to Clipboard Toggle word wrap

      La version actuelle du fichier YAML de buildah clustertask s'ouvre dans l'éditeur défini par votre variable d'environnement EDITOR.

    3. Sous le champ Steps, localisez le champ command suivant :

       command: ['buildah', 'bud', '--format=$(params.FORMAT)', '--tls-verify=$(params.TLSVERIFY)', '--layers', '-f', '$(params.DOCKERFILE)', '-t', '$(resources.outputs.image.url)', '$(params.CONTEXT)']
      Copy to Clipboard Toggle word wrap
    4. Remplacer le champ command par le champ suivant :

       command: ['buildah', '--storage-driver=overlay', 'bud', '--format=$(params.FORMAT)', '--tls-verify=$(params.TLSVERIFY)', '--no-cache', '-f', '$(params.DOCKERFILE)', '-t', '$(params.IMAGE)', '$(params.CONTEXT)']
      Copy to Clipboard Toggle word wrap
    5. Enregistrez le fichier et quittez.

    Vous pouvez également modifier le fichier YAML de la tâche de cluster buildah directement sur la console web en naviguant vers PipelinesCluster Tasksbuildah. Sélectionnez Edit Cluster Task dans le menu Actions et remplacez le champ command comme indiqué dans la procédure précédente.

3.1.13.4. Problèmes corrigés
  • Auparavant, la tâche DeploymentConfig déclenchait une nouvelle construction de déploiement même lorsqu'une construction d'image était déjà en cours. Cela entraînait l'échec du déploiement du pipeline. Avec cette correction, la commande deploy task est maintenant remplacée par la commande oc rollout status qui attend que le déploiement en cours se termine.
  • La prise en charge du paramètre APP_NAME est désormais ajoutée dans les modèles de pipeline.
  • Auparavant, le modèle de pipeline pour Java S2I ne parvenait pas à rechercher l'image dans le registre. Avec cette correction, l'image est recherchée en utilisant les ressources existantes du pipeline d'images au lieu du paramètre IMAGE_NAME fourni par l'utilisateur.
  • Toutes les images d'OpenShift Pipelines sont désormais basées sur les Red Hat Universal Base Images (UBI).
  • Auparavant, lorsque le pipeline était installé dans un espace de noms autre que tekton-pipelines, la commande tkn version affichait la version du pipeline sous la forme unknown. Avec cette correction, la commande tkn version affiche désormais la version correcte du pipeline dans n'importe quel espace de noms.
  • L'indicateur -c n'est plus pris en charge pour la commande tkn version.
  • Les utilisateurs non-administrateurs peuvent maintenant lister les liens de déclenchement des clusters.
  • La fonction de l'écouteur d'événement CompareSecret est maintenant corrigée pour l'intercepteur CEL.
  • Les sous-commandes list, describe, et start pour les tâches et les tâches en grappe affichent désormais correctement la sortie dans le cas où une tâche et une tâche en grappe ont le même nom.
  • Auparavant, l'opérateur OpenShift Pipelines modifiait les contraintes de contexte de sécurité (SCC) privilégiées, ce qui provoquait une erreur lors de la mise à niveau du cluster. Cette erreur est maintenant corrigée.
  • Dans l'espace de noms tekton-pipelines, les délais d'exécution de toutes les tâches et de tous les pipelines sont désormais fixés à la valeur du champ default-timeout-minutes à l'aide de la carte de configuration.
  • Auparavant, la section des pipelines dans la console web n'était pas affichée pour les utilisateurs non-administrateurs. Ce problème est désormais résolu.

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 -----------------------------------
Copy to Clipboard Toggle word wrap
1
La version de l'API de la tâche, v1beta1.
2
Le type d'objet Kubernetes, Task.
3
Le nom unique de cette tâche.
4
La liste des paramètres et des étapes de la tâche et l'espace de travail utilisé par la tâche.

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.

Note

À 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
Copy to Clipboard Toggle word wrap
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 de values. Saisissez in ou notin 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
Copy to Clipboard Toggle word wrap
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âche echo-file-exists uniquement si le résultat exists de la tâche check-file est yes.
4
when qui spécifie d'ignorer la tâche task-should-be-skipped-1 uniquement si le paramètre path est README.md.
5
when expression qui spécifie d'exécuter la tâche finally-task-should-be-executed seulement si le statut d'exécution de la tâche echo-file-exists et le statut de la tâche est Succeeded, le résultat exists de la tâche check-file est yes, et le paramètre path est README.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
Copy to Clipboard Toggle word wrap
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
Copy to Clipboard Toggle word wrap
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
Copy to Clipboard Toggle word wrap
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âche buildah 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âche build-image terminée.
Note

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
Copy to Clipboard Toggle word wrap
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.
3.2.2.7. Espaces de travail
Note

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
...
Copy to Clipboard Toggle word wrap
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 et apply-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 travail source avec la tâche build-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
Copy to Clipboard Toggle word wrap
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)
    Copy to Clipboard Toggle word wrap
    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 ressource TriggerBinding 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 ressource TriggerBinding 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
    Copy to Clipboard Toggle word wrap
    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 ou EventListener.
  • La ressource Trigger combine les ressources TriggerBinding et TriggerTemplate et, éventuellement, le processeur d'événements interceptors.

    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écification EventListener.

    L'exemple suivant montre un extrait de code d'une ressource Trigger, nommée vote-trigger, qui connecte les ressources TriggerBinding et TriggerTemplate, ainsi que le processeur d'événements interceptors.

    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"
    Copy to Clipboard Toggle word wrap
    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 ressource TriggerTemplate.
    8
    Nom de la ressource TriggerTemplate à connecter à la ressource TriggerBinding.
    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 ressource TriggerBinding, puis traite ces données pour créer des ressources Kubernetes comme spécifié par la ressource TriggerTemplate correspondante. La ressource EventListener effectue également un traitement léger des événements ou un filtrage de base sur la charge utile à l'aide de l'événement interceptors, 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 ressource Trigger nommée vote-trigger.

    apiVersion: triggers.tekton.dev/v1beta1 
    1
    
    kind: EventListener 
    2
    
    metadata:
      name: vote-app 
    3
    
    spec:
      serviceAccountName: pipeline 
    4
    
      triggers:
        - triggerRef: vote-trigger 
    5
    Copy to Clipboard Toggle word wrap
    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 ressource EventListener.

3.3. Installation d'OpenShift Pipelines

Ce guide guide les administrateurs de cluster à travers le processus d'installation de Red Hat OpenShift Pipelines Operator sur un cluster OpenShift Container Platform.

Conditions préalables
  • Vous avez accès à un cluster OpenShift Container Platform en utilisant un compte avec des permissions cluster-admin.
  • Vous avez installé oc CLI.
  • Vous avez installé OpenShift Pipelines (tkn) CLI sur votre système local.
  • Votre cluster a la capacité Marketplace activée ou la source du catalogue Red Hat Operator configurée manuellement.

Vous pouvez installer Red Hat OpenShift Pipelines en utilisant l'Opérateur listé dans le OperatorHub de OpenShift Container Platform. Lorsque vous installez l'Opérateur Red Hat OpenShift Pipelines, les ressources personnalisées (CR) requises pour la configuration des pipelines sont automatiquement installées avec l'Opérateur.

La définition de ressource personnalisée (CRD) par défaut de l'opérateur config.operator.tekton.dev est désormais remplacée par tektonconfigs.operator.tekton.dev. En outre, l'opérateur fournit les CRD supplémentaires suivants pour gérer individuellement les composants OpenShift Pipelines : tektonpipelines.operator.tekton.dev, tektontriggers.operator.tekton.dev et tektonaddons.operator.tekton.dev.

Si OpenShift Pipelines est déjà installé sur votre cluster, l'installation existante est mise à niveau de manière transparente. L'opérateur remplacera l'instance de config.operator.tekton.dev sur votre cluster par une instance de tektonconfigs.operator.tekton.dev et des objets supplémentaires des autres CRD si nécessaire.

Avertissement

Si vous avez modifié manuellement votre installation existante, par exemple en changeant l'espace de noms cible dans l'instance CRD config.operator.tekton.dev en apportant des modifications au champ resource name - cluster, le chemin de mise à niveau n'est pas fluide. Dans de tels cas, le flux de travail recommandé est de désinstaller votre installation et de réinstaller Red Hat OpenShift Pipelines Operator.

L'Opérateur Red Hat OpenShift Pipelines offre désormais la possibilité de choisir les composants que vous souhaitez installer en spécifiant des profils dans le cadre de la CR TektonConfig. Le CR TektonConfig est automatiquement installé lors de l'installation de l'Opérateur. Les profils pris en charge sont les suivants :

  • Lite : Cette option n'installe que les pipelines Tekton.
  • Basique : Ceci installe les Pipelines Tekton et les Déclencheurs Tekton.
  • All : Il s'agit du profil par défaut utilisé lors de l'installation de TektonConfig CR. Ce profil installe tous les composants Tekton : Tekton Pipelines, Tekton Triggers, Tekton Addons (qui incluent les ressources ClusterTasks, ClusterTriggerBindings, ConsoleCLIDownload, ConsoleQuickStart et ConsoleYAMLSample ).

Procédure

  1. Dans la perspective Administrator de la console web, naviguez vers OperatorsOperatorHub.
  2. Utilisez la boîte Filter by keyword pour rechercher Red Hat OpenShift Pipelines Operator dans le catalogue. Cliquez sur la tuile Red Hat OpenShift Pipelines Operator.
  3. Lisez la brève description de l'opérateur sur la page Red Hat OpenShift Pipelines Operator. Cliquez sur Install.
  4. Sur la page Install Operator:

    1. Sélectionnez All namespaces on the cluster (default) pour l'espace de noms Installation Mode. Ce mode installe l'opérateur dans l'espace de noms par défaut openshift-operators, ce qui permet à l'opérateur de surveiller tous les espaces de noms du cluster et d'y avoir accès.
    2. Sélectionnez Automatic pour la stratégie d'approbation Approval Strategy. Cela garantit que les futures mises à niveau de l'opérateur sont gérées automatiquement par le gestionnaire du cycle de vie de l'opérateur (OLM). Si vous sélectionnez la stratégie d'approbation Manual, OLM crée une demande de mise à jour. En tant qu'administrateur de cluster, vous devez ensuite approuver manuellement la demande de mise à jour OLM pour mettre à jour l'opérateur vers la nouvelle version.
    3. Sélectionnez un site Update Channel.

      • Le canal latest permet l'installation de la version stable la plus récente de Red Hat OpenShift Pipelines Operator. Actuellement, il s'agit du canal par défaut pour l'installation de Red Hat OpenShift Pipelines Operator.
      • Pour installer une version spécifique de Red Hat OpenShift Pipelines Operator, les administrateurs de clusters peuvent utiliser le canal pipelines-<version> correspondant. Par exemple, pour installer la version 1.8.x de Red Hat OpenShift Pipelines Operator, vous pouvez utiliser le canal pipelines-1.8.

        Note

        À partir d'OpenShift Container Platform 4.11, les canaux preview et stable pour l'installation et la mise à niveau de Red Hat OpenShift Pipelines Operator ne sont pas disponibles. Cependant, dans OpenShift Container Platform 4.10 et les versions antérieures, vous pouvez utiliser les canaux preview et stable pour installer et mettre à niveau l'Opérateur.

  5. Cliquez sur Install. Vous verrez l'opérateur sur la page Installed Operators.

    Note

    L'opérateur est installé automatiquement dans l'espace de noms openshift-operators.

  6. Vérifiez que le site Status est défini sur Succeeded Up to date pour confirmer la réussite de l'installation de Red Hat OpenShift Pipelines Operator.

    Avertissement

    Le statut de réussite peut être Succeeded Up to date même si l'installation d'autres composants est en cours. Il est donc important de vérifier l'installation manuellement dans le terminal.

  7. Vérifiez que tous les composants de Red Hat OpenShift Pipelines Operator ont été installés avec succès. Connectez-vous au cluster sur le terminal et exécutez la commande suivante :

    $ oc get tektonconfig config
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    NAME     VERSION   READY   REASON
    config   1.9.2     True
    Copy to Clipboard Toggle word wrap

    Si la condition READY est True, l'opérateur et ses composants ont été installés avec succès.

    De plus, vérifiez les versions des composants en exécutant la commande suivante :

    $ oc get tektonpipeline,tektontrigger,tektonaddon,pac
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    NAME                                          VERSION   READY   REASON
    tektonpipeline.operator.tekton.dev/pipeline   v0.41.1   True
    NAME                                        VERSION   READY   REASON
    tektontrigger.operator.tekton.dev/trigger   v0.22.2   True
    NAME                                    VERSION   READY   REASON
    tektonaddon.operator.tekton.dev/addon   1.9.2     True
    NAME                                                             VERSION   READY   REASON
    openshiftpipelinesascode.operator.tekton.dev/pipelines-as-code   v0.15.5   True
    Copy to Clipboard Toggle word wrap

Vous pouvez installer Red Hat OpenShift Pipelines Operator depuis OperatorHub en utilisant le CLI.

Procédure

  1. Créez un fichier YAML d'objet d'abonnement pour abonner un espace de noms à l'opérateur Red Hat OpenShift Pipelines, par exemple, sub.yaml:

    Exemple d'abonnement

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: openshift-pipelines-operator
      namespace: openshift-operators
    spec:
      channel:  <channel name> 
    1
    
      name: openshift-pipelines-operator-rh 
    2
    
      source: redhat-operators 
    3
    
      sourceNamespace: openshift-marketplace 
    4
    Copy to Clipboard Toggle word wrap

    1
    Le nom du canal de l'opérateur. Le canal pipelines-<version> est le canal par défaut. Par exemple, le canal par défaut pour Red Hat OpenShift Pipelines Operator version 1.7 est pipelines-1.7. Le canal latest permet l'installation de la version stable la plus récente de l'Opérateur Red Hat OpenShift Pipelines.
    2
    Nom de l'opérateur auquel s'abonner.
    3
    Nom de la CatalogSource qui fournit l'opérateur.
    4
    Espace de noms du CatalogSource. Utilisez openshift-marketplace pour les CatalogSources par défaut d'OperatorHub.
  2. Créer l'objet Abonnement :

    $ oc apply -f sub.yaml
    Copy to Clipboard Toggle word wrap

    L'opérateur Red Hat OpenShift Pipelines est désormais installé dans l'espace de noms cible par défaut openshift-operators.

L'opérateur Red Hat OpenShift Pipelines permet de prendre en charge l'installation de pipelines dans un environnement réseau restreint.

L'opérateur installe un webhook proxy qui définit les variables d'environnement proxy dans les conteneurs du pod créé par tekton-controllers sur la base de l'objet proxy cluster. Il définit également les variables d'environnement proxy dans les ressources TektonPipelines, TektonTriggers, Controllers, Webhooks, et Operator Proxy Webhook.

Par défaut, le proxy webhook est désactivé pour l'espace de noms openshift-pipelines. Pour le désactiver pour tout autre espace de noms, vous pouvez ajouter l'étiquette operator.tekton.dev/disable-proxy: true à l'objet namespace.

3.3.4. Désactiver la création automatique de ressources RBAC

L'installation par défaut de Red Hat OpenShift Pipelines Operator crée plusieurs ressources de contrôle d'accès basé sur les rôles (RBAC) pour tous les espaces de noms dans le cluster, à l'exception des espaces de noms correspondant au modèle d'expression régulière ^(openshift|kube)-*. Parmi ces ressources RBAC, la ressource de liaison de rôle pipelines-scc-rolebinding security context constraint (SCC) est un problème de sécurité potentiel, car le SCC pipelines-scc associé possède le privilège RunAsAny.

Pour désactiver la création automatique de ressources RBAC à l'échelle du cluster après l'installation de Red Hat OpenShift Pipelines Operator, les administrateurs de cluster peuvent définir le paramètre createRbacResource sur false dans la ressource personnalisée (CR) TektonConfig au niveau du cluster.

Exemple TektonConfig CR

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
  name: config
spec:
  params:
  - name: createRbacResource
    value: "false"
  profile: all
  targetNamespace: openshift-pipelines
  addon:
    params:
    - name: clusterTasks
      value: "true"
    - name: pipelineTemplates
      value: "true"
...
Copy to Clipboard Toggle word wrap

Avertissement

En tant qu'administrateur de cluster ou utilisateur disposant des privilèges appropriés, lorsque vous désactivez la création automatique de ressources RBAC pour tous les espaces de noms, la ressource par défaut ClusterTask ne fonctionne pas. Pour que la ressource ClusterTask fonctionne, vous devez créer manuellement les ressources RBAC pour chaque espace de noms prévu.

3.4. Désinstallation d'OpenShift Pipelines

Les administrateurs de cluster peuvent désinstaller Red Hat OpenShift Pipelines Operator en effectuant les étapes suivantes :

  1. Supprimez les ressources personnalisées (CR) qui ont été ajoutées par défaut lors de l'installation de Red Hat OpenShift Pipelines Operator.
  2. Supprimer les CR des composants optionnels, tels que les chaînes Tekton, qui dépendent de l'opérateur.

    Important

    Si vous désinstallez l'Opérateur sans supprimer les CR des composants optionnels, vous ne pourrez pas les supprimer ultérieurement.

  3. Désinstallez l'opérateur Red Hat OpenShift Pipelines.

Désinstaller uniquement l'Opérateur ne supprimera pas les composants Red Hat OpenShift Pipelines créés par défaut lors de l'installation de l'Opérateur.

Supprimez les ressources personnalisées (CR) créées par défaut lors de l'installation de Red Hat OpenShift Pipelines Operator.

Procédure

  1. Dans la perspective Administrator de la console web, naviguez vers AdministrationCustom Resource Definition.
  2. Tapez config.operator.tekton.dev dans la boîte Filter by name pour rechercher les CR de Red Hat OpenShift Pipelines Operator.
  3. Cliquez sur CRD Config pour voir la page Custom Resource Definition Details.
  4. Cliquez sur le menu déroulant Actions et sélectionnez Delete Custom Resource Definition.

    Note

    La suppression des CR supprimera les composants Red Hat OpenShift Pipelines, et toutes les tâches et les pipelines sur le cluster seront perdus.

  5. Cliquez sur Delete pour confirmer la suppression des CR.
Important

Répétez la procédure pour trouver et supprimer les CR des composants optionnels tels que les chaînes Tekton, avant de désinstaller l'opérateur. Si vous désinstallez l'opérateur sans retirer les CR des composants optionnels, vous ne pourrez pas les retirer ultérieurement.

Procédure

  1. À partir de la page OperatorsOperatorHub, utilisez la boîte Filter by keyword pour rechercher Red Hat OpenShift Pipelines Operator.
  2. Cliquez sur la tuile OpenShift Pipelines Operator. La tuile Opérateur indique qu'elle est installée.
  3. Dans la page du descripteur OpenShift Pipelines Operator, cliquez sur Uninstall.

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 SettingsWebhooksAdd 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 AdministratorObserveMetrics.
  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.

En tant qu'administrateur de cluster, l'installation de Red Hat OpenShift Pipelines Operator crée des variantes de chaque tâche de cluster par défaut connues sous le nom de versioned cluster tasks (VCT) et non-versioned cluster tasks (NVCT). Par exemple, l'installation de Red Hat OpenShift Pipelines Operator v1.7 crée une buildah-1-7-0 VCT et une buildah NVCT.

NVCT et VCT ont les mêmes métadonnées, le même comportement et les mêmes spécifications, y compris params, workspaces, et steps. Cependant, ils se comportent différemment lorsque vous les désactivez ou que vous mettez à niveau l'opérateur.

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.

Les tâches de cluster non-versionnées et versionnées ont des conventions d'appellation différentes. De plus, l'opérateur Red Hat OpenShift Pipelines les met à jour différemment.

Expand
Tableau 3.5. Différences entre les tâches en grappe non versionnées et versionnées
 Tâche en grappe non versionnéeTâche en grappe versionnée

Nomenclature

Le NVCT ne contient que le nom de la tâche de cluster. Par exemple, le nom du NVCT de Buildah installé avec Operator v1.7 est buildah.

Le VCT contient le nom de la tâche de cluster, suivi de la version comme suffixe. Par exemple, le nom du VCT de Buildah installé avec Operator v1.7 est buildah-1-7-0.

Mise à niveau

Lorsque vous mettez à niveau l'Opérateur, il met à jour la tâche de cluster non versionnée avec les dernières modifications. Le nom de la tâche NVCT reste inchangé.

La mise à niveau de l'opérateur installe la dernière version du VCT et conserve la version précédente. La dernière version d'un VCT correspond à l'Opérateur mis à jour. Par exemple, l'installation de l'Opérateur 1.7 installe buildah-1-7-0 et conserve buildah-1-6-0.

Avant d'adopter les tâches de cluster versionnées ou non versionnées comme standard dans les environnements de production, les administrateurs de cluster peuvent prendre en compte leurs avantages et leurs inconvénients.

Expand
Tableau 3.6. Avantages et inconvénients des tâches en grappe non versionnées et versionnées
Tâche en grappeAvantagesInconvénients

Tâche en grappe sans version (NVCT)

  • Si vous préférez déployer des pipelines avec les dernières mises à jour et corrections de bogues, utilisez le NVCT.
  • La mise à niveau de l'opérateur met à niveau les tâches de cluster non versionnées, qui consomment moins de ressources que plusieurs tâches de cluster versionnées.

Si vous déployez des pipelines qui utilisent NVCT, ils risquent de s'interrompre après une mise à niveau d'Operator si les tâches de cluster mises à niveau automatiquement ne sont pas rétrocompatibles.

Tâche en grappe versionnée (VCT)

  • Si vous préférez des pipelines stables en production, utilisez le VCT.
  • La version antérieure est conservée sur le cluster même après l'installation de la version ultérieure d'une tâche de cluster. Vous pouvez continuer à utiliser les tâches de cluster antérieures.
  • Si vous continuez à utiliser une version antérieure d'une tâche de cluster, vous risquez de ne pas bénéficier des dernières fonctionnalités et des mises à jour de sécurité critiques.
  • Les versions antérieures des tâches de la grappe qui ne sont pas opérationnelles consomment des ressources de la grappe.
  • * Après la mise à niveau, l'opérateur ne peut plus gérer l'ancien VCT. Vous pouvez supprimer l'ancien VCT manuellement à l'aide de la commande oc delete clustertask, mais vous ne pouvez pas le restaurer.

En tant qu'administrateur de cluster, vous pouvez désactiver les tâches de cluster que l'OpenShift Pipelines Operator a installées.

Procédure

  1. Pour supprimer toutes les tâches en grappe non versionnées et les dernières tâches en grappe versionnées, modifiez la définition de ressource personnalisée (CRD) TektonConfig et définissez le paramètre clusterTasks dans spec.addon.params sur false.

    Exemple TektonConfig CR

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      params:
      - name: createRbacResource
        value: "false"
      profile: all
      targetNamespace: openshift-pipelines
      addon:
        params:
        - name: clusterTasks
          value: "false"
    ...
    Copy to Clipboard Toggle word wrap

    Lorsque vous désactivez les tâches de cluster, l'opérateur supprime du cluster toutes les tâches de cluster non versionnées et uniquement la dernière version des tâches de cluster versionnées.

    Note

    La réactivation des tâches de cluster installe les tâches de cluster non révisées.

  2. Facultatif : Pour supprimer les versions antérieures des tâches de cluster versionnées, utilisez l'une des méthodes suivantes :

    1. Pour supprimer des tâches de cluster à version antérieure, utilisez la commande oc delete clustertask suivie du nom de la tâche de cluster à version. Par exemple :

      $ oc delete clustertask buildah-1-6-0
      Copy to Clipboard Toggle word wrap
    2. Pour supprimer toutes les tâches de cluster versionnées créées par une ancienne version de l'Opérateur, vous pouvez supprimer l'ensemble d'installation correspondant. Par exemple, vous pouvez supprimer l'ensemble d'installation correspondant :

      $ oc delete tektoninstallerset versioned-clustertask-1-6-k98as
      Copy to Clipboard Toggle word wrap
      Important

      Si vous supprimez une ancienne tâche en grappe versionnée, vous ne pouvez pas la restaurer. Vous ne pouvez restaurer que les tâches de cluster versionnées et non versionnées que la version actuelle de l'opérateur a créées.

3.7. Utiliser Tekton Hub avec OpenShift Pipelines

Important

Tekton Hub est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas de les utiliser en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.

Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.

Tekton Hub vous aide à découvrir, rechercher et partager des tâches et des pipelines réutilisables pour vos flux de travail CI/CD. Une instance publique de Tekton Hub est disponible sur hub.tekton.dev. Les administrateurs de clusters peuvent également installer et déployer une instance personnalisée de Tekton Hub en modifiant les configurations dans la ressource personnalisée (CR) TektonHub.

Tekton Hub est un composant optionnel ; les administrateurs de clusters ne peuvent pas l'installer en utilisant la ressource personnalisée (CR) TektonConfig. Pour installer et gérer Tekton Hub, utilisez la CR TektonHub.

Vous pouvez installer Tekton Hub sur votre cluster en utilisant deux modes :

  • Without autorisation de connexion et évaluation des artefacts du centre Tekton
  • with autorisation de connexion et évaluation des artefacts du centre Tekton
Note

Si vous utilisez Github Enterprise ou Gitlab Enterprise, installez et déployez Tekton Hub dans le même réseau que le serveur d'entreprise. Par exemple, si le serveur d'entreprise fonctionne derrière un VPN, déployez Tekton Hub sur un cluster qui est également derrière le VPN.

3.7.1.1. Installation du Tekton Hub sans login et rating

Vous pouvez installer Tekton Hub sur votre cluster automatiquement avec la configuration par défaut. Lorsque vous utilisez la configuration par défaut, Tekton Hub ne prend pas en charge la connexion avec autorisation et les évaluations pour les artefacts Tekton Hub.

Conditions préalables

  • Assurez-vous que Red Hat OpenShift Pipelines Operator est installé dans l'espace de noms par défaut openshift-pipelines sur le cluster.

Procédure

  1. Créez un CR TektonHub similaire à l'exemple suivant.

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonHub
    metadata:
      name: hub
    spec:
      targetNamespace: openshift-pipelines 
    1
    
      db:                      # Optional: If you want to use custom database
        secret: tekton-hub-db  # Name of db secret should be `tekton-hub-db`
    
      categories:              # Optional: If you want to use custom categories
        - Automation
        - Build Tools
        - CLI
        - Cloud
        - Code Quality
        - ...
    
      catalogs:                # Optional: If you want to use custom catalogs
        - name: tekton
          org: tektoncd
          type: community
          provider: github
          url: https://github.com/tektoncd/catalog
          revision: main
    
      scopes:                   # Optional: If you want to add new users
        - name: agent:create
          users: [abc, qwe, pqr]
        - name: catalog:refresh
          users: [abc, qwe, pqr]
        - name: config:refresh
          users: [abc, qwe, pqr]
    
      default:                   # Optional: If you want to add custom default scopes
        scopes:
          - rating:read
          - rating:write
    
      api:
        catalogRefreshInterval: 30m 
    2
    Copy to Clipboard Toggle word wrap
    1
    L'espace de noms dans lequel Tekton Hub doit être installé ; la valeur par défaut est openshift-pipelines.
    2
    Intervalle de temps après lequel le catalogue se rafraîchit automatiquement. Les unités de temps prises en charge sont les secondes (s), les minutes (m), les heures (h), les jours (d) et les semaines (w). L'intervalle par défaut est de 30 minutes.
    Note

    Si vous ne fournissez pas de valeurs personnalisées pour les champs facultatifs dans le CR TektonHub, les valeurs par défaut configurées dans la carte de configuration de l'API Tekton Hub sont utilisées.

  2. Appliquer la CR TektonHub.

    $ oc apply -f <tekton-hub-cr>.yaml
    Copy to Clipboard Toggle word wrap
  3. Vérifiez l'état de l'installation. Le CR TektonHub peut prendre un certain temps avant d'atteindre un état stable.

    $ oc get tektonhub.operator.tekton.dev
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    NAME   VERSION   READY   REASON   APIURL                    UIURL
    hub    v1.9.0    True             https://api.route.url/    https://ui.route.url/
    Copy to Clipboard Toggle word wrap

3.7.1.2. Installation du Tekton Hub avec login et rating

Vous pouvez installer Tekton Hub sur votre cluster avec une configuration personnalisée qui prend en charge la connexion avec autorisation et les évaluations pour les artefacts Tekton Hub.

Conditions préalables

  • Assurez-vous que Red Hat OpenShift Pipelines Operator est installé dans l'espace de noms par défaut openshift-pipelines sur le cluster.

Procédure

  1. Créez une application OAuth avec votre hébergeur de référentiel Git, et notez l'identifiant et le secret du client. Les hébergeurs supportés sont GitHub, GitLab et BitBucket.

  2. Modifiez le fichier <tekton_hub_root>/config/02-api/20-api-secret.yaml pour y inclure les secrets de l'API Tekton Hub. Par exemple :

    apiVersion: v1
    kind: Secret
    metadata:
      name: tekton-hub-api
      namespace: openshift-pipelines
    type: Opaque
    stringData:
      GH_CLIENT_ID: 
    1
    
      GH_CLIENT_SECRET: 
    2
    
      GL_CLIENT_ID: 
    3
    
      GL_CLIENT_SECRET: 
    4
    
      BB_CLIENT_ID: 
    5
    
      BB_CLIENT_SECRET: 
    6
    
      JWT_SIGNING_KEY: 
    7
    
      ACCESS_JWT_EXPIRES_IN: 
    8
    
      REFRESH_JWT_EXPIRES_IN: 
    9
    
      AUTH_BASE_URL: 
    10
    
      GHE_URL: 
    11
    
      GLE_URL: 
    12
    Copy to Clipboard Toggle word wrap
    1
    L'identifiant du client de l'application GitHub OAuth.
    2
    Le secret du client de l'application OAuth de GitHub.
    3
    L'identifiant du client de l'application GitLab OAuth.
    4
    Le secret du client de l'application OAuth de GitLab.
    5
    L'identifiant du client de l'application BitBucket OAuth.
    6
    Le secret du client de l'application BitBucket OAuth.
    7
    Chaîne longue et aléatoire utilisée pour signer le jeton Web JSON (JWT) créé pour les utilisateurs.
    8
    Ajoutez la limite de temps après laquelle le jeton d'accès expire. Par exemple, 1m, où m représente les minutes. Les unités de temps prises en charge sont les secondes (s), les minutes (m), les heures (h), les jours (d) et les semaines (w).
    9
    Ajoutez la limite de temps après laquelle le jeton de rafraîchissement expire. Par exemple, 1m, où m indique les minutes. Les unités de temps prises en charge sont les secondes (s), les minutes (m), les heures (h), les jours (d) et les semaines (w). Assurez-vous que le délai d'expiration défini pour le rafraîchissement du jeton est supérieur au délai d'expiration défini pour l'accès au jeton.
    10
    URL de la route pour l'application OAuth.
    11
    URL de GitHub Enterprise, si vous vous authentifiez à l'aide de GitHub Enterprise. Ne fournissez pas l'URL du catalogue comme valeur de ce champ.
    12
    URL de GitLab Enterprise, si vous vous authentifiez avec GitLab Enterprise. Ne fournissez pas l'URL du catalogue comme valeur pour ce champ.
    Note

    Vous pouvez supprimer les champs inutilisés pour les fournisseurs de services d'hébergement de référentiel Git qui ne sont pas pertinents pour votre déploiement.

  3. Créez un CR TektonHub similaire à l'exemple suivant.

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonHub
    metadata:
      name: hub
    spec:
      targetNamespace: openshift-pipelines 
    1
    
      db: 
    2
    
        secret: tekton-hub-db 
    3
    
    
      categories: 
    4
    
        - Automation
        - Build Tools
        - CLI
        - Cloud
        - Code Quality
          ...
    
      catalogs: 
    5
    
        - name: tekton
          org: tektoncd
          type: community
          provider: github
          url: https://github.com/tektoncd/catalog
          revision: main
    
      scopes: 
    6
    
        - name: agent:create
          users: [<username>]
        - name: catalog:refresh
          users: [<username>]
        - name: config:refresh
          users: [<username>]
    
      default: 
    7
    
        scopes:
          - rating:read
          - rating:write
    
      api:
        catalogRefreshInterval: 30m 
    8
    Copy to Clipboard Toggle word wrap
    1
    L'espace de noms dans lequel Tekton Hub doit être installé ; la valeur par défaut est openshift-pipelines.
    2
    Facultatif : Base de données personnalisée, telle qu'une base de données Crunchy Postgres.
    3
    Le nom du secret de la base de données doit être tekton-hub-db.
    4
    Facultatif : Catégories personnalisées pour les tâches et les pipelines dans Tekton Hub.
    5
    En option : Catalogues personnalisés pour Tekton Hub.
    6
    Optionnel : Utilisateurs supplémentaires. Vous pouvez mentionner plusieurs utilisateurs, tels que [<username_1>, <username_2>, <username_3>].
    7
    Facultatif : Portées par défaut personnalisées.
    8
    Intervalle de temps après lequel le catalogue se rafraîchit automatiquement. Les unités de temps prises en charge sont les secondes (s), les minutes (m), les heures (h), les jours (d) et les semaines (w). L'intervalle par défaut est de 30 minutes.
    Note

    Si vous ne fournissez pas de valeurs personnalisées pour les champs facultatifs dans le CR TektonHub, les valeurs par défaut configurées dans la carte de configuration de l'API Tekton Hub sont utilisées.

  4. Appliquer la CR TektonHub.

    $ oc apply -f <tekton-hub-cr>.yaml
    Copy to Clipboard Toggle word wrap
  5. Vérifiez l'état de l'installation. Le CR TektonHub peut prendre un certain temps avant d'atteindre un état stable.

    $ oc get tektonhub.operator.tekton.dev
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    NAME   VERSION   READY   REASON   APIURL                    UIURL
    hub    v1.9.0    True             https://api.route.url/    https://ui.route.url/
    Copy to Clipboard Toggle word wrap

Les administrateurs de clusters peuvent utiliser une base de données personnalisée avec Tekton Hub, au lieu de la base de données PostgreSQL par défaut installée par l'Opérateur. Vous pouvez associer une base de données personnalisée au moment de l'installation, et l'utiliser avec les interfaces db-migration, api, et ui fournies par Tekton Hub. Vous pouvez également associer une base de données personnalisée à Tekton Hub même après l'installation de la base de données par défaut.

Procédure

  1. Créez un secret nommé tekton-hub-db dans l'espace de noms cible avec les clés suivantes :

    • POSTGRES_HOST
    • POSTGRES_DB
    • POSTGRES_USER
    • POSTGRES_PASSWORD
    • POSTGRES_PORT

      Exemple : Secrets de base de données personnalisés

      apiVersion: v1
      kind: Secret
      metadata:
        name: tekton-hub-db
        labels:
          app: tekton-hub-db
      type: Opaque
      stringData:
        POSTGRES_HOST: <The name of the host of the database>
        POSTGRES_DB: <Name of the database>
        POSTGRES_USER: <The name of user account>
        POSTGRES_PASSWORD: <The password of user account>
        POSTGRES_PORT: <The port that the database is listening on>
      ...
      Copy to Clipboard Toggle word wrap

      Note

      L'espace de noms cible par défaut est openshift-pipelines.

  2. Dans le CR TektonHub, définissez la valeur de l'attribut secret de la base de données sur tekton-hub-db.

    Exemple : Ajout d'un secret de base de données personnalisé

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonHub
    metadata:
      name: hub
    spec:
      targetNamespace: openshift-pipelines
      db:
        secret: tekton-hub-db
      api:
        hubConfigUrl: https://raw.githubusercontent.com/tektoncd/hub/main/config.yaml
        catalogRefreshInterval: 30m
    ...
    Copy to Clipboard Toggle word wrap

  3. Utilisez la mise à jour de TektonHub CR pour associer la base de données personnalisée à Tekton Hub.

    1. Si vous associez la base de données personnalisée au moment de l'installation de Tekton Hub sur votre cluster, appliquez la mise à jour de TektonHub CR.

      $ oc apply -f <tekton-hub-cr>.yaml
      Copy to Clipboard Toggle word wrap
    2. Si vous associez la base de données personnalisée une fois l'installation de Tekton Hub terminée, remplacez la CR TektonHub existante par la CR TektonHub mise à jour.

      $ oc replace -f <tekton-hub-cr>.yaml
      Copy to Clipboard Toggle word wrap
  4. Vérifiez l'état de l'installation. Le CR TektonHub peut prendre un certain temps avant d'atteindre un état stable.

    $ oc get tektonhub.operator.tekton.dev
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    NAME   VERSION   READY   REASON   APIURL                    UIURL
    hub    v1.9.0    True             https://api.route.url/    https://ui.route.url/
    Copy to Clipboard Toggle word wrap

Les administrateurs de clusters peuvent installer la base de données Crunchy Postgres et configurer Tekton Hub pour l'utiliser à la place de la base de données par défaut.

Conditions préalables

  • Installez l'opérateur Crunchy Postgres depuis le Hub de l'opérateur.
  • Créer une instance Postgres qui initie une base de données Postgres Crunchy.

Procédure

  1. Entrez dans le pod Crunchy Postgres.

    Exemple : Entrer dans la nacelle test-instance1-m7hh-0

    $ oc exec -it -n openshift-operators test-instance1-m7hh-0 -- /bin/sh
    
    Defaulting container name to database.
    Use 'oc describe pod/test-instance1-m7hh-0 -n openshift-operators' to see all of the containers in this pod.
    sh-4.4$ psql -U postgres
    psql (14.4)
    Type "help" for help.
    Copy to Clipboard Toggle word wrap

  2. Trouvez le fichier pg_hba.conf.

    postgres=# SHOW hba_file;
             hba_file
    --------------------------
     /pgdata/pg14/pg_hba.conf
    (1 row)
    
    postgres=#
    Copy to Clipboard Toggle word wrap
  3. Quitter la base de données.
  4. Vérifiez que le fichier pg_hba.conf contient l'entrée host all all 0.0.0.0/0 md5, nécessaire pour accéder à toutes les connexions entrantes. En outre, ajoutez l'entrée à la fin du fichier pg_hba.conf.

    Exemple : pg_hba.conf file

    sh-4.4$ cat /pgdata/pg14/pg_hba.conf
    
    # Do not edit this file manually!
    # It will be overwritten by Patroni!
    local all "postgres" peer
    hostssl replication "_crunchyrepl" all cert
    hostssl "postgres" "_crunchyrepl" all cert
    host all "_crunchyrepl" all reject
    hostssl all all all md5
    host  all  all 0.0.0.0/0 md5
    Copy to Clipboard Toggle word wrap

  5. Enregistrez le fichier pg_hba.conf et rechargez la base de données.

    sh-4.4$ psql -U postgres
    psql (14.4)
    Type "help" for help.
    
    postgres=# SHOW hba_file;
             hba_file
    --------------------------
     /pgdata/pg14/pg_hba.conf
    (1 row)
    
    postgres=# SELECT pg_reload_conf();
     pg_reload_conf
    ----------------
     t
    (1 row)
    Copy to Clipboard Toggle word wrap
  6. Quitter la base de données.
  7. Décoder la valeur secrète de l'hôte Crunchy Postgres.

    Exemple : Décoder la valeur secrète d'un hôte Crunchy Postgres

    $ echo 'aGlwcG8tcHJpbWFyeS5vcGVuc2hpZnQtb3BlcmF0b3JzLnN2YyA=' | base64 --decode
    test-primary.openshift-operators.svc
    Copy to Clipboard Toggle word wrap

  8. Créez un secret nommé tekton-hub-db dans l'espace de noms cible avec les clés suivantes :

    • POSTGRES_HOST
    • POSTGRES_DB
    • POSTGRES_USER
    • POSTGRES_PASSWORD
    • POSTGRES_PORT

      Exemple : Secrets de base de données personnalisés

      apiVersion: v1
      kind: Secret
      metadata:
        name: tekton-hub-db
        labels:
          app: tekton-hub-db
      type: Opaque
      stringData:
        POSTGRES_HOST: test-primary.openshift-operators.svc
        POSTGRES_DB: test
        POSTGRES_USER: test
        POSTGRES_PASSWORD: woXOisU5>ocJiTF7y{{;1[Q(
        POSTGRES_PORT: '5432'
      ...
      Copy to Clipboard Toggle word wrap

    Note

    L'espace de noms cible par défaut est openshift-pipelines.

  9. Dans le CR TektonHub, définissez la valeur de l'attribut secret de la base de données sur tekton-hub-db.

    Exemple : Ajout d'un secret de base de données personnalisé

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonHub
    metadata:
      name: hub
    spec:
      targetNamespace: openshift-pipelines
      db:
        secret: tekton-hub-db
    ...
    Copy to Clipboard Toggle word wrap

  10. Utilisez la mise à jour de TektonHub CR pour associer la base de données personnalisée à Tekton Hub.

    $ oc apply -f <tekton-hub-cr>.yaml
    Copy to Clipboard Toggle word wrap
  11. Vérifiez l'état de l'installation. Le CR TektonHub peut prendre un certain temps avant d'atteindre un état stable.

    $ oc get tektonhub.operator.tekton.dev
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    NAME   VERSION   READY   REASON   APIURL                    UIURL
    hub    v1.9.0    True             https://api.route.url/    https://ui.route.url/
    Copy to Clipboard Toggle word wrap

Tekton Hub supporte l'utilisation de Crunchy Postgres comme base de données personnalisée. Pour un Tekton Hub préinstallé avec une base de données par défaut, les administrateurs de cluster peuvent utiliser Crunchy Postgres comme base de données personnalisée après avoir migré les données du Tekton Hub de la base de données interne ou par défaut vers la base de données externe Crunchy Postgres.

Procédure

  1. Décharge les données existantes de la base de données interne ou par défaut dans un fichier dans le pod.

    Exemple : Vider les données

    $ pg_dump -Ft -h localhost -U postgres hub -f /tmp/hub.dump
    Copy to Clipboard Toggle word wrap

  2. Copiez le fichier contenant le vidage des données sur votre système local.

    Format de la commande

    $ oc cp -n <namespace> <podName>:<path-to-hub.dump> <path-to-local-system>
    Copy to Clipboard Toggle word wrap

$ oc cp -n openshift-pipelines tekton-hub-db-7d6d888c67-p7mdr:/tmp/hub.dump /home/test_user/Downloads/hub.dump
Copy to Clipboard Toggle word wrap
  1. Copiez le fichier qui contient le dumping de données du système local vers le pod qui exécute la base de données externe Crunchy Postgres.

    Format de la commande

    $ oc cp -n <namespace> <path-to-local-system> <podName>:<path-to-hub.dump>
    Copy to Clipboard Toggle word wrap

$ oc cp -n openshift-operators /home/test_user/Downloads/hub.dump test-instance1-spnz-0:/tmp/hub.dump
Copy to Clipboard Toggle word wrap
  1. Restaurer les données de la base de données Crunchy Postgres. format .command
$ pg_restore -d <nom-de-la-base-de-données> -h localhost -U postgres <chemin-où-le-fichier-est-copié>
Copy to Clipboard Toggle word wrap

Exemple

$ pg_restore -d test -h localhost -U postgres /tmp/hub.dump
Copy to Clipboard Toggle word wrap

  1. Accédez au pod Crunchy Postgres. Exemple : Accéder au pod test-instance1-m7hh-0

    $ oc exec -it -n openshift-operators test-instance1-m7hh-0 -- /bin/sh
    
    Defaulting container name to database.
    Use 'oc describe pod/test-instance1-m7hh-0 -n openshift-operators' to see all of the containers in this pod.
    sh-4.4$ psql -U postgres
    psql (14.4)
    Type "help" for help.
    Copy to Clipboard Toggle word wrap
  2. Trouvez le fichier pg_hba.conf.

    postgres=# SHOW hba_file;
             hba_file
    --------------------------
     /pgdata/pg14/pg_hba.conf
    (1 row)
    
    postgres=#
    Copy to Clipboard Toggle word wrap
  3. Quitter la base de données.
  4. Vérifiez si le fichier pg_hba.conf contient l'entrée host all all 0.0.0.0/0 md5, qui est nécessaire pour accéder à toutes les connexions entrantes. Si nécessaire, ajoutez l'entrée à la fin du fichier pg_hba.conf.

    Exemple : pg_hba.conf file

    sh-4.4$ cat /pgdata/pg14/pg_hba.conf
    
    # Do not edit this file manually!
    # It will be overwritten by Patroni!
    local all "postgres" peer
    hostssl replication "_crunchyrepl" all cert
    hostssl "postgres" "_crunchyrepl" all cert
    host all "_crunchyrepl" all reject
    hostssl all all all md5
    host  all  all 0.0.0.0/0 md5
    Copy to Clipboard Toggle word wrap

  5. Enregistrez le fichier pg_hba.conf et rechargez la base de données.

    sh-4.4$ psql -U postgres
    psql (14.4)
    Type "help" for help.
    
    postgres=# SHOW hba_file;
             hba_file
    --------------------------
     /pgdata/pg14/pg_hba.conf
    (1 row)
    
    postgres=# SELECT pg_reload_conf();
     pg_reload_conf
    ----------------
     t
    (1 row)
    Copy to Clipboard Toggle word wrap
  6. Quitter la base de données.
  7. Vérifiez qu'un secret nommé tekton-hub-db dans l'espace de noms cible possède les clés suivantes :

    • POSTGRES_HOST
    • POSTGRES_DB
    • POSTGRES_USER
    • POSTGRES_PASSWORD
    • POSTGRES_PORT

      Exemple : Secrets de base de données personnalisés

      apiVersion: v1
      kind: Secret
      metadata:
        name: tekton-hub-db
        labels:
          app: tekton-hub-db
      type: Opaque
      stringData:
        POSTGRES_HOST: test-primary.openshift-operators.svc
        POSTGRES_DB: test
        POSTGRES_USER: test
        POSTGRES_PASSWORD: woXOisU5>ocJiTF7y{{;1[Q(
        POSTGRES_PORT: '5432'
      ...
      Copy to Clipboard Toggle word wrap

      Note

      La valeur du champ POSTGRES_HOST est encodée comme un secret. Vous pouvez décoder la valeur de l'hôte Crunchy Postgres en utilisant l'exemple suivant.

      exemple : Décoder la valeur secrète d'un hôte Crunchy Postgres

      $ echo 'aGlwcG8tcHJpbWFyeS5vcGVuc2hpZnQtb3BlcmF0b3JzLnN2YyA=' | base64 --decode
      test-primary.openshift-operators.svc
      Copy to Clipboard Toggle word wrap
  8. Vérifiez que dans la CR TektonHub, la valeur de l'attribut secret de la base de données est tekton-hub-db.

    Exemple : TektonHub CR avec le nom du secret de la base de données

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonHub
    metadata:
      name: hub
    spec:
      targetNamespace: openshift-pipelines
      db:
        secret: tekton-hub-db
    ...
    Copy to Clipboard Toggle word wrap

  9. Pour associer la base de données externe Crunchy Postgres à Tekton Hub, remplacez tout CR TektonHub existant par le CR TektonHub mis à jour.

    $ oc replace -f <updated-tekton-hub-cr>.yaml
    Copy to Clipboard Toggle word wrap
  10. Vérifiez l'état du Tekton Hub. La mise à jour de TektonHub CR peut prendre un certain temps avant d'atteindre un état stable.

    $ oc get tektonhub.operator.tekton.dev
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    NAME   VERSION   READY   REASON   APIURL                    UIURL
    hub    v1.9.0    True             https://api.route.url/    https://ui.route.url/
    Copy to Clipboard Toggle word wrap

Les administrateurs de clusters peuvent mettre à jour Tekton Hub avec des catégories, des catalogues, des portées et des portées par défaut personnalisés qui reflètent le contexte de leur organisation.

Procédure

  1. Facultatif : Modifiez les champs categories, catalogs, scopes, et default:scopes dans le Tekton Hub CR.

    Note

    Les informations par défaut pour les catégories, le catalogue, les champs d'application et les champs d'application par défaut sont tirées de la carte de configuration de l'API Tekton Hub. Si vous fournissez des valeurs personnalisées dans le CR TektonHub, elles remplacent les valeurs par défaut.

  2. Appliquer le moyeu Tekton CR.

    $ oc apply -f <tekton-hub-cr>.yaml
    Copy to Clipboard Toggle word wrap
  3. Observer l'état du moyeu Tekton.

    $ oc get tektonhub.operator.tekton.dev
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    NAME   VERSION   READY   REASON   APIURL                  UIURL
    hub    v1.9.0    True             https://api.route.url   https://ui.route.url
    Copy to Clipboard Toggle word wrap

L'intervalle de rafraîchissement du catalogue par défaut pour Tekton Hub est de 30 minutes. Les administrateurs de cluster peuvent modifier l'intervalle de rafraîchissement automatique du catalogue en modifiant la valeur du champ catalogRefreshInterval dans le CR TektonHub.

Procédure

  1. Modifier la valeur du champ catalogRefreshInterval dans le CR TektonHub.

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonHub
    metadata:
      name: hub
    spec:
      targetNamespace: openshift-pipelines 
    1
    
      api:
        catalogRefreshInterval: 30m 
    2
    Copy to Clipboard Toggle word wrap
    1
    L'espace de noms dans lequel Tekton Hub est installé ; la valeur par défaut est openshift-pipelines.
    2
    Intervalle de temps après lequel le catalogue se rafraîchit automatiquement. Les unités de temps prises en charge sont les secondes (s), les minutes (m), les heures (h), les jours (d) et les semaines (w). L'intervalle par défaut est de 30 minutes.
  2. Appliquer la CR TektonHub.

    $ oc apply -f <tekton-hub-cr>.yaml
    Copy to Clipboard Toggle word wrap
  3. Vérifiez l'état de l'installation. Le CR TektonHub peut prendre un certain temps avant d'atteindre un état stable.

    $ oc get tektonhub.operator.tekton.dev
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    NAME   VERSION   READY   REASON   APIURL                    UIURL
    hub    v1.9.0    True             https://api.route.url/    https://ui.route.url/
    Copy to Clipboard Toggle word wrap

Les administrateurs de clusters peuvent ajouter de nouveaux utilisateurs à Tekton Hub avec différents champs d'application.

Procédure

  1. Modifiez le CR TektonHub pour ajouter de nouveaux utilisateurs avec des champs d'application différents.

    ...
    scopes:
      - name: agent:create
        users: [<username_1>, <username_2>] 
    1
    
      - name: catalog:refresh
        users: [<username_3>, <username_4>]
      - name: config:refresh
        users: [<username_5>, <username_6>]
    
    default:
      scopes:
        - rating:read
        - rating:write
    ...
    Copy to Clipboard Toggle word wrap
    1
    Les noms d'utilisateur enregistrés auprès du fournisseur de services d'hébergement du dépôt Git.
    Note

    Un nouvel utilisateur qui se connecte au Tekton Hub pour la première fois n'aura que le champ d'application par défaut. Pour activer des champs d'application supplémentaires, assurez-vous que le nom d'utilisateur de l'utilisateur est ajouté dans le champ scopes du CR TektonHub.

  2. Appliquer la mise à jour de TektonHub CR.

    $ oc apply -f <tekton-hub-cr>.yaml
    Copy to Clipboard Toggle word wrap
  3. Vérifiez l'état du Tekton Hub. La mise à jour de TektonHub CR peut prendre un certain temps avant d'atteindre un état stable.

    $ oc get tektonhub.operator.tekton.dev
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    NAME   VERSION   READY   REASON   APIURL                    UIURL
    hub    v1.9.0    True             https://api.route.url/    https://ui.route.url/
    Copy to Clipboard Toggle word wrap

  4. Actualiser la configuration.

    $ curl -X POST -H "Authorization: <access-token>" \ 
    1
    
        --header "Content-Type: application/json" \
        --data '{"force": true} \
        <api-route>/system/config/refresh
    Copy to Clipboard Toggle word wrap
    1
    Le jeton JWT.

Lorsque vous installez Tekton Hub avec Red Hat OpenShift Pipelines Operator 1.8, l'autorisation de connexion et les évaluations pour les artefacts Tekton Hub sont désactivées pour l'installation par défaut. Cependant, lorsque vous mettez à niveau l'Opérateur de 1.7 à 1.8, l'instance de Tekton Hub sur votre cluster ne désactive pas automatiquement l'autorisation de connexion et les évaluations.

Pour désactiver l'autorisation de connexion et les évaluations pour Tekton Hub après avoir mis à jour l'Opérateur de 1.7 à 1.8, suivez les étapes de la procédure suivante.

Conditions préalables

  • Assurez-vous que Red Hat OpenShift Pipelines Operator est installé dans l'espace de noms par défaut openshift-pipelines sur le cluster.

Procédure

  1. Supprimez le secret API Tekton Hub existant que vous avez créé lors de l'installation manuelle de Tekton Hub pour Operator 1.7.

    oc delete secret tekton-hub-api -n <targetNamespace> 
    1
    Copy to Clipboard Toggle word wrap
    1
    L'espace de noms commun pour le secret de l'API Tekton Hub et le CR Tekton Hub. Par défaut, l'espace de noms cible est openshift-pipelines.
  2. Supprimer l'objet TektonInstallerSet pour l'API Tekton Hub.

    $ oc get tektoninstallerset -o name | grep tekton-hub-api | xargs oc delete
    Copy to Clipboard Toggle word wrap
    Note

    Après la suppression, l'Opérateur crée automatiquement un nouveau jeu d'installation Tekton Hub API.

    Attendez et vérifiez l'état du Tekton Hub. Passez aux étapes suivantes lorsque la colonne READY affiche True.

    $ oc get tektonhub hub
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    NAME   VERSION        READY   REASON   APIURL                                                                                                  UIURL
    hub    1.8.0          True             https://tekton-hub-api-openshift-pipelines.apps.example.com   https://tekton-hub-ui-openshift-pipelines.apps.example.com
    Copy to Clipboard Toggle word wrap

  3. Supprimer l'objet ConfigMap pour l'interface utilisateur du Tekton Hub.

    $ oc delete configmap tekton-hub-ui -n <targetNamespace> 
    1
    Copy to Clipboard Toggle word wrap
    1
    L'espace de noms commun pour l'interface utilisateur du Tekton Hub et le Tekton Hub CR. Par défaut, l'espace de noms cible est openshift-pipelines.
  4. Supprimer l'objet TektonInstallerSet pour l'interface utilisateur du Tekton Hub.

    $ oc get tektoninstallerset -o name | grep tekton-hub-ui | xargs oc delete
    Copy to Clipboard Toggle word wrap
    Note

    Après la suppression, l'Opérateur crée automatiquement un nouveau jeu d'installation Tekton Hub UI.

    Attendez et vérifiez l'état du Tekton Hub. Passez aux étapes suivantes lorsque la colonne READY affiche True.

    $ oc get tektonhub hub
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    NAME   VERSION        READY   REASON   APIURL                                                                                                  UIURL
    hub    1.8.0          True             https://tekton-hub-api-openshift-pipelines.apps.example.com   https://tekton-hub-ui-openshift-pipelines.apps.example.com
    Copy to Clipboard Toggle word wrap

3.8. Utiliser les pipelines comme du code

Avec Pipelines as Code, les administrateurs de clusters et les utilisateurs disposant des privilèges requis peuvent définir des modèles de pipelines dans le cadre de dépôts Git de code source. Lorsqu'elle est déclenchée par un push de code source ou une pull request pour le dépôt Git configuré, la fonctionnalité exécute le pipeline et signale son état.

3.8.1. Caractéristiques principales

Pipelines as Code prend en charge les fonctionnalités suivantes :

  • Statut et contrôle des pull requests sur la plateforme hébergeant le dépôt Git.
  • API GitHub Checks pour définir le statut d'une exécution de pipeline, y compris les rechecks.
  • Événements GitHub relatifs aux demandes d'extraction et aux livraisons.
  • Actions de demande d'extraction dans les commentaires, telles que /retest.
  • Filtrage des événements Git et pipeline séparé pour chaque événement.
  • Résolution automatique des tâches dans OpenShift Pipelines, y compris les tâches locales, Tekton Hub et les URL distantes.
  • Récupération des configurations à l'aide de l'API GitHub blobs et objets.
  • Liste de contrôle d'accès (ACL) sur une organisation GitHub, ou en utilisant un fichier de type Prow OWNER.
  • Le plugin tkn pac CLI pour gérer le bootstrapping et les pipelines en tant que dépôts de code.
  • Prise en charge de GitHub App, GitHub Webhook, Bitbucket Server et Bitbucket Cloud.

Pipelines as Code est installé dans l'espace de noms openshift-pipelines lorsque vous installez l'opérateur Red Hat OpenShift Pipelines. Pour plus de détails, voir Installing OpenShift Pipelines dans la section Additional resources.

Pour désactiver l'installation par défaut des pipelines en tant que code avec l'opérateur, définissez la valeur du paramètre enable sur false dans la ressource personnalisée TektonConfig.

...
 spec:
    platforms:
      openshift:
        pipelinesAsCode:
          enable: false
          settings:
            application-name: Pipelines as Code CI
            auto-configure-new-github-repo: "false"
            bitbucket-cloud-check-source-ip: "true"
            hub-catalog-name: tekton
            hub-url: https://api.hub.tekton.dev/v1
            remote-tasks: "true"
            secret-auto-create: "true"
...
Copy to Clipboard Toggle word wrap

En option, vous pouvez exécuter la commande suivante :

$ oc patch tektonconfig config --type="merge" -p '{"spec": {"platforms": {"openshift":{"pipelinesAsCode": {"enable": false}}}}}'
Copy to Clipboard Toggle word wrap

Pour activer l'installation par défaut de Pipelines as Code avec Red Hat OpenShift Pipelines Operator, définissez la valeur du paramètre enable sur true dans la ressource personnalisée TektonConfig:

...
 spec:
    platforms:
      openshift:
        pipelinesAsCode:
          enable: true
          settings:
            application-name: Pipelines as Code CI
            auto-configure-new-github-repo: "false"
            bitbucket-cloud-check-source-ip: "true"
            hub-catalog-name: tekton
            hub-url: https://api.hub.tekton.dev/v1
            remote-tasks: "true"
            secret-auto-create: "true"
...
Copy to Clipboard Toggle word wrap

En option, vous pouvez exécuter la commande suivante :

$ oc patch tektonconfig config --type="merge" -p '{"spec": {"platforms": {"openshift":{"pipelinesAsCode": {"enable": true}}}}}'
Copy to Clipboard Toggle word wrap

3.8.3. Installation de Pipelines as Code CLI

Les administrateurs de clusters peuvent utiliser les outils CLI tkn pac et opc sur des machines locales ou en tant que conteneurs pour les tests. Les outils tkn pac et opc CLI sont installés automatiquement lorsque vous installez tkn CLI pour Red Hat OpenShift Pipelines.

Vous pouvez installer les binaires tkn pac et opc version 1.10.0 pour les plateformes supportées :

Après avoir installé Pipelines as Code, les administrateurs de clusters peuvent configurer un fournisseur de services d'hébergement de dépôts Git. Actuellement, les services suivants sont pris en charge :

  • Application GitHub
  • GitHub Webhook
  • GitLab
  • Serveur Bitbucket
  • Bitbucket Cloud
Note

GitHub App est le service recommandé pour l'utilisation de Pipelines as Code.

Les GitHub Apps agissent comme un point d'intégration avec Red Hat OpenShift Pipelines et apportent l'avantage des flux de travail basés sur Git à OpenShift Pipelines. Les administrateurs de cluster peuvent configurer une seule application GitHub pour tous les utilisateurs du cluster. Pour que les applications GitHub fonctionnent avec Pipelines as Code, assurez-vous que le webhook de l'application GitHub pointe vers la route d'écoute d'événements de Pipelines as Code (ou le point d'arrivée) qui écoute les événements GitHub.

3.8.5.1. Configuration d'une application GitHub

Les administrateurs de cluster peuvent créer une application GitHub en exécutant la commande suivante :

$ tkn pac bootstrap github-app
Copy to Clipboard Toggle word wrap

Si le plugin tkn pac CLI n'est pas installé, vous pouvez créer l'application GitHub manuellement.

Procédure

Pour créer et configurer manuellement une application GitHub pour Pipelines as Code, procédez comme suit :

  1. Connectez-vous à votre compte GitHub.
  2. Allez sur SettingsDeveloper settingsGitHub Apps, et cliquez sur New GitHub App.
  3. Fournissez les informations suivantes dans le formulaire de l'application GitHub :

    • GitHub Application Name: OpenShift Pipelines
    • Homepage URL: URL de la console OpenShift
    • Webhook URL: La route ou l'URL d'entrée de Pipelines as Code. Vous pouvez la trouver en exécutant la commande echo https://$(oc get route -n openshift-pipelines pipelines-as-code-controller -o jsonpath='{.spec.host}').
    • Webhook secret: Un secret arbitraire. Vous pouvez générer un secret en exécutant la commande openssl rand -hex 20.
  4. Sélectionnez le site suivant : Repository permissions:

    • Checks: Read & Write
    • Contents: Read & Write
    • Issues: Read & Write
    • Metadata: Read-only
    • Pull request: Read & Write
  5. Sélectionnez le site suivant : Organization permissions:

    • Members: Readonly
    • Plan: Readonly
  6. Sélectionnez le site suivant : User permissions:

    • Check run
    • Issue comment
    • Pull request
    • Push
  7. Cliquez sur Create GitHub App.
  8. Sur la page Details de l'application GitHub nouvellement créée, notez l'adresse App ID affichée en haut.
  9. Dans la section Private keys, cliquez sur Generate Private key pour générer et télécharger automatiquement une clé privée pour l'application GitHub. Conservez la clé privée en toute sécurité afin de pouvoir la consulter et l'utiliser ultérieurement.
  10. Installez l'application créée sur un référentiel que vous souhaitez utiliser avec Pipelines as Code.

Pour configurer Pipelines as Code afin d'accéder à l'application GitHub nouvellement créée, exécutez la commande suivante :

$ oc -n openshift-pipelines create secret generic pipelines-as-code-secret \
        --from-literal github-private-key="$(cat <PATH_PRIVATE_KEY>)" \ 
1

        --from-literal github-application-id="<APP_ID>" \ 
2

        --from-literal webhook.secret="<WEBHOOK_SECRET>" 
3
Copy to Clipboard Toggle word wrap
1
Le chemin d'accès à la clé privée que vous avez téléchargée lors de la configuration de l'application GitHub.
2
Le site App ID de l'application GitHub.
3
Le secret du webhook fourni lors de la création de l'application GitHub.
Note

Pipelines as Code fonctionne automatiquement avec GitHub Enterprise en détectant le jeu d'en-têtes de GitHub Enterprise et en l'utilisant pour l'URL d'autorisation de l'API de GitHub Enterprise.

En tant qu'administrateur de cluster, vous pouvez configurer votre application GitHub avec le cluster OpenShift Container Platform pour utiliser Pipelines as Code. Cette configuration vous permet d'exécuter un ensemble de tâches nécessaires au déploiement de la construction.

Conditions préalables

Vous avez installé l'opérateur Red Hat OpenShift Pipelines pipelines-1.9 à partir du Operator Hub.

Procédure

  1. Dans la perspective de l'administrateur, accédez à Pipelines à l'aide du volet de navigation.
  2. Cliquez sur Setup GitHub App sur la page Pipelines.
  3. Saisissez le nom de votre application GitHub. Par exemple, pipelines-ci-clustername-testui.
  4. Cliquez sur Setup.
  5. Saisissez votre mot de passe Git lorsque le navigateur vous le demande.
  6. Cliquez sur Create GitHub App for <username>, où <username> est votre nom d'utilisateur GitHub.

Vérification

Après la création réussie de l'application GitHub, la console web d'OpenShift Container Platform s'ouvre et affiche les détails de l'application.

Github app details

Les détails de l'application GitHub sont enregistrés en tant que secret dans l'espace de noms openShift-pipelines.

Pour afficher les détails tels que le nom, le lien et le secret associés aux applications GitHub, naviguez jusqu'à Pipelines et cliquez sur View GitHub App.

Utilisez Pipelines as Code avec GitHub Webhook sur votre dépôt si vous ne pouvez pas créer une application GitHub. Cependant, l'utilisation de Pipelines as Code avec GitHub Webhook ne vous donne pas accès à l'API GitHub Check Runs. Le statut des tâches est ajouté en tant que commentaires sur la demande d'extraction et n'est pas disponible sous l'onglet Checks.

Note

Pipelines as Code avec GitHub Webhook ne prend pas en charge les commentaires GitOps tels que /retest et /ok-to-test. Pour redémarrer l'intégration continue (CI), créez un nouveau commit dans le dépôt. Par exemple, pour créer un nouveau commit sans aucune modification, vous pouvez utiliser la commande suivante :

git --amend -a --no-edit && git push --force-with-lease <origin> <branchname>
Copy to Clipboard Toggle word wrap

Conditions préalables

  • Assurez-vous que Pipelines as Code est installé sur le cluster.
  • Pour l'autorisation, créez un jeton d'accès personnel sur GitHub.

    • Pour générer un jeton sécurisé et précis, limitez son champ d'application à un référentiel spécifique et accordez les autorisations suivantes :

      Expand
      Tableau 3.7. Permissions pour les jetons à granularité fine
      NomAccès

      Administration

      Lecture seule

      Métadonnées

      Lecture seule

      Contenu

      Lecture seule

      Statuts d'engagement

      Lire et écrire

      Demande de retrait

      Lire et écrire

      Crochets Web

      Lire et écrire

    • Pour utiliser des jetons classiques, définissez la portée comme public_repo pour les dépôts publics et repo pour les dépôts privés. En outre, prévoyez une courte période d'expiration du jeton et notez le jeton dans un autre emplacement.

      Note

      Si vous souhaitez configurer le webhook à l'aide du CLI tkn pac, ajoutez la portée admin:repo_hook.

Procédure

  1. Configurez le webhook et créez une ressource personnalisée (CR) Repository.

    • Pour configurer un webhook et créer un CR Repository automatically à l'aide de l'outil CLI tkn pac, utilisez la commande suivante :

      $ tkn pac create repo
      Copy to Clipboard Toggle word wrap

      Exemple de sortie interactive

      ? Enter the Git repository url (default: https://github.com/owner/repo):
      ? Please enter the namespace where the pipeline should run (default: repo-pipelines):
      ! Namespace repo-pipelines is not found
      ? Would you like me to create the namespace repo-pipelines? Yes
      ✓ Repository owner-repo has been created in repo-pipelines namespace
      ✓ Setting up GitHub Webhook for Repository https://github.com/owner/repo
      👀 I have detected a controller url: https://pipelines-as-code-controller-openshift-pipelines.apps.example.com
      ? Do you want me to use it? Yes
      ? Please enter the secret to configure the webhook for payload validation (default: sJNwdmTifHTs):  sJNwdmTifHTs
      ℹ ️You now need to create a GitHub personal access token, please checkout the docs at https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token for the required scopes
      ? Please enter the GitHub access token:  ****************************************
      ✓ Webhook has been created on repository owner/repo
      🔑 Webhook Secret owner-repo has been created in the repo-pipelines namespace.
      🔑 Repository CR owner-repo has been updated with webhook secret in the repo-pipelines namespace
      ℹ Directory .tekton has been created.
      ✓ We have detected your repository using the programming language Go.
      ✓ A basic template has been created in /home/Go/src/github.com/owner/repo/.tekton/pipelinerun.yaml, feel free to customize it.
      Copy to Clipboard Toggle word wrap

    • Pour configurer un webhook et créer un Repository CR manually, procédez comme suit :

      1. Sur votre cluster OpenShift, extrayez l'URL publique du contrôleur Pipelines as Code.

        $ echo https://$(oc get route -n pipelines-as-code pipelines-as-code-controller -o jsonpath='{.spec.host}')
        Copy to Clipboard Toggle word wrap
      2. Sur votre dépôt ou organisation GitHub, effectuez les étapes suivantes :

        1. Allez sur Settings -> Webhooks et cliquez sur Add webhook.
        2. Définissez l'adresse Payload URL sur l'URL publique du contrôleur Pipelines as Code.
        3. Sélectionnez le type de contenu application/json.
        4. Ajoutez un secret pour le webhook et notez-le dans un autre emplacement. Avec openssl installé sur votre machine locale, générez un secret aléatoire.

          $ openssl rand -hex 20
          Copy to Clipboard Toggle word wrap
        5. Cliquez sur Let me select individual events et sélectionnez les événements suivants : Commit comments, Issue comments, Pull request, et Pushes.
        6. Cliquez sur Add webhook.
      3. Sur votre cluster OpenShift, créez un objet Secret avec le jeton d'accès personnel et le secret du webhook.

        $ oc -n target-namespace create secret generic github-webhook-config \
          --from-literal provider.token="<GITHUB_PERSONAL_ACCESS_TOKEN>" \
          --from-literal webhook.secret="<WEBHOOK_SECRET>"
        Copy to Clipboard Toggle word wrap
      4. Créer un CR Repository.

        Exemple : Repository CR

        apiVersion: "pipelinesascode.tekton.dev/v1alpha1"
        kind: Repository
        metadata:
          name: my-repo
          namespace: target-namespace
        spec:
          url: "https://github.com/owner/repo"
          git_provider:
            secret:
              name: "github-webhook-config"
              key: "provider.token" # Set this if you have a different key in your secret
            webhook_secret:
              name: "github-webhook-config"
              key: "webhook.secret" # Set this if you have a different key for your secret
        Copy to Clipboard Toggle word wrap

        Note

        Pipelines as Code suppose que l'objet OpenShift Secret et le CR Repository sont dans le même espace de noms.

  2. Facultatif : Pour un CR Repository existant, ajoutez plusieurs secrets GitHub Webhook ou fournissez un substitut pour un secret supprimé.

    1. Ajoutez un webhook à l'aide de l'outil CLI tkn pac.

      Exemple : Webhook supplémentaire à l'aide de la CLI de tkn pac

      $ tkn pac webhook add -n repo-pipelines
      Copy to Clipboard Toggle word wrap

      Exemple de sortie interactive

      ✓ Setting up GitHub Webhook for Repository https://github.com/owner/repo
      👀 I have detected a controller url: https://pipelines-as-code-controller-openshift-pipelines.apps.example.com
      ? Do you want me to use it? Yes
      ? Please enter the secret to configure the webhook for payload validation (default: AeHdHTJVfAeH):  AeHdHTJVfAeH
      ✓ Webhook has been created on repository owner/repo
      🔑 Secret owner-repo has been updated with webhook secert in the repo-pipelines namespace.
      Copy to Clipboard Toggle word wrap

    2. Mettre à jour la clé webhook.secret dans l'objet OpenShift Secret existant.
  3. Facultatif : Pour un CR Repository existant, mettez à jour le jeton d'accès personnel.

    • Mettez à jour le jeton d'accès personnel à l'aide de l'outil CLI tkn pac.

      Exemple : Mise à jour du jeton d'accès personnel à l'aide du CLI tkn pac

      $ tkn pac webhook update-token -n repo-pipelines
      Copy to Clipboard Toggle word wrap

      Exemple de sortie interactive

      ? Please enter your personal access token:  ****************************************
      🔑 Secret owner-repo has been updated with new personal access token in the repo-pipelines namespace.
      Copy to Clipboard Toggle word wrap

    • Vous pouvez également mettre à jour le jeton d'accès personnel en modifiant le CR Repository.

      1. Trouvez le nom du secret sur le site Repository CR.

        ...
        spec:
          git_provider:
            secret:
              name: "github-webhook-config"
        ...
        Copy to Clipboard Toggle word wrap
      2. Utilisez la commande oc patch pour mettre à jour les valeurs de $NEW_TOKEN dans l'espace de noms $target_namespace.

        $ oc -n $target_namespace patch secret github-webhook-config -p "{\"data\": {\"provider.token\": \"$(echo -n $NEW_TOKEN|base64 -w0)\"}}"
        Copy to Clipboard Toggle word wrap

3.8.7. Utiliser les pipelines comme du code avec GitLab

Si votre organisation ou votre projet utilise GitLab comme plateforme préférée, vous pouvez utiliser Pipelines as Code pour votre référentiel avec un webhook sur GitLab.

Conditions préalables

  • Assurez-vous que Pipelines as Code est installé sur le cluster.
  • Pour l'autorisation, générez un jeton d'accès personnel en tant que responsable du projet ou de l'organisation sur GitLab.

    Note
    • Si vous souhaitez configurer le webhook à l'aide du CLI tkn pac, ajoutez la portée admin:repo_hook au jeton.
    • L'utilisation d'un jeton pour un projet spécifique ne peut pas fournir un accès API à une demande de fusion (MR) envoyée à partir d'un dépôt forké. Dans de tels cas, Pipelines as Code affiche le résultat d'un pipeline en tant que commentaire sur la MR.

Procédure

  1. Configurez le webhook et créez une ressource personnalisée (CR) Repository.

    • Pour configurer un webhook et créer un CR Repository automatically à l'aide de l'outil CLI tkn pac, utilisez la commande suivante :

      $ tkn pac create repo
      Copy to Clipboard Toggle word wrap

      Exemple de sortie interactive

      ? Enter the Git repository url (default: https://gitlab.com/owner/repo):
      ? Please enter the namespace where the pipeline should run (default: repo-pipelines):
      ! Namespace repo-pipelines is not found
      ? Would you like me to create the namespace repo-pipelines? Yes
      ✓ Repository repositories-project has been created in repo-pipelines namespace
      ✓ Setting up GitLab Webhook for Repository https://gitlab.com/owner/repo
      ? Please enter the project ID for the repository you want to be configured,
        project ID refers to an unique ID (e.g. 34405323) shown at the top of your GitLab project : 17103
      👀 I have detected a controller url: https://pipelines-as-code-controller-openshift-pipelines.apps.example.com
      ? Do you want me to use it? Yes
      ? Please enter the secret to configure the webhook for payload validation (default: lFjHIEcaGFlF):  lFjHIEcaGFlF
      ℹ ️You now need to create a GitLab personal access token with `api` scope
      ℹ ️Go to this URL to generate one https://gitlab.com/-/profile/personal_access_tokens, see https://is.gd/rOEo9B for documentation
      ? Please enter the GitLab access token:  **************************
      ? Please enter your GitLab API URL::  https://gitlab.com
      ✓ Webhook has been created on your repository
      🔑 Webhook Secret repositories-project has been created in the repo-pipelines namespace.
      🔑 Repository CR repositories-project has been updated with webhook secret in the repo-pipelines namespace
      ℹ Directory .tekton has been created.
      ✓ A basic template has been created in /home/Go/src/gitlab.com/repositories/project/.tekton/pipelinerun.yaml, feel free to customize it.
      Copy to Clipboard Toggle word wrap

    • Pour configurer un webhook et créer un Repository CR manually, procédez comme suit :

      1. Sur votre cluster OpenShift, extrayez l'URL publique du contrôleur Pipelines as Code.

        $ echo https://$(oc get route -n pipelines-as-code pipelines-as-code-controller -o jsonpath='{.spec.host}')
        Copy to Clipboard Toggle word wrap
      2. Sur votre projet GitLab, effectuez les étapes suivantes :

        1. Utilisez la barre latérale gauche pour aller à Settings -> Webhooks.
        2. Définissez l'adresse URL sur l'URL publique du contrôleur Pipelines as Code.
        3. Ajoutez un secret pour le webhook et notez-le dans un autre emplacement. Avec openssl installé sur votre machine locale, générez un secret aléatoire.

          $ openssl rand -hex 20
          Copy to Clipboard Toggle word wrap
        4. Cliquez sur Let me select individual events et sélectionnez les événements suivants : Commit comments, Issue comments, Pull request, et Pushes.
        5. Cliquez sur Save changes.
      3. Sur votre cluster OpenShift, créez un objet Secret avec le jeton d'accès personnel et le secret du webhook.

        $ oc -n target-namespace create secret generic gitlab-webhook-config \
          --from-literal provider.token="<GITLAB_PERSONAL_ACCESS_TOKEN>" \
          --from-literal webhook.secret="<WEBHOOK_SECRET>"
        Copy to Clipboard Toggle word wrap
      4. Créer un CR Repository.

        Exemple : Repository CR

        apiVersion: "pipelinesascode.tekton.dev/v1alpha1"
        kind: Repository
        metadata:
          name: my-repo
          namespace: target-namespace
        spec:
          url: "https://gitlab.com/owner/repo" 
        1
        
          git_provider:
            secret:
              name: "gitlab-webhook-config"
              key: "provider.token" # Set this if you have a different key in your secret
            webhook_secret:
              name: "gitlab-webhook-config"
              key: "webhook.secret" # Set this if you have a different key for your secret
        Copy to Clipboard Toggle word wrap

        1
        Actuellement, Pipelines as Code ne détecte pas automatiquement les instances privées pour GitLab. Dans ce cas, spécifiez l'URL de l'API sous la spécification git_provider.url. En général, vous pouvez utiliser la spécification git_provider.url pour remplacer manuellement l'URL de l'API.
    Note
    • Pipelines as Code suppose que l'objet OpenShift Secret et le CR Repository sont dans le même espace de noms.
  2. Facultatif : Pour un CR Repository existant, ajoutez plusieurs secrets GitLab Webhook ou fournissez un substitut pour un secret supprimé.

    1. Ajoutez un webhook à l'aide de l'outil CLI tkn pac.

      Exemple : Ajout d'un webhook supplémentaire à l'aide du CLI tkn pac

      $ tkn pac webhook add -n repo-pipelines
      Copy to Clipboard Toggle word wrap

      Exemple de sortie interactive

      ✓ Setting up GitLab Webhook for Repository https://gitlab.com/owner/repo
      👀 I have detected a controller url: https://pipelines-as-code-controller-openshift-pipelines.apps.example.com
      ? Do you want me to use it? Yes
      ? Please enter the secret to configure the webhook for payload validation (default: AeHdHTJVfAeH):  AeHdHTJVfAeH
      ✓ Webhook has been created on repository owner/repo
      🔑 Secret owner-repo has been updated with webhook secert in the repo-pipelines namespace.
      Copy to Clipboard Toggle word wrap

    2. Mettre à jour la clé webhook.secret dans l'objet OpenShift Secret existant.
  3. Facultatif : Pour un CR Repository existant, mettez à jour le jeton d'accès personnel.

    • Mettez à jour le jeton d'accès personnel à l'aide de l'outil CLI tkn pac.

      Exemple : Mise à jour du jeton d'accès personnel à l'aide du CLI tkn pac

      $ tkn pac webhook update-token -n repo-pipelines
      Copy to Clipboard Toggle word wrap

      Exemple de sortie interactive

      ? Please enter your personal access token:  ****************************************
      🔑 Secret owner-repo has been updated with new personal access token in the repo-pipelines namespace.
      Copy to Clipboard Toggle word wrap

    • Vous pouvez également mettre à jour le jeton d'accès personnel en modifiant le CR Repository.

      1. Trouvez le nom du secret sur le site Repository CR.

        ...
        spec:
          git_provider:
            secret:
              name: "gitlab-webhook-config"
        ...
        Copy to Clipboard Toggle word wrap
      2. Utilisez la commande oc patch pour mettre à jour les valeurs de $NEW_TOKEN dans l'espace de noms $target_namespace.

        $ oc -n $target_namespace patch secret gitlab-webhook-config -p "{\"data\": {\"provider.token\": \"$(echo -n $NEW_TOKEN|base64 -w0)\"}}"
        Copy to Clipboard Toggle word wrap

Ressources complémentaires

Si votre organisation ou votre projet utilise Bitbucket Cloud comme plateforme préférée, vous pouvez utiliser Pipelines as Code pour votre référentiel avec un webhook sur Bitbucket Cloud.

Conditions préalables

  • Assurez-vous que Pipelines as Code est installé sur le cluster.
  • Créer un mot de passe pour l'application sur Bitbucket Cloud.

    • Cochez les cases suivantes pour ajouter les autorisations appropriées au jeton :

      • Compte : Email, Read
      • Adhésion à l'espace de travail : Read, Write
      • Projets : Read, Write
      • Questions : Read, Write
      • Demandes d'extension : Read, Write

        Note
        • Si vous souhaitez configurer le webhook à l'aide du CLI tkn pac, ajoutez les autorisations Webhooks: Read et Write au jeton.
        • Une fois généré, sauvegardez une copie du mot de passe ou du jeton dans un autre endroit.

Procédure

  1. Configurez le webhook et créez un CR Repository.

    • Pour configurer un webhook et créer un CR Repository automatically à l'aide de l'outil CLI tkn pac, utilisez la commande suivante :

      $ tkn pac create repo
      Copy to Clipboard Toggle word wrap

      Exemple de sortie interactive

      ? Enter the Git repository url (default: https://bitbucket.org/workspace/repo):
      ? Please enter the namespace where the pipeline should run (default: repo-pipelines):
      ! Namespace repo-pipelines is not found
      ? Would you like me to create the namespace repo-pipelines? Yes
      ✓ Repository workspace-repo has been created in repo-pipelines namespace
      ✓ Setting up Bitbucket Webhook for Repository https://bitbucket.org/workspace/repo
      ? Please enter your bitbucket cloud username:  <username>
      ℹ ️You now need to create a Bitbucket Cloud app password, please checkout the docs at https://is.gd/fqMHiJ for the required permissions
      ? Please enter the Bitbucket Cloud app password:  ************************************
      👀 I have detected a controller url: https://pipelines-as-code-controller-openshift-pipelines.apps.example.com
      ? Do you want me to use it? Yes
      ✓ Webhook has been created on repository workspace/repo
      🔑 Webhook Secret workspace-repo has been created in the repo-pipelines namespace.
      🔑 Repository CR workspace-repo has been updated with webhook secret in the repo-pipelines namespace
      ℹ Directory .tekton has been created.
      ✓ A basic template has been created in /home/Go/src/bitbucket/repo/.tekton/pipelinerun.yaml, feel free to customize it.
      Copy to Clipboard Toggle word wrap

    • Pour configurer un webhook et créer un Repository CR manually, procédez comme suit :

      1. Sur votre cluster OpenShift, extrayez l'URL publique du contrôleur Pipelines as Code.

        $ echo https://$(oc get route -n pipelines-as-code pipelines-as-code-controller -o jsonpath='{.spec.host}')
        Copy to Clipboard Toggle word wrap
      2. Sur Bitbucket Cloud, effectuez les étapes suivantes :

        1. Utilisez le volet de navigation gauche de votre référentiel Bitbucket Cloud pour aller sur Repository settings -> Webhooks et cliquez sur Add webhook.
        2. Définir un site Title. Par exemple, "Pipelines as Code".
        3. Définissez l'adresse URL sur l'URL publique du contrôleur Pipelines as Code.
        4. Sélectionnez ces événements : Repository: Push, Pull Request: Created, Pull Request: Updated, et Pull Request: Comment created.
        5. Cliquez sur Save.
      3. Sur votre cluster OpenShift, créez un objet Secret avec le mot de passe de l'application dans l'espace de noms cible.

        $ oc -n target-namespace create secret generic bitbucket-cloud-token \
          --from-literal provider.token="<BITBUCKET_APP_PASSWORD>"
        Copy to Clipboard Toggle word wrap
      4. Créer un CR Repository.

        Exemple : Repository CR

        apiVersion: "pipelinesascode.tekton.dev/v1alpha1"
        kind: Repository
        metadata:
          name: my-repo
          namespace: target-namespace
        spec:
          url: "https://bitbucket.com/workspace/repo"
          branch: "main"
          git_provider:
            user: "<BITBUCKET_USERNAME>" 
        1
        
            secret:
              name: "bitbucket-cloud-token" 
        2
        
              key: "provider.token" # Set this if you have a different key in your secret
        Copy to Clipboard Toggle word wrap

        1
        Vous ne pouvez faire référence à un utilisateur que par l'adresse ACCOUNT_ID dans un fichier propriétaire.
        2
        Pipelines as Code suppose que le secret mentionné dans la spécification git_provider.secret et la CR Repository se trouve dans le même espace de noms.
    Note
    • Les commandes tkn pac create et tkn pac bootstrap ne sont pas prises en charge sur Bitbucket Cloud.
    • Bitbucket Cloud ne prend pas en charge les secrets des webhooks. Pour sécuriser la charge utile et empêcher le détournement de l'IC, Pipelines as Code récupère la liste des adresses IP de Bitbucket Cloud et s'assure que les réceptions de webhook proviennent uniquement de ces adresses IP.

      • Pour désactiver le comportement par défaut, définissez bitbucket-cloud-check-source-ip key comme false dans la carte de configuration de Pipelines as Code pour l'espace de noms pipelines-as-code.
      • Pour autoriser d'autres adresses IP ou réseaux sûrs, ajoutez-les sous forme de valeurs séparées par des virgules à la clé bitbucket-cloud-additional-source-ip dans la carte de configuration Pipelines as Code pour l'espace de noms pipelines-as-code.
  2. Facultatif : Pour un CR Repository existant, ajoutez plusieurs secrets Bitbucket Cloud Webhook ou fournissez un substitut pour un secret supprimé.

    1. Ajoutez un webhook à l'aide de l'outil CLI tkn pac.

      Exemple : Ajout d'un webhook supplémentaire à l'aide du CLI tkn pac

      $ tkn pac webhook add -n repo-pipelines
      Copy to Clipboard Toggle word wrap

      Exemple de sortie interactive

      ✓ Setting up Bitbucket Webhook for Repository https://bitbucket.org/workspace/repo
      ? Please enter your bitbucket cloud username:  <username>
      👀 I have detected a controller url: https://pipelines-as-code-controller-openshift-pipelines.apps.example.com
      ? Do you want me to use it? Yes
      ✓ Webhook has been created on repository workspace/repo
      🔑 Secret workspace-repo has been updated with webhook secret in the repo-pipelines namespace.
      Copy to Clipboard Toggle word wrap

      Note

      Utilisez l'option [-n <namespace>] avec la commande tkn pac webhook add uniquement lorsque le CR Repository existe dans un espace de noms autre que l'espace de noms par défaut.

    2. Mettre à jour la clé webhook.secret dans l'objet OpenShift Secret existant.
  3. Facultatif : Pour un CR Repository existant, mettez à jour le jeton d'accès personnel.

    • Mettez à jour le jeton d'accès personnel à l'aide de l'outil CLI tkn pac.

      Exemple : Mise à jour du jeton d'accès personnel à l'aide du CLI tkn pac

      $ tkn pac webhook update-token -n repo-pipelines
      Copy to Clipboard Toggle word wrap

      Exemple de sortie interactive

      ? Please enter your personal access token:  ****************************************
      🔑 Secret owner-repo has been updated with new personal access token in the repo-pipelines namespace.
      Copy to Clipboard Toggle word wrap

      Note

      Utilisez l'option [-n <namespace>] avec la commande tkn pac webhook update-token uniquement lorsque le CR Repository existe dans un espace de noms autre que l'espace de noms par défaut.

    • Vous pouvez également mettre à jour le jeton d'accès personnel en modifiant le CR Repository.

      1. Trouvez le nom du secret sur le site Repository CR.

        ...
        spec:
          git_provider:
            user: "<BITBUCKET_USERNAME>"
            secret:
              name: "bitbucket-cloud-token"
              key: "provider.token"
        ...
        Copy to Clipboard Toggle word wrap
      2. Utilisez la commande oc patch pour mettre à jour les valeurs de $password dans l'espace de noms $target_namespace.

        $ oc -n $target_namespace patch secret bitbucket-cloud-token -p "{\"data\": {\"provider.token\": \"$(echo -n $NEW_TOKEN|base64 -w0)\"}}"
        Copy to Clipboard Toggle word wrap

Si votre organisation ou votre projet utilise Bitbucket Server comme plateforme préférée, vous pouvez utiliser Pipelines as Code pour votre référentiel avec un webhook sur Bitbucket Server.

Conditions préalables

  • Assurez-vous que Pipelines as Code est installé sur le cluster.
  • Générer un jeton d'accès personnel en tant que gestionnaire du projet sur le serveur Bitbucket, et enregistrer une copie de ce jeton dans un autre emplacement.

    Note
    • Le jeton doit avoir les autorisations PROJECT_ADMIN et REPOSITORY_ADMIN.
    • Le token doit avoir accès aux dépôts forkés dans les pull requests.

Procédure

  1. Sur votre cluster OpenShift, extrayez l'URL publique du contrôleur Pipelines as Code.

    $ echo https://$(oc get route -n pipelines-as-code pipelines-as-code-controller -o jsonpath='{.spec.host}')
    Copy to Clipboard Toggle word wrap
  2. Sur le serveur Bitbucket, effectuez les étapes suivantes :

    1. Utilisez le volet de navigation gauche de votre référentiel Bitbucket Data Center pour aller sur Repository settings -> Webhooks et cliquez sur Add webhook.
    2. Définir un site Title. Par exemple, "Pipelines as Code".
    3. Définissez l'adresse URL sur l'URL publique du contrôleur Pipelines as Code.
    4. Ajoutez un secret pour le webhook et sauvegardez-en une copie dans un autre emplacement. Si openssl est installé sur votre machine locale, générez un secret aléatoire à l'aide de la commande suivante :

      $ openssl rand -hex 20
      Copy to Clipboard Toggle word wrap
    5. Sélectionnez les événements suivants :

      • Repository: Push
      • Repository: Modified
      • Pull Request: Opened
      • Pull Request: Source branch updated
      • Pull Request: Comment added
    6. Cliquez sur Save.
  3. Sur votre cluster OpenShift, créez un objet Secret avec le mot de passe de l'application dans l'espace de noms cible.

    $ oc -n target-namespace create secret generic bitbucket-server-webhook-config \
      --from-literal provider.token="<PERSONAL_TOKEN>" \
      --from-literal webhook.secret="<WEBHOOK_SECRET>"
    Copy to Clipboard Toggle word wrap
  4. Créer un CR Repository.

    Exemple : Repository CR

    ---
      apiVersion: "pipelinesascode.tekton.dev/v1alpha1"
      kind: Repository
      metadata:
        name: my-repo
        namespace: target-namespace
      spec:
        url: "https://bitbucket.com/workspace/repo"
        git_provider:
          url: "https://bitbucket.server.api.url/rest" 
    1
    
          user: "<BITBUCKET_USERNAME>" 
    2
    
          secret: 
    3
    
            name: "bitbucket-server-webhook-config"
            key: "provider.token" # Set this if you have a different key in your secret
          webhook_secret:
            name: "bitbucket-server-webhook-config"
            key: "webhook.secret" # Set this if you have a different key for your secret
    Copy to Clipboard Toggle word wrap

    1
    Assurez-vous que vous avez la bonne URL de l'API du serveur Bitbucket sans le suffixe /api/v1.0. En général, l'installation par défaut a un suffixe /rest.
    2
    Vous ne pouvez faire référence à un utilisateur que par l'adresse ACCOUNT_ID dans un fichier propriétaire.
    3
    Pipelines as Code suppose que le secret mentionné dans la spécification git_provider.secret et la CR Repository se trouve dans le même espace de noms.
    Note

    Les commandes tkn pac create et tkn pac bootstrap ne sont pas prises en charge par le serveur Bitbucket.

Pour configurer Pipelines as Code avec un dépôt Git accessible avec un certificat personnalisé ou signé de manière privée, vous pouvez exposer le certificat à Pipelines as Code.

Procédure

  • Si vous avez installé Pipelines as Code à l'aide de l'Opérateur Red Hat OpenShift Pipelines, vous pouvez ajouter votre certificat personnalisé au cluster à l'aide de l'objet Proxy. L'Opérateur expose le certificat dans tous les composants et charges de travail de Red Hat OpenShift Pipelines, y compris Pipelines as Code.

3.8.11. Utilisation de Repository CRD avec Pipelines as Code

La ressource personnalisée (CR) Repository a les fonctions principales suivantes :

  • Informer Pipelines as Code sur le traitement d'un événement à partir d'une URL.
  • Informer Pipelines as Code de l'espace de noms pour l'exécution des pipelines.
  • Référence un secret d'API, un nom d'utilisateur ou une URL d'API nécessaire pour les plates-formes du fournisseur Git lors de l'utilisation des méthodes webhook.
  • Fournit le dernier état d'exécution du pipeline pour un référentiel.

Vous pouvez utiliser le CLI tkn pac ou d'autres méthodes alternatives pour créer un CR Repository dans l'espace de noms cible. Par exemple, vous pouvez créer un CR à l'intérieur de l'espace de noms cible :

cat <<EOF|kubectl create -n my-pipeline-ci -f- 
1


apiVersion: "pipelinesascode.tekton.dev/v1alpha1"
kind: Repository
metadata:
  name: project-repository
spec:
  url: "https://github.com/<repository>/<project>"
EOF
Copy to Clipboard Toggle word wrap
1
my-pipeline-ci est l'espace de noms cible.

Chaque fois qu'il y a un événement provenant de l'URL tel que https://github.com/<repository>/<project>pipelines as Code l'identifie et commence à vérifier le contenu du référentiel <repository>/<project> pour que l'exécution des pipelines corresponde au contenu du répertoire .tekton/.

Note
  • Vous devez créer le CRD Repository dans le même espace de noms que celui où les pipelines associés au référentiel de code source seront exécutés ; il ne peut pas cibler un espace de noms différent.
  • Si plusieurs CRD Repository correspondent au même événement, Pipelines as Code ne traitera que le plus ancien. Si vous avez besoin de faire correspondre un espace de noms spécifique, ajoutez l'annotation pipelinesascode.tekton.dev/target-namespace: "<mynamespace>". Ce ciblage explicite empêche un acteur malveillant d'exécuter un pipeline dans un espace de noms auquel il n'a pas accès.

Vous pouvez utiliser la spécification concurrency_limit dans le CRD Repository pour définir le nombre maximum d'exécutions simultanées du pipeline pour un référentiel.

...
spec:
  concurrency_limit: <number>
  ...
Copy to Clipboard Toggle word wrap

Si plusieurs séries de pipelines correspondent à un événement, les séries de pipelines qui correspondent à l'événement commencent dans l'ordre alphabétique.

Par exemple, si vous avez trois projets de pipeline dans le répertoire .tekton et que vous créez une demande d'extraction avec un concurrency_limit de 1 dans la configuration du référentiel, tous les projets de pipeline sont exécutés dans l'ordre alphabétique. À tout moment, un seul pipeline est en cours d'exécution, tandis que les autres sont en file d'attente.

3.8.12. Utiliser les pipelines comme résolveur de code

Le résolveur de Pipelines as Code permet de s'assurer qu'un pipeline en cours d'exécution n'entre pas en conflit avec d'autres.

Pour diviser votre pipeline et votre cycle de pipeline, stockez les fichiers dans le répertoire .tekton/ ou ses sous-répertoires.

Si Pipelines as Code observe une exécution de pipeline avec une référence à une tâche ou à un pipeline dans un fichier YAML situé dans le répertoire .tekton/, Pipelines as Code résout automatiquement la tâche référencée pour fournir une exécution de pipeline unique avec une spécification intégrée dans un objet PipelineRun.

Si Pipelines as Code ne peut pas résoudre les tâches référencées dans la définition Pipeline ou PipelineSpec, l'exécution échoue avant d'appliquer tout changement au cluster. Vous pouvez voir le problème sur votre plateforme Git et dans les événements de l'espace de noms cible où se trouve le CR Repository.

Le résolveur passe à la résolution s'il observe les types de tâches suivants :

  • Une référence à une tâche de cluster.
  • Une tâche ou un ensemble de tâches.
  • Une tâche personnalisée avec une version de l'API qui n'a pas de préfixe tekton.dev/.

Le résolveur utilise ces tâches littéralement, sans aucune transformation.

Pour tester votre pipeline en local avant de l'envoyer dans une pull request, utilisez la commande tkn pac resolve.

Vous pouvez également référencer des pipelines et des tâches à distance.

Pipelines as Code prend en charge la récupération de tâches ou de pipelines distants en utilisant des annotations dans l'exécution d'un pipeline. Si vous faites référence à une tâche distante dans une exécution de pipeline, ou à un pipeline dans un objet PipelineRun ou PipelineSpec, le résolveur de Pipelines as Code l'inclut automatiquement. S'il y a une erreur lors de la récupération des tâches distantes ou de leur analyse, Pipelines as Code arrête le traitement des tâches.

Pour inclure des tâches à distance, reportez-vous aux exemples d'annotation suivants :

Référencement des tâches à distance dans Tekton Hub

  • Référencer une seule tâche à distance dans Tekton Hub.

    ...
      pipelinesascode.tekton.dev/task: "git-clone" 
    1
    
    ...
    Copy to Clipboard Toggle word wrap
    1
    Pipelines as Code inclut la dernière version de la tâche du Tekton Hub.
  • Référencement de plusieurs tâches à distance à partir de Tekton Hub

    ...
      pipelinesascode.tekton.dev/task: "[git-clone, golang-test, tkn]"
    ...
    Copy to Clipboard Toggle word wrap
  • Référencez plusieurs tâches à distance à partir du Tekton Hub en utilisant le suffixe -<NUMBER>.

    ...
      pipelinesascode.tekton.dev/task: "git-clone"
      pipelinesascode.tekton.dev/task-1: "golang-test"
      pipelinesascode.tekton.dev/task-2: "tkn" 
    1
    
    ...
    Copy to Clipboard Toggle word wrap
    1
    Par défaut, Pipelines as Code interprète la chaîne comme la dernière tâche à récupérer dans le Tekton Hub.
  • Référence une version spécifique d'une tâche à distance à partir du Tekton Hub.

    ...
      pipelinesascode.tekton.dev/task: "[git-clone:0.1]" 
    1
    
    ...
    Copy to Clipboard Toggle word wrap
    1
    Se réfère à la version 0.1 de la tâche à distance git-clone du Tekton Hub.

Tâches à distance à l'aide d'URL

...
  pipelinesascode.tekton.dev/task: "<https://remote.url/task.yaml>" 
1

...
Copy to Clipboard Toggle word wrap

1
L'URL publique de la tâche distante.
Note
  • Si vous utilisez GitHub et que l'URL de la tâche distante utilise le même hôte que le CRD Repository, Pipelines as Code utilise le jeton GitHub et récupère l'URL à l'aide de l'API GitHub.

    Par exemple, si vous avez une URL de dépôt similaire à https://github.com/<organization>/<repository> et que l'URL HTTP distante fait référence à un blob GitHub similaire à https://github.com/<organization>/<repository>/blob/<mainbranch>/<path>/<file>pipelines as Code récupère les fichiers de définition de tâches de ce référentiel privé avec le jeton GitHub App.

    Lorsque vous travaillez sur un dépôt public GitHub, Pipelines as Code agit de la même manière pour une URL brute GitHub telle que https://raw.githubusercontent.com/<organization>/<repository>/<mainbranch>/<path>/<file>.

  • Les jetons GitHub App sont limités au propriétaire ou à l'organisation où se trouve le dépôt. Lorsque vous utilisez la méthode GitHub webhook, vous pouvez récupérer n'importe quel dépôt privé ou public dans n'importe quelle organisation où le jeton personnel est autorisé.

Référencer une tâche à partir d'un fichier YAML dans votre référentiel

...
pipelinesascode.tekton.dev/task: "<share/tasks/git-clone.yaml>" 
1

...
Copy to Clipboard Toggle word wrap

1
Chemin relatif vers le fichier local contenant la définition de la tâche.

Vous pouvez partager une définition de pipeline entre plusieurs référentiels en utilisant l'annotation de pipeline distant.

...
    pipelinesascode.tekton.dev/pipeline: "<https://git.provider/raw/pipeline.yaml>" 
1

...
Copy to Clipboard Toggle word wrap
1
À la définition du pipeline distant. Vous pouvez également fournir des emplacements pour des fichiers à l'intérieur du même référentiel.
Note

Vous ne pouvez faire référence qu'à une seule définition de pipeline à l'aide de l'annotation.

3.8.13. Création d'un pipeline à l'aide de Pipelines as Code

Pour exécuter des pipelines en utilisant Pipelines as Code, vous pouvez créer des définitions ou des modèles de pipelines sous forme de fichiers YAML dans le répertoire .tekton/ du référentiel. Vous pouvez référencer des fichiers YAML dans d'autres référentiels à l'aide d'URL distantes, mais l'exécution des pipelines n'est déclenchée que par des événements dans le référentiel contenant le répertoire .tekton/.

Le résolveur Pipelines as Code regroupe les exécutions de pipelines avec toutes les tâches en une seule exécution de pipeline sans dépendances externes.

Note
  • Pour les pipelines, utilisez au moins un pipeline exécuté avec une spécification ou un objet Pipeline séparé.
  • Pour les tâches, intégrer la spécification de la tâche dans un pipeline ou la définir séparément en tant qu'objet "tâche".

Paramétrer les commits et les URL

Vous pouvez spécifier les paramètres de votre livraison et de votre URL en utilisant des variables dynamiques et extensibles au format {{<var>}}. Actuellement, vous pouvez utiliser les variables suivantes :

  • {{repo_owner}}: Le propriétaire du référentiel.
  • {{repo_name}}: Le nom du référentiel.
  • {{repo_url}}: L'URL complète du dépôt.
  • {{revision}}: Révision SHA complète d'un commit.
  • {{sender}}: Le nom d'utilisateur ou l'identifiant du compte de l'expéditeur du commit.
  • {{source_branch}}: Le nom de la branche d'où provient l'événement.
  • {{target_branch}}: Le nom de la branche ciblée par l'événement. Pour les événements "push", c'est la même chose que source_branch.
  • {{pull_request_number}}: Le numéro de la demande de retrait ou de fusion, défini uniquement pour un type d'événement pull_request.
  • {{git_auth_secret}}: Le nom secret qui est généré automatiquement avec le jeton du fournisseur Git pour l'extraction des dépôts privés.

Correspondance entre un événement et une exécution de pipeline

Vous pouvez faire correspondre différents événements du fournisseur Git avec chaque pipeline en utilisant des annotations spéciales sur l'exécution du pipeline. S'il y a plusieurs pipelines correspondant à un événement, Pipelines as Code les exécute en parallèle et envoie les résultats au fournisseur Git dès qu'un pipeline se termine.

Correspondance entre un événement "pull" et une exécution de pipeline

Vous pouvez utiliser l'exemple suivant pour faire correspondre le pipeline pipeline-pr-main avec un événement pull_request qui cible la branche main:

...
  metadata:
    name: pipeline-pr-main
  annotations:
    pipelinesascode.tekton.dev/on-target-branch: "[main]" 
1

    pipelinesascode.tekton.dev/on-event: "[pull_request]"
...
Copy to Clipboard Toggle word wrap
1
Vous pouvez spécifier plusieurs branches en ajoutant des entrées séparées par des virgules. Par exemple, "[main, release-nightly]". En outre, vous pouvez spécifier ce qui suit :
  • Références complètes à des branches telles que "refs/heads/main"
  • Globs avec pattern matching tels que "refs/heads/\*"
  • Tags tels que "refs/tags/1.\*"

Correspondance entre un événement "push" et une exécution du pipeline

Vous pouvez utiliser l'exemple suivant pour faire correspondre le pipeline pipeline-push-on-main avec un événement push ciblant la branche refs/heads/main:

...
  metadata:
    name: pipeline-push-on-main
  annotations:
    pipelinesascode.tekton.dev/on-target-branch: "[refs/heads/main]" 
1

    pipelinesascode.tekton.dev/on-event: "[push]"
...
Copy to Clipboard Toggle word wrap
1
Vous pouvez spécifier plusieurs branches en ajoutant des entrées séparées par des virgules. Par exemple, "[main, release-nightly]". En outre, vous pouvez spécifier ce qui suit :
  • Références complètes à des branches telles que "refs/heads/main"
  • Globs avec pattern matching tels que "refs/heads/\*"
  • Tags tels que "refs/tags/1.\*"

Correspondance avancée des événements

Pipelines as Code prend en charge l'utilisation du filtrage basé sur le langage d'expression commun (CEL) pour une correspondance avancée des événements. Si vous avez l'annotation pipelinesascode.tekton.dev/on-cel-expression dans votre pipeline, Pipelines as Code utilise l'expression CEL et saute l'annotation on-target-branch. Par rapport à la simple correspondance de l'annotation on-target-branch, les expressions CEL permettent un filtrage complexe et la négation.

Pour utiliser le filtrage basé sur la CEL avec Pipelines as Code, examinez les exemples d'annotations suivants :

  • Correspondre à un événement pull_request ciblant la branche main et provenant de la branche wip:

    ...
      pipelinesascode.tekton.dev/on-cel-expression: |
        event == "pull_request" && target_branch == "main" && source_branch == "wip"
    ...
    Copy to Clipboard Toggle word wrap
  • Pour n'exécuter un pipeline que si le chemin d'accès a changé, vous pouvez utiliser la fonction suffixe de .pathChanged avec un motif global :

    ...
      pipelinesascode.tekton.dev/on-cel-expression: |
        event == "pull_request" && "docs/\*.md".pathChanged() 
    1
    
    ...
    Copy to Clipboard Toggle word wrap
    1
    Correspond à tous les fichiers markdown du répertoire docs.
  • Pour correspondre à toutes les pull requests commençant par le titre [DOWNSTREAM]:

    ...
      pipelinesascode.tekton.dev/on-cel-expression: |
        event == "pull_request && event_title.startsWith("[DOWNSTREAM]")
    ...
    Copy to Clipboard Toggle word wrap
  • Pour lancer un pipeline sur un événement pull_request, mais ignorer la branche experimental:

    ...
      pipelinesascode.tekton.dev/on-cel-expression: |
        event == "pull_request" && target_branch != experimental"
    ...
    Copy to Clipboard Toggle word wrap

Pour un filtrage avancé basé sur la CEL lors de l'utilisation de Pipelines as Code, vous pouvez utiliser les champs et les fonctions de suffixe suivants :

  • event: Un événement push ou pull_request.
  • target_branch: La branche cible.
  • source_branch: La branche d'origine d'un événement pull_request. Pour les événements push, c'est la même chose que target_branch.
  • event_title: Correspond au titre de l'événement, tel que le titre du commit pour un événement push, et le titre d'une demande d'extraction ou de fusion pour un événement pull_request. Actuellement, seuls GitHub, Gitlab et Bitbucket Cloud sont des fournisseurs pris en charge.
  • .pathChanged: Une fonction de suffixe à une chaîne de caractères. La chaîne peut être un glob d'un chemin pour vérifier si le chemin a changé. Actuellement, seuls GitHub et Gitlab sont pris en charge en tant que fournisseurs.

Utilisation du jeton temporaire de l'application GitHub pour les opérations de l'API Github

Vous pouvez utiliser le jeton d'installation temporaire généré par Pipelines as Code from GitHub App pour accéder à l'API GitHub. La valeur du jeton est stockée dans la variable dynamique temporaire {{git_auth_secret}} générée pour les dépôts privés dans la clé git-provider-token.

Par exemple, pour ajouter un commentaire à une pull request, vous pouvez utiliser la tâche github-add-comment de Tekton Hub en utilisant une annotation Pipelines as Code :

...
  pipelinesascode.tekton.dev/task: "github-add-comment"
...
Copy to Clipboard Toggle word wrap

Vous pouvez ensuite ajouter une tâche à la section tasks ou aux tâches finally dans la définition de l'exécution du pipeline :

[...]
tasks:
  - name:
      taskRef:
        name: github-add-comment
      params:
        - name: REQUEST_URL
          value: "{{ repo_url }}/pull/{{ pull_request_number }}" 
1

        - name: COMMENT_OR_FILE
          value: "Pipelines as Code IS GREAT!"
        - name: GITHUB_TOKEN_SECRET_NAME
          value: "{{ git_auth_secret }}"
        - name: GITHUB_TOKEN_SECRET_KEY
          value: "git-provider-token"
...
Copy to Clipboard Toggle word wrap
1
En utilisant les variables dynamiques, vous pouvez réutiliser ce modèle de snippet pour n'importe quelle demande d'extraction de n'importe quel dépôt.
Note

Sur GitHub Apps, le jeton d'installation généré est disponible pendant 8 heures et limité au dépôt d'où proviennent les événements, sauf configuration différente sur le cluster.

Ressources complémentaires

Avec la configuration par défaut, Pipelines as Code exécute tout pipeline exécuté dans le répertoire .tekton/ de la branche par défaut du référentiel, lorsque des événements spécifiés tels que pull request ou push se produisent sur le référentiel. Par exemple, si un pipeline exécuté sur la branche par défaut a l'annotation pipelinesascode.tekton.dev/on-event: "[pull_request]", il sera exécuté à chaque fois qu'un événement de demande d'extraction (pull request) se produit.

Dans le cas d'une pull request ou d'une merge request, Pipelines as Code exécute également des pipelines à partir de branches autres que la branche par défaut, si les conditions suivantes sont remplies par l'auteur de la pull request :

  • L'auteur est le propriétaire du dépôt.
  • L'auteur est un collaborateur du dépôt.
  • L'auteur est un membre public de l'organisation du dépôt.
  • L'auteur de la demande d'extraction est listé dans un fichier OWNER situé dans la racine du dépôt de la branche main comme défini dans la configuration GitHub pour le dépôt. De plus, l'auteur de la demande d'extraction est ajouté à la section approvers ou reviewers. Par exemple, si un auteur est listé dans la section approvers, alors une demande d'extraction soulevée par cet auteur démarre l'exécution du pipeline.
...
  approvers:
    - approved
...
Copy to Clipboard Toggle word wrap

Si l'auteur de la demande d'extraction ne répond pas aux exigences, un autre utilisateur qui répond aux exigences peut commenter /ok-to-test sur la demande d'extraction et lancer l'exécution du pipeline.

Exécution du pipeline

Une exécution de pipeline s'exécute toujours dans l'espace de noms du CRD Repository associé au référentiel qui a généré l'événement.

Vous pouvez observer l'exécution de votre pipeline à l'aide de l'outil CLI tkn pac.

  • Pour suivre l'exécution de la dernière opération de pipeline, utilisez l'exemple suivant :

    $ tkn pac logs -n <my-pipeline-ci> -L 
    1
    Copy to Clipboard Toggle word wrap
    1
    my-pipeline-ci est l'espace de noms pour le CRD Repository.
  • Pour suivre l'exécution d'un pipeline de manière interactive, utilisez l'exemple suivant :

    $ tkn pac logs -n <my-pipeline-ci> 
    1
    Copy to Clipboard Toggle word wrap
    1
    my-pipeline-ci est l'espace de noms pour le CRD Repository. Si vous souhaitez visualiser un pipeline autre que le dernier, vous pouvez utiliser la commande tkn pac logs pour sélectionner un PipelineRun attaché au référentiel :

Si vous avez configuré Pipelines as Code avec une application GitHub, Pipelines as Code affiche une URL dans l'onglet Checks de l'application GitHub. Vous pouvez cliquer sur l'URL et suivre l'exécution du pipeline.

Redémarrage d'un pipeline

Vous pouvez redémarrer un pipeline qui n'a pas connu d'événements, comme l'envoi d'un nouveau commit sur votre branche ou l'ouverture d'une pull request. Sur une application GitHub, allez dans l'onglet Checks et cliquez sur Re-run.

Si vous ciblez une demande d'extraction ou de fusion, utilisez les commentaires suivants à l'intérieur de votre demande d'extraction pour redémarrer toutes les exécutions du pipeline ou certaines d'entre elles :

  • Le commentaire /retest redémarre toutes les exécutions du pipeline.
  • Le commentaire /retest <pipelinerun-name> permet de redémarrer l'exécution d'un pipeline spécifique.
  • Le commentaire /cancel annule toutes les exécutions du pipeline.
  • Le commentaire /cancel <pipelinerun-name> permet d'annuler une opération de pipeline spécifique.

Les résultats des commentaires sont visibles sous l'onglet Checks d'une application GitHub.

Selon le contexte et les outils pris en charge, vous pouvez surveiller l'état d'un pipeline de différentes manières.

Statut des applications GitHub

À la fin de l'exécution d'un pipeline, l'état est ajouté dans les onglets Check avec des informations limitées sur la durée de chaque tâche de votre pipeline et la sortie de la commande tkn pipelinerun describe.

Extrait d'erreur du journal

Lorsque Pipelines as Code détecte une erreur dans l'une des tâches d'un pipeline, un petit extrait constitué des 3 dernières lignes de la décomposition de la première tâche défaillante est affiché.

Note

Pipelines as Code évite les fuites de secrets en examinant l'exécution du pipeline et en remplaçant les valeurs secrètes par des caractères cachés. Cependant, Pipelines as Code ne peut pas cacher les secrets provenant des espaces de travail et de la source envFrom.

Annotations pour les extraits d'erreurs du journal

Dans la carte de configuration de Pipelines as Code, si vous définissez le paramètre error-detection-from-container-logs à true, Pipelines as Code détecte les erreurs à partir des journaux du conteneur et les ajoute en tant qu'annotations sur la demande d'extraction où l'erreur s'est produite.

Important

Cette fonctionnalité est en avant-première technologique.

Actuellement, Pipelines as Code ne prend en charge que les cas simples où l'erreur ressemble à une sortie makefile ou grep du format suivant :

<filename>:<line>:<column> : <error message>
Copy to Clipboard Toggle word wrap

Vous pouvez personnaliser l'expression régulière utilisée pour détecter les erreurs dans le champ error-detection-simple-regexp. L'expression régulière utilise des groupes nommés pour donner de la flexibilité sur la façon de spécifier la correspondance. Les groupes nécessaires à la correspondance sont le nom de fichier, la ligne et l'erreur. Vous pouvez voir la carte de configuration de Pipelines as Code pour l'expression régulière par défaut.

Note

Par défaut, Pipelines as Code analyse uniquement les 50 dernières lignes des journaux de conteneurs. Vous pouvez augmenter cette valeur dans le champ error-detection-max-number-of-lines ou définir -1 pour un nombre illimité de lignes. Cependant, de telles configurations peuvent augmenter l'utilisation de la mémoire de l'observateur.

Statut du webhook

Pour le webhook, lorsque l'événement est une demande d'extraction, le statut est ajouté en tant que commentaire sur la demande d'extraction ou de fusion.

Défaillances

Si un espace de noms correspond à un CRD Repository, Pipelines as Code émet ses messages de journal d'échec dans les événements Kubernetes à l'intérieur de l'espace de noms.

Statut associé au référentiel CRD

Les 5 derniers messages d'état d'un pipeline sont stockés dans la ressource personnalisée Repository.

$ oc get repo -n <pipelines-as-code-ci>
Copy to Clipboard Toggle word wrap
NAME                  URL                                                        NAMESPACE             SUCCEEDED   REASON      STARTTIME   COMPLETIONTIME
pipelines-as-code-ci   https://github.com/openshift-pipelines/pipelines-as-code   pipelines-as-code-ci   True        Succeeded   59m         56m
Copy to Clipboard Toggle word wrap

En utilisant la commande tkn pac describe, vous pouvez extraire l'état des exécutions associées à votre référentiel et à ses métadonnées.

Notifications

Pipelines as Code ne gère pas les notifications. Si vous avez besoin de notifications, utilisez la fonctionnalité finally de Pipelines.

3.8.16. Utiliser des dépôts privés avec Pipelines as Code

Pipelines as Code prend en charge les dépôts privés en créant ou en mettant à jour un secret dans l'espace de noms cible avec le jeton d'utilisateur. La tâche git-clone de Tekton Hub utilise le jeton d'utilisateur pour cloner les dépôts privés.

Chaque fois que Pipelines as Code crée un nouveau pipeline dans l'espace de noms cible, il crée ou met à jour un secret au format pac-gitauth-<REPOSITORY_OWNER>-<REPOSITORY_NAME>-<RANDOM_STRING>.

Vous devez référencer le secret avec l'espace de travail basic-auth dans vos définitions d'exécution et de pipeline, qui est ensuite transmis à la tâche git-clone.

...
  workspace:
  - name: basic-auth
    secret:
      secretName: "{{ git_auth_secret }}"
...
Copy to Clipboard Toggle word wrap

Dans le pipeline, vous pouvez faire référence à l'espace de travail basic-auth pour réutiliser la tâche git-clone:

...
workspaces:
  - name basic-auth
params:
    - name: repo_url
    - name: revision
...
tasks:
  workspaces:
    - name: basic-auth
      workspace: basic-auth
  ...
  tasks:
  - name: git-clone-from-catalog
      taskRef:
        name: git-clone 
1

      params:
        - name: url
          value: $(params.repo_url)
        - name: revision
          value: $(params.revision)
...
Copy to Clipboard Toggle word wrap
1
La tâche git-clone récupère l'espace de travail basic-auth et l'utilise pour cloner le dépôt privé.

Vous pouvez modifier cette configuration en attribuant à l'indicateur secret-auto-create la valeur false ou true, comme indiqué dans la carte de configuration Pipelines as Code.

Il peut y avoir de nombreuses exécutions de pipelines dans un espace de noms d'utilisateurs. En définissant l'annotation max-keep-runs, vous pouvez configurer Pipelines as Code pour qu'il conserve un nombre limité d'exécutions de pipelines correspondant à un événement. Par exemple :

...
  pipelinesascode.tekton.dev/max-keep-runs: "<max_number>" 
1

...
Copy to Clipboard Toggle word wrap
1
Pipelines as Code commence à faire le ménage dès la fin d'une exécution réussie, en ne conservant que le nombre maximum d'exécutions du pipeline configuré à l'aide de l'annotation.
Note
  • Pipelines as Code ne nettoie pas les pipelines en cours d'exécution mais nettoie les pipelines en cours d'exécution dont l'état est inconnu.
  • Pipelines as Code ne nettoie pas une demande d'extraction qui a échoué.

3.8.18. Utiliser un webhook entrant avec Pipelines as Code

En utilisant une URL de webhook entrant et un secret partagé, vous pouvez lancer l'exécution d'un pipeline dans un référentiel.

Pour utiliser les webhooks entrants, spécifiez ce qui suit dans la section spec du CRD Repository:

  • L'URL du webhook entrant qui correspond à Pipelines as Code.
  • Le fournisseur Git et le jeton d'utilisateur. Actuellement, Pipelines as Code prend en charge github, gitlab, et bitbucket-cloud.

    Note

    Lors de l'utilisation d'URLs de webhooks entrants dans le contexte de l'application GitHub, vous devez spécifier le jeton.

  • Les branches cibles et un secret pour l'URL du webhook entrant.

Exemple : Repository CRD avec webhook entrant

apiVersion: "pipelinesascode.tekton.dev/v1alpha1"
kind: Repository
metadata:
  name: repo
  namespace: ns
spec:
  url: "https://github.com/owner/repo"
  git_provider:
    type: github
    secret:
      name: "owner-token"
  incoming:
    - targets:
      - main
      secret:
        name: repo-incoming-secret
      type: webhook-url
Copy to Clipboard Toggle word wrap

Exemple : Le secret repo-incoming-secret pour le webhook entrant

apiVersion: v1
kind: Secret
metadata:
  name: repo-incoming-secret
  namespace: ns
type: Opaque
stringData:
  secret: <very-secure-shared-secret>
Copy to Clipboard Toggle word wrap

Pour déclencher l'exécution d'un pipeline situé dans le répertoire .tekton d'un dépôt Git, utilisez la commande suivante :

$ curl -X POST 'https://control.pac.url/incoming?secret=very-secure-shared-secret&repository=repo&branch=main&pipelinerun=target_pipelinerun'
Copy to Clipboard Toggle word wrap

Pipelines as Code fait correspondre l'URL entrant et le traite comme un événement push. Cependant, Pipelines as Code ne signale pas l'état des exécutions du pipeline déclenchées par cette commande.

Pour obtenir un rapport ou une notification, ajoutez-les directement à votre pipeline à l'aide d'une tâche finally. Vous pouvez également inspecter le CRD Repository à l'aide de l'outil CLI tkn pac.

3.8.19. Personnaliser la configuration de Pipelines as Code

Pour personnaliser Pipelines as Code, les administrateurs de clusters peuvent configurer les paramètres suivants à l'aide de la carte de configuration pipelines-as-code dans l'espace de noms pipelines-as-code:

Expand
Tableau 3.8. Personnaliser la configuration de Pipelines as Code
ParamètresDescriptionDéfaut

application-name

Le nom de l'application. Par exemple, le nom affiché dans les étiquettes GitHub Checks.

"Pipelines as Code CI"

max-keep-days

Le nombre de jours pendant lesquels les exécutions du pipeline sont conservées dans l'espace de noms pipelines-as-code.

Notez que ce paramètre ConfigMap n'affecte pas les nettoyages des exécutions de pipeline d'un utilisateur, qui sont contrôlés par les annotations sur la définition de l'exécution de pipeline dans le référentiel GitHub de l'utilisateur.

NA

secret-auto-create

Indique si un secret doit être automatiquement créé à l'aide du jeton généré dans l'application GitHub. Ce secret peut ensuite être utilisé avec des dépôts privés.

enabled

remote-tasks

Lorsque cette option est activée, elle autorise les tâches à distance à partir des annotations d'exécution du pipeline.

enabled

hub-url

L'URL de base pour l'API Tekton Hub.

https://hub.tekton.dev/

hub-catalog-name

Le nom du catalogue Tekton Hub.

tekton

tekton-dashboard-url

L'URL du tableau de bord Tekton Hub. Pipelines as Code utilise cette URL pour générer une URL PipelineRun sur le tableau de bord Tekton Hub.

NA

bitbucket-cloud-check-source-ip

Indique s'il faut sécuriser les demandes de service en interrogeant les plages d'IP pour un Bitbucket public. La modification de la valeur par défaut du paramètre peut entraîner un problème de sécurité.

enabled

bitbucket-cloud-additional-source-ip

Indique s'il faut fournir un ensemble supplémentaire de plages ou de réseaux IP, séparés par des virgules.

NA

max-keep-run-upper-limit

Limite maximale de la valeur max-keep-run pour un pipeline.

NA

default-max-keep-runs

Limite par défaut de la valeur de max-keep-run pour une série de pipelines. Si elle est définie, cette valeur est appliquée à tous les parcours de pipelines qui n'ont pas d'annotation max-keep-run.

NA

auto-configure-new-github-repo

Configure automatiquement les nouveaux dépôts GitHub. Pipelines as Code met en place un espace de noms et crée une ressource personnalisée pour votre dépôt. Ce paramètre n'est pris en charge qu'avec les applications GitHub.

disabled

auto-configure-repo-namespace-template

Configure un modèle pour générer automatiquement l'espace de noms pour votre nouveau dépôt, si auto-configure-new-github-repo est activé.

{repo_name}-pipelines

error-log-snippet

Active ou désactive l'affichage d'un extrait de journal pour les tâches qui ont échoué, avec une erreur dans un pipeline. Vous pouvez désactiver ce paramètre en cas de fuite de données de votre pipeline.

enabled

3.8.20. Référence de la commande Pipelines as Code

L'outil CLI tkn pac offre les possibilités suivantes :

  • Installation et configuration de Bootstrap Pipelines as Code.
  • Créer un nouveau dépôt Pipelines as Code.
  • Liste de tous les dépôts de Pipelines as Code.
  • Décrire un référentiel Pipelines as Code et les exécutions associées.
  • Générer un simple pipeline pour commencer.
  • Résoudre un pipeline comme s'il avait été exécuté par Pipelines as Code.
Astuce

Vous pouvez utiliser les commandes correspondant aux capacités à des fins de test et d'expérimentation, sans avoir à modifier le dépôt Git contenant le code source de l'application.

3.8.20.1. Syntaxe de base
$ tkn pac [command or options] [arguments]
Copy to Clipboard Toggle word wrap
3.8.20.2. Options globales
$ tkn pac --help
Copy to Clipboard Toggle word wrap
3.8.20.3. Commandes d'utilitaires
3.8.20.3.1. amorçage
Expand
Tableau 3.9. Bootstrapping Pipelines as Code : installation et configuration
CommandementDescription

tkn pac bootstrap

Installe et configure Pipelines as Code pour les fournisseurs de services d'hébergement de dépôts Git, tels que GitHub et GitHub Enterprise.

tkn pac bootstrap --nightly

Installe la version de nuit de Pipelines as Code.

tkn pac bootstrap --route-url <public_url_to_ingress_spec>

Remplace l'URL de la route OpenShift.

Par défaut, tkn pac bootstrap détecte la route OpenShift, qui est automatiquement associée au service contrôleur Pipelines as Code.

Si vous n'avez pas de cluster OpenShift Container Platform, il vous demande l'URL publique qui pointe vers le point d'entrée.

tkn pac bootstrap github-app

Créez une application GitHub et des secrets dans l'espace de noms pipelines-as-code.

3.8.20.3.2. dépôt
Expand
Tableau 3.10. Gérer les pipelines comme des dépôts de code
CommandementDescription

tkn pac create repository

Crée un nouveau référentiel Pipelines as Code et un espace de noms basé sur le modèle d'exécution du pipeline.

tkn pac list

Liste tous les Pipelines en tant que dépôts de code et affiche le dernier état des exécutions associées.

tkn pac repo describe

Décrit un référentiel Pipelines as Code et les exécutions associées.

3.8.20.3.3. générer
Expand
Tableau 3.11. Génération d'exécutions de pipelines à l'aide de Pipelines as Code
CommandementDescription

tkn pac generate

Génère une simple exécution de pipeline.

Lorsqu'il est exécuté à partir du répertoire contenant le code source, il détecte automatiquement les informations Git actuelles.

En outre, il utilise la capacité de détection de la langue de base et ajoute des tâches supplémentaires en fonction de la langue.

Par exemple, s'il détecte un fichier setup.py à la racine du référentiel, la tâche pylint est automatiquement ajoutée à l'exécution du pipeline généré.

3.8.20.3.4. résoudre
Expand
Tableau 3.12. Résolution et exécution d'un pipeline à l'aide de Pipelines as Code
CommandementDescription

tkn pac resolve

Exécute un pipeline comme s'il appartenait au service Pipelines as Code on.

tkn pac resolve -f .tekton/pull-request.yaml | oc apply -f -

Affiche l'état d'un pipeline en cours d'exécution qui utilise le modèle dans .tekton/pull-request.yaml.

Combiné à une installation Kubernetes fonctionnant sur votre machine locale, vous pouvez observer l'exécution du pipeline sans générer de nouveau commit.

Si vous exécutez la commande à partir d'un dépôt de code source, elle tente de détecter les informations Git actuelles et de résoudre automatiquement les paramètres tels que la révision ou la branche actuelle.

tkn pac resolve -f .tekton/pr.yaml -p revision=main -p repo_name=<repository_name>

Exécute un pipeline en remplaçant les valeurs par défaut des paramètres dérivés du référentiel Git.

L'option -f peut également accepter un chemin de répertoire et appliquer la commande tkn pac resolve à tous les fichiers .yaml ou .yml de ce répertoire. Vous pouvez également utiliser l'option -f plusieurs fois dans la même commande.

Vous pouvez remplacer les informations recueillies par défaut dans le référentiel Git en spécifiant des valeurs de paramètres à l'aide de l'option -p. Par exemple, vous pouvez utiliser une branche Git comme révision et un nom de dépôt différent.

Vous pouvez utiliser la perspective Developer de la console web d'OpenShift Container Platform pour créer des pipelines CI/CD pour votre processus de livraison de logiciels.

Dans la perspective de Developer:

  • Utilisez l'option AddPipelinePipeline builder pour créer des pipelines personnalisés pour votre application.
  • Utilisez l'option AddFrom Git pour créer des pipelines à l'aide de modèles de pipelines et de ressources installés par l'opérateur lors de la création d'une application sur OpenShift Container Platform.

Après avoir créé les pipelines pour votre application, vous pouvez visualiser et interagir visuellement avec les pipelines déployés dans la vue Pipelines. Vous pouvez également utiliser la vue Topology pour interagir avec les pipelines créés à l'aide de l'option From Git. Vous devez appliquer des étiquettes personnalisées aux pipelines créés à l'aide de l'option Pipeline builder pour les voir dans la vue Topology.

Conditions préalables

Dans la perspective Developer de la console, vous pouvez utiliser l'option AddPipelinePipeline builder pour :

  • Configurer les pipelines à l'aide de Pipeline builder ou de YAML view.
  • Construire un flux de pipeline en utilisant des tâches existantes et des tâches de cluster. Lorsque vous installez OpenShift Pipelines Operator, il ajoute des tâches de cluster de pipeline réutilisables à votre cluster.
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.

  • Spécifiez le type de ressources nécessaires à l'exécution du pipeline et, le cas échéant, ajoutez des paramètres supplémentaires au pipeline.
  • Référencer ces ressources du pipeline dans chacune des tâches du pipeline en tant que ressources d'entrée et de sortie.
  • Si nécessaire, faites référence à tout paramètre supplémentaire ajouté au pipeline dans la tâche. Les paramètres d'une tâche sont pré-remplis en fonction des spécifications de la tâche.
  • Utilisez les snippets et les échantillons réutilisables installés par l'opérateur pour créer des pipelines détaillés.
  • Recherchez et ajoutez des tâches à partir de votre instance Tekton Hub locale configurée.
Important

Dans la perspective du développeur, vous pouvez créer un pipeline personnalisé en utilisant votre propre ensemble de tâches. Pour rechercher, installer et mettre à jour vos tâches directement à partir de la console du développeur, votre administrateur de cluster doit installer et déployer une instance locale de Tekton Hub et lier ce hub au cluster OpenShift Container Platform. Pour plus de détails, voir Using Tekton Hub with OpenShift Pipelines dans la section Additional resources. Si vous ne déployez pas d'instance Tekton Hub locale, par défaut, vous ne pouvez accéder qu'aux tâches du cluster, aux tâches de l'espace de noms et aux tâches Tekton Hub publiques.

Procédure

  1. Dans la vue Add de la perspective Developer, cliquez sur la tuile Pipeline pour voir la page Pipeline builder.
  2. Configurez le pipeline à l'aide de la vue Pipeline builder ou de la vue YAML view.

    Note

    La vue Pipeline builder prend en charge un nombre limité de champs, tandis que la vue YAML view prend en charge tous les champs disponibles. En option, vous pouvez également utiliser les snippets et échantillons réutilisables installés par l'opérateur pour créer des pipelines détaillés.

    Figure 3.1. Vue YAML

    op pipeline yaml
  3. Configurez votre pipeline en utilisant Pipeline builder:

    1. Dans le champ Name, saisissez un nom unique pour la canalisation.
    2. Dans la section Tasks:

      1. Cliquez sur Add task.
      2. Recherchez une tâche à l'aide du champ de recherche rapide et sélectionnez la tâche requise dans la liste affichée.
      3. Cliquez sur Add ou Install and add. Dans cet exemple, utilisez la tâche s2i-nodejs.

        Note

        La liste de recherche contient toutes les tâches du Tekton Hub et les tâches disponibles dans le cluster. De plus, si une tâche est déjà installée, la liste affichera Add pour ajouter la tâche, tandis qu'elle affichera Install and add pour installer et ajouter la tâche. Elle affichera Update and add si vous ajoutez la même tâche avec une version mise à jour.

        • Pour ajouter des tâches séquentielles au pipeline :

          • Cliquez sur l'icône plus à droite ou à gauche de la tâche → cliquez sur Add task.
          • Recherchez une tâche à l'aide du champ de recherche rapide et sélectionnez la tâche requise dans la liste affichée.
          • Cliquez sur Add ou Install and add.

            Figure 3.2. Constructeur de pipelines

            op pipeline builder
        • Pour ajouter une tâche finale :

          • Cliquez sur Add finally task → Cliquez sur Add task.
          • Recherchez une tâche à l'aide du champ de recherche rapide et sélectionnez la tâche requise dans la liste affichée.
          • Cliquez sur Add ou Install and add.
    3. Dans la section Resources, cliquez sur Add Resources pour spécifier le nom et le type de ressources pour l'exécution du pipeline. Ces ressources sont ensuite utilisées par les tâches du pipeline en tant qu'entrées et sorties. Pour cet exemple :

      1. Ajoutez une ressource d'entrée. Dans le champ Name, saisissez Source, puis dans la liste déroulante Resource Type, sélectionnez Git.
      2. Ajoutez une ressource de sortie. Dans le champ Name, saisissez Img, puis dans la liste déroulante Resource Type, sélectionnez Image.

        Note

        Une icône rouge apparaît à côté de la tâche si une ressource est manquante.

    4. Facultatif : Le site Parameters pour une tâche est pré-rempli sur la base des spécifications de la tâche. Si nécessaire, utilisez le lien Add Parameters dans la section Parameters pour ajouter des paramètres supplémentaires.
    5. Dans la section Workspaces, cliquez sur Add workspace et saisissez un nom d'espace de travail unique dans le champ Name. Vous pouvez ajouter plusieurs espaces de travail au pipeline.
    6. Dans la section Tasks, cliquez sur la tâche s2i-nodejs pour afficher le panneau latéral contenant les détails de la tâche. Dans le panneau latéral de la tâche, spécifiez les ressources et les paramètres de la tâche s2i-nodejs:

      1. Si nécessaire, dans la section Parameters, ajoutez des paramètres aux paramètres par défaut, en utilisant la syntaxe $(params.<param-name>).
      2. Dans la section Image, saisissez Img comme spécifié dans la section Resources.
      3. Sélectionnez un espace de travail dans la liste déroulante source sous la section Workspaces.
    7. Ajouter des ressources, des paramètres et des espaces de travail à la tâche openshift-client.
  4. Cliquez sur Create pour créer et visualiser le pipeline dans la page Pipeline Details.
  5. Cliquez sur le menu déroulant Actions puis sur Start, pour voir la page Start Pipeline.
  6. La section Workspaces répertorie les espaces de travail que vous avez créés précédemment. Utilisez le menu déroulant correspondant pour spécifier la source de volume de votre espace de travail. Vous disposez des options suivantes : Empty Directory, Config Map, Secret, PersistentVolumeClaim, ou VolumeClaimTemplate.

3.9.2. Créer des pipelines OpenShift avec des applications

Pour créer des pipelines en même temps que des applications, utilisez l'option From Git dans la vue Add de la perspective Developer. Vous pouvez afficher toutes les conduites disponibles et sélectionner celles que vous souhaitez utiliser pour créer des applications lors de l'importation de votre code ou du déploiement d'une image.

L'intégration au Tekton Hub est activée par défaut et vous pouvez voir les tâches du Tekton Hub qui sont prises en charge par votre cluster. Les administrateurs peuvent désactiver l'intégration au Tekton Hub et les tâches du Tekton Hub ne seront plus affichées. Vous pouvez également vérifier si une URL de webhook existe pour un pipeline généré. Des webhooks par défaut sont ajoutés pour les pipelines créés à l'aide du flux Add et l'URL est visible dans le panneau latéral des ressources sélectionnées dans la vue Topologie.

3.9.3. Ajouter un dépôt GitHub contenant des pipelines

Dans la perspective du développeur, vous pouvez ajouter votre dépôt GitHub contenant des pipelines au cluster OpenShift Container Platform. Cela vous permet d'exécuter des pipelines et des tâches à partir de votre dépôt GitHub sur le cluster lorsque des événements Git pertinents, tels que des demandes push ou pull, sont déclenchés.

Note

Vous pouvez ajouter des dépôts GitHub publics et privés.

Conditions préalables

  • Assurez-vous que votre administrateur de cluster a configuré les applications GitHub requises dans la perspective de l'administrateur.

Procédure

  1. Dans la perspective du développeur, choisissez l'espace de noms ou le projet dans lequel vous souhaitez ajouter votre dépôt GitHub.
  2. Naviguez vers Pipelines en utilisant le volet de navigation de gauche.
  3. Cliquez sur CreateRepository à droite de la page Pipelines.
  4. Saisissez votre Git Repo URL et la console récupère automatiquement le nom du dépôt.
  5. Cliquez sur Show configuration options. Par défaut, une seule option s'affiche Setup a webhook. Si vous avez configuré une application GitHub, deux options s'affichent :

    • Use GitHub App: Sélectionnez cette option pour installer votre application GitHub dans votre référentiel.
    • Setup a webhook: Sélectionnez cette option pour ajouter un webhook à votre application GitHub.
  6. Configurez un webhook en utilisant l'une des options suivantes dans la section Secret:

    • Configurer un webhook à l'aide de Git access token:

      1. Saisissez votre code d'accès personnel.
      2. Cliquez sur Generate correspondant au champ Webhook secret pour générer un nouveau secret webhook.

        Git access token
        Note

        Vous pouvez cliquer sur le lien situé sous le champ Git access token si vous n'avez pas de jeton d'accès personnel et que vous souhaitez en créer un nouveau.

    • Configurer un webhook à l'aide de Git access token secret:

      • Sélectionnez un secret dans votre espace de noms dans la liste déroulante. En fonction du secret sélectionné, un secret de webhook est automatiquement généré.

        Git access token secret
  7. Ajoutez les détails secrets du webhook à votre dépôt GitHub :

    1. Copiez le site webhook URL et accédez aux paramètres de votre dépôt GitHub.
    2. Cliquez sur WebhooksAdd webhook.
    3. Copiez l'adresse Webhook URL depuis la console de développement et collez-la dans le champ Payload URL des paramètres du dépôt GitHub.
    4. Sélectionnez le site Content type.
    5. Copiez l'adresse Webhook secret depuis la console de développement et collez-la dans le champ Secret des paramètres du dépôt GitHub.
    6. Sélectionnez l'une des options SSL verification.
    7. Sélectionnez les événements qui déclencheront ce webhook.
    8. Cliquez sur Add webhook.
  8. Retournez à la console du développeur et cliquez sur Add.
  9. Lisez les détails des étapes à suivre et cliquez sur Close.
  10. Affichez les détails du référentiel que vous venez de créer.

La vue Pipelines de la perspective Developer répertorie toutes les pipelines d'un projet, avec les détails suivants :

  • L'espace de noms dans lequel le pipeline a été créé
  • Le dernier passage du pipeline
  • Le statut des tâches dans l'exécution du pipeline
  • L'état de l'exécution du pipeline
  • L'heure de création de la dernière exécution du pipeline

Procédure

  1. Dans la vue Pipelines de la perspective Developer, sélectionnez un projet dans la liste déroulante Project pour voir les pipelines de ce projet.
  2. Cliquez sur le pipeline souhaité pour afficher la page Pipeline details.

    Par défaut, l'onglet Details affiche une représentation visuelle de toutes les tâches serial, parallel, finally et when du pipeline. Les tâches et les tâches finally sont listées dans la partie inférieure droite de la page.

    Pour afficher les détails de la tâche, cliquez sur les tâches répertoriées Tasks et Finally. En outre, vous pouvez effectuer les opérations suivantes :

    • Utilisez les fonctions de zoom avant, zoom arrière, adaptation à l'écran et réinitialisation de la vue à l'aide des icônes standard affichées dans le coin inférieur gauche de la visualisation Pipeline details.
    • Modifier le facteur de zoom de la visualisation du pipeline à l'aide de la molette de la souris.
    • Survolez les tâches pour en voir les détails.

      Figure 3.3. Détails du pipeline

      Pipeline details
  3. Facultatif : Sur la page Pipeline details, cliquez sur l'onglet Metrics pour obtenir les informations suivantes sur les pipelines :

    • Pipeline Success Ratio
    • Number of Pipeline Runs
    • Pipeline Run Duration
    • Task Run Duration

      Vous pouvez utiliser ces informations pour améliorer le flux de travail du pipeline et éliminer les problèmes dès le début du cycle de vie du pipeline.

  4. Facultatif : Cliquez sur l'onglet YAML pour modifier le fichier YAML du pipeline.
  5. En option, cliquez sur l'onglet pour voir les exécutions terminées ou échouées du pipeline : Cliquez sur l'onglet Pipeline Runs pour afficher les exécutions terminées, en cours ou échouées du pipeline.

    L'onglet Pipeline Runs fournit des détails sur l'exécution du pipeline, l'état de la tâche et un lien pour déboguer les exécutions de pipeline qui ont échoué. Utiliser le menu Options kebab pour arrêter un pipeline en cours d'exécution, pour réexécuter un pipeline en utilisant les mêmes paramètres et ressources que ceux de l'exécution précédente du pipeline, ou pour supprimer un pipeline en cours d'exécution.

    • Cliquez sur l'exécution de pipeline requise pour afficher la page Pipeline Run details. Par défaut, l'onglet Details affiche une représentation visuelle de toutes les tâches en série, tâches en parallèle, tâches finally et expressions dans le pipeline. Les résultats des exécutions réussies sont affichés dans le volet Pipeline Run results au bas de la page. En outre, vous ne pourrez voir que les tâches du Tekton Hub qui sont prises en charge par le cluster. Lorsque vous regardez une tâche, vous pouvez cliquer sur le lien situé à côté pour accéder à la documentation de la tâche.

      Note

      La section Details de la page Pipeline Run Details affiche un Log Snippet de l'échec de l'exécution du pipeline. Log Snippet fournit un message d'erreur général et un extrait du journal. Un lien vers la section Logs permet d'accéder rapidement aux détails de l'échec de l'exécution.

    • Sur la page Pipeline Run details, cliquez sur l'onglet Task Runs pour voir les exécutions terminées, en cours et échouées de la tâche.

      L'onglet Task Runs fournit des informations sur l'exécution de la tâche avec les liens vers sa tâche et son pod, ainsi que le statut et la durée de l'exécution de la tâche. Utiliser le menu Options kebab pour supprimer une tâche.

    • Cliquez sur l'exécution de la tâche requise pour afficher la page Task Run details. Les résultats des exécutions réussies sont affichés dans le volet Task Run results au bas de la page.

      Note

      La section Details de la page Task Run details affiche une Log Snippet de l'échec de l'exécution de la tâche. Log Snippet fournit un message d'erreur général et un extrait du journal. Un lien vers la section Logs permet d'accéder rapidement aux détails de l'échec de l'exécution de la tâche.

  6. Cliquez sur l'onglet Parameters pour afficher les paramètres définis dans le pipeline. Vous pouvez également ajouter ou modifier des paramètres supplémentaires, si nécessaire.
  7. Cliquez sur l'onglet Resources pour voir les ressources définies dans le pipeline. Vous pouvez également ajouter ou modifier des ressources supplémentaires, si nécessaire.

En tant qu'administrateur de cluster, pour créer et déployer une application à partir d'un dépôt Git, vous pouvez utiliser des modèles de pipeline personnalisés qui remplacent les modèles de pipeline par défaut fournis par Red Hat OpenShift Pipelines 1.5 et les versions ultérieures.

Note

Cette fonctionnalité n'est pas disponible dans Red Hat OpenShift Pipelines 1.4 et les versions antérieures.

Conditions préalables

Assurez-vous que Red Hat OpenShift Pipelines 1.5 ou une version ultérieure est installé et disponible dans tous les espaces de noms.

Procédure

  1. Connectez-vous à la console web d'OpenShift Container Platform en tant qu'administrateur de cluster.
  2. Dans la perspective Administrator, utilisez le panneau de navigation gauche pour aller à la section Pipelines.

    1. Dans le menu déroulant Project, sélectionnez le projet openshift. Cela garantit que les étapes suivantes seront effectuées dans l'espace de noms openshift.
    2. Dans la liste des pipelines disponibles, sélectionnez celui qui convient à la construction et au déploiement de votre application. Par exemple, si votre application nécessite un environnement d'exécution node.js, sélectionnez le pipeline s2i-nodejs.

      Note

      Ne modifiez pas le modèle de pipeline par défaut. Il pourrait devenir incompatible avec l'interface utilisateur et le back-end.

    3. Sous l'onglet YAML du pipeline sélectionné, cliquez sur Download et enregistrez le fichier YAML sur votre machine locale. Si votre fichier de configuration personnalisé échoue, vous pouvez utiliser cette copie pour restaurer une configuration fonctionnelle.
  3. Désactiver (supprimer) les modèles de pipeline par défaut :

    1. Utilisez le panneau de navigation gauche pour aller à OperatorsInstalled Operators.
    2. Cliquez sur Red Hat OpenShift PipelinesTekton Configuration tab → configYAML tab.
    3. Pour désactiver (supprimer) les modèles de pipeline par défaut dans l'espace de noms openshift, définissez le paramètre pipelineTemplates à false dans la ressource personnalisée YAML TektonConfig, et enregistrez-la.

      apiVersion: operator.tekton.dev/v1alpha1
      kind: TektonConfig
      metadata:
        name: config
      spec:
      profile: all
      targetNamespace: openshift-pipelines
      addon:
        params:
        - name: clusterTasks
          value: "true"
        - name: pipelineTemplates
          value: "false"
      ...
      Copy to Clipboard Toggle word wrap
      Note

      Si vous supprimez manuellement les modèles de pipeline par défaut, l'opérateur rétablit les valeurs par défaut lors d'une mise à niveau.

      Avertissement

      En tant qu'administrateur de cluster, vous pouvez désactiver l'installation des modèles de pipeline par défaut dans la configuration de l'opérateur. Cependant, une telle configuration supprime tous les modèles de pipeline par défaut, et pas seulement celui que vous souhaitez personnaliser.

  4. Créer un modèle de pipeline personnalisé :

    1. Utilisez le panneau de navigation de gauche pour accéder à la section Pipelines.
    2. Dans la liste déroulante Create, sélectionnez Pipeline.
    3. Créez le pipeline requis dans l'espace de noms openshift. Donnez-lui un nom différent de celui par défaut (par exemple, custom-nodejs). Vous pouvez utiliser le modèle de pipeline par défaut téléchargé comme point de départ et le personnaliser.

      Note

      Comme openshift est l'espace de noms par défaut utilisé par les modèles de pipeline installés par l'opérateur, vous devez créer le modèle de pipeline personnalisé dans l'espace de noms openshift. Lorsqu'une application utilise un modèle de pipeline, celui-ci est automatiquement copié dans l'espace de noms du projet concerné.

    4. Sous l'onglet Details du pipeline créé, assurez-vous que les Labels du modèle personnalisé correspondent aux étiquettes du pipeline par défaut. Le modèle de pipeline personnalisé doit comporter les étiquettes correctes pour l'exécution, le type et la stratégie de l'application. Par exemple, les étiquettes requises pour une application node.js déployée sur OpenShift Container Platform sont les suivantes :

      ...
      pipeline.openshift.io/runtime: nodejs
      pipeline.openshift.io/type: openshift
      ...
      Copy to Clipboard Toggle word wrap
      Note

      Vous ne pouvez utiliser qu'un seul modèle de pipeline pour chaque combinaison d'environnement d'exécution et de type de déploiement.

  5. Dans la perspective Developer, utilisez l'option AddGit RepositoryFrom Git pour sélectionner le type d'application que vous souhaitez créer et déployer. En fonction de la durée d'exécution requise et du type d'application, votre modèle personnalisé est automatiquement sélectionné.

3.9.6. Démarrage des pipelines à partir de la vue Pipelines

Après avoir créé un pipeline, vous devez le démarrer pour exécuter les tâches incluses dans la séquence définie. Vous pouvez lancer un pipeline à partir de la vue Pipelines, de la page Pipeline Details ou de la vue Topology.

Procédure

Pour démarrer un pipeline à partir de la vue Pipelines:

  1. Dans la vue Pipelines de la perspective Developer, cliquez sur le lien Options kebab à côté d'un pipeline et sélectionnez Start.
  2. La boîte de dialogue Start Pipeline affiche Git Resources et Image Resources en fonction de la définition du pipeline.

    Note

    Pour les pipelines créés à l'aide de l'option From Git, la boîte de dialogue Start Pipeline affiche également un champ APP_NAME dans la section Parameters, et tous les champs de la boîte de dialogue sont pré-remplis par le modèle de pipeline.

    1. Si vous disposez de ressources dans votre espace de noms, les champs Git Resources et Image Resources sont préremplis avec ces ressources. Si nécessaire, utilisez les menus déroulants pour sélectionner ou créer les ressources requises et personnaliser l'instance d'exécution du pipeline.
  3. Facultatif : Modifiez le site Advanced Options pour ajouter les informations d'identification qui authentifient le serveur Git privé spécifié ou le registre d'images.

    1. Sous Advanced Options, cliquez sur Show Credentials Options et sélectionnez Add Secret.
    2. Dans la section Create Source Secret, indiquez ce qui suit :

      1. Une adresse unique Secret Name pour le secret.
      2. Dans la section Designated provider to be authenticated, indiquez le fournisseur à authentifier dans le champ Access to et la base Server URL.
      3. Sélectionnez le site Authentication Type et fournissez les informations d'identification :

        • Pour le champ Authentication Type Image Registry Credentials , indiquez le Registry Server Address que vous souhaitez authentifier et fournissez vos informations d'identification dans les champs Username, Password et Email.

          Sélectionnez Add Credentials si vous souhaitez spécifier un Registry Server Address supplémentaire.

        • Pour le site Authentication Type Basic Authentication , indiquez les valeurs des champs UserName et Password or Token.
        • Pour le champ Authentication Type SSH Keys , indiquez la valeur du champ SSH Private Key.

          Note

          Pour l'authentification de base et l'authentification SSH, vous pouvez utiliser des annotations telles que :

      4. Cochez la case pour ajouter le secret.

    Vous pouvez ajouter plusieurs secrets en fonction du nombre de ressources dans votre pipeline.

  4. Cliquez sur Start pour démarrer le pipeline.
  5. La page PipelineRun details affiche le pipeline en cours d'exécution. Après le démarrage du pipeline, les tâches et les étapes de chaque tâche sont exécutées. Vous pouvez :

    • Utilisez les fonctions de zoom avant, zoom arrière, adaptation à l'écran et réinitialisation de l'affichage à l'aide des icônes standard, qui se trouvent dans le coin inférieur gauche de la visualisation de la page PipelineRun details.
    • Modifiez le facteur de zoom de la visualisation pipelinerun à l'aide de la molette de la souris. À certains facteurs de zoom, la couleur de fond des tâches change pour indiquer l'état d'erreur ou d'avertissement.
    • Survolez les tâches pour en voir les détails, tels que le temps nécessaire à l'exécution de chaque étape, le nom de la tâche et son statut.
    • Survolez l'insigne des tâches pour voir le nombre total de tâches et les tâches accomplies.
    • Cliquez sur une tâche pour voir les journaux de chaque étape de la tâche.
    • Cliquez sur l'onglet Logs pour consulter les journaux relatifs à la séquence d'exécution des tâches. Vous pouvez également développer le volet et télécharger les journaux individuellement ou en masse, en utilisant le bouton correspondant.
    • Cliquez sur l'onglet Events pour voir le flux d'événements générés par l'exécution d'un pipeline.

      Vous pouvez utiliser les onglets Task Runs, Logs, et Events pour faciliter le débogage d'un pipeline ou d'une tâche dont l'exécution a échoué.

      Figure 3.4. Détails de l'exécution du pipeline

      Pipeline run details

3.9.7. Démarrer des pipelines à partir de la vue Topologie

Pour les pipelines créés à l'aide de l'option From Git, vous pouvez utiliser la vue Topology pour interagir avec les pipelines après leur démarrage :

Note

Pour voir les pipelines créés à l'aide de Pipeline builder dans la vue Topology, personnalisez les étiquettes des pipelines pour les relier à la charge de travail de l'application.

Procédure

  1. Cliquez sur Topology dans le panneau de navigation de gauche.
  2. Cliquez sur l'application pour afficher Pipeline Runs dans le panneau latéral.
  3. Dans Pipeline Runs, cliquez sur Start Last Run pour lancer une nouvelle canalisation avec les mêmes paramètres et ressources que la précédente. Cette option est désactivée si aucun pipeline n'a été lancé. Vous pouvez également démarrer un pipeline lors de sa création.

    Figure 3.5. Pipelines dans la vue Topologie

    Pipelines in Topology view

Sur la page Topology, survolez la gauche de l'application pour voir l'état d'avancement de son pipeline. Après l'ajout d'un pipeline, une icône en bas à gauche indique qu'il existe un pipeline associé.

Le panneau latéral du nœud d'application de la page Topology affiche l'état de l'exécution d'un pipeline et vous pouvez interagir avec lui.

  • Si un pipeline ne démarre pas automatiquement, le panneau latéral affiche un message indiquant que le pipeline ne peut pas être démarré automatiquement et qu'il doit donc être démarré manuellement.
  • Si une canalisation est créée mais que l'utilisateur ne l'a pas démarrée, son état n'est pas démarré. Lorsque l'utilisateur clique sur l'icône d'état Not started, la boîte de dialogue de démarrage s'ouvre dans la vue Topology.
  • Si le pipeline n'a pas de configuration de compilation ou de compilation, la section Builds n'est pas visible. S'il y a un pipeline et une configuration de construction, la section Builds section est visible.
  • Le panneau latéral affiche une page Log Snippet lorsqu'une exécution de pipeline échoue dans le cadre d'une exécution de tâche spécifique. Vous pouvez consulter le message Log Snippet dans la section Pipeline Runs, sous l'onglet Resources. Il fournit un message d'erreur général et un extrait du journal. Un lien vers la section Logs permet d'accéder rapidement aux détails de l'échec de l'exécution.

3.9.9. Modification des pipelines

Vous pouvez éditer les pipelines de votre cluster en utilisant la perspective Developer de la console web :

Procédure

  1. Dans la vue Pipelines de la perspective Developer, sélectionnez la canalisation que vous souhaitez modifier pour en voir les détails. Dans la page Pipeline Details, cliquez sur Actions et sélectionnez Edit Pipeline.
  2. Sur la page Pipeline builder, vous pouvez effectuer les tâches suivantes :

    • Ajouter des tâches, des paramètres ou des ressources supplémentaires au pipeline.
    • Cliquez sur la tâche que vous souhaitez modifier pour afficher les détails de la tâche dans le panneau latéral et modifier les détails requis de la tâche, tels que le nom d'affichage, les paramètres et les ressources.
    • Pour supprimer la tâche, cliquez sur la tâche et, dans le panneau latéral, cliquez sur Actions et sélectionnez Remove Task.
  3. Cliquez sur Save pour enregistrer le pipeline modifié.

3.9.10. Suppression des pipelines

Vous pouvez supprimer les pipelines de votre cluster en utilisant la perspective Developer de la console web.

Procédure

  1. Dans la vue Pipelines de la perspective Developer, cliquez sur le lien Options kebab à côté d'une ligne de conduite et sélectionnez Delete Pipeline.
  2. Dans la demande de confirmation Delete Pipeline, cliquez sur Delete pour confirmer la suppression.

Si vous utilisez des clusters dans des environnements multi-locataires, vous devez contrôler la consommation des ressources de CPU, de mémoire et de stockage pour chaque projet et objet Kubernetes. Cela permet d'éviter qu'une application consomme trop de ressources et affecte les autres applications.

Pour définir les limites de ressources finales qui sont définies sur les pods résultants, Red Hat OpenShift Pipelines utilise les limites de quotas de ressources et les plages de limites du projet dans lequel ils sont exécutés.

Pour limiter la consommation de ressources dans votre projet, vous pouvez :

Chaque tâche consiste en un certain nombre d'étapes à exécuter dans un ordre particulier défini dans le champ steps de la ressource Task. Chaque tâche s'exécute comme un pod, et chaque étape s'exécute comme un conteneur au sein de ce pod.

Les étapes sont exécutées une par une. Le module qui exécute la tâche ne demande que les ressources nécessaires à l'exécution d'une seule image de conteneur (étape) de la tâche à la fois, et ne stocke donc pas de ressources pour toutes les étapes de la tâche.

Le champ Resources de la spécification steps spécifie les limites de la consommation de ressources. Par défaut, les demandes de ressources pour l'unité centrale, la mémoire et le stockage éphémère sont réglées sur les valeurs BestEffort (zéro) ou sur les minimums fixés par les plages de limites dans ce projet.

Exemple de configuration des demandes et des limites de ressources pour une étape

spec:
  steps:
  - name: <step_name>
    resources:
      requests:
        memory: 2Gi
        cpu: 600m
      limits:
        memory: 4Gi
        cpu: 900m
Copy to Clipboard Toggle word wrap

Lorsque le paramètre LimitRange et les valeurs minimales pour les demandes de ressources de conteneur sont spécifiés dans le projet dans lequel le pipeline et les exécutions de tâches sont exécutés, Red Hat OpenShift Pipelines examine toutes les valeurs LimitRange dans le projet et utilise les valeurs minimales au lieu de zéro.

Exemple de configuration des paramètres de la plage de limites au niveau d'un projet

apiVersion: v1
kind: LimitRange
metadata:
  name: <limit_container_resource>
spec:
  limits:
  - max:
      cpu: "600m"
      memory: "2Gi"
    min:
      cpu: "200m"
      memory: "100Mi"
    default:
      cpu: "500m"
      memory: "800Mi"
    defaultRequest:
      cpu: "100m"
      memory: "100Mi"
    type: Container
...
Copy to Clipboard Toggle word wrap

Lorsque vous avez défini des limites de ressources pour les conteneurs de votre pod, OpenShift Container Platform additionne les limites de ressources demandées lorsque tous les conteneurs s'exécutent simultanément.

Pour consommer la quantité minimale de ressources nécessaires à l'exécution d'une étape à la fois dans la tâche invoquée, Red Hat OpenShift Pipelines demande le maximum de CPU, de mémoire et de stockage éphémère comme spécifié dans l'étape qui nécessite la plus grande quantité de ressources. Cela garantit que les besoins en ressources de toutes les étapes sont satisfaits. Les demandes autres que les valeurs maximales sont fixées à zéro.

Toutefois, ce comportement peut entraîner une utilisation des ressources plus importante que nécessaire. Si vous utilisez des quotas de ressources, cela peut également conduire à des pods non ordonnançables.

Prenons l'exemple d'une tâche à deux étapes qui utilise des scripts et qui ne définit pas de limites de ressources ni de demandes. Le pod résultant a deux conteneurs init (l'un pour la copie du point d'entrée, l'autre pour l'écriture des scripts) et deux conteneurs, un pour chaque étape.

OpenShift Container Platform utilise la plage de limites définie pour le projet afin de calculer les demandes de ressources requises et les limites. Pour cet exemple, définissez la plage de limites suivante dans le projet :

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-min-max-demo-lr
spec:
  limits:
  - max:
      memory: 1Gi
    min:
      memory: 500Mi
    type: Container
Copy to Clipboard Toggle word wrap

Dans ce scénario, chaque conteneur init utilise une demande de mémoire de 1Gi (la limite maximale de la plage de limites), et chaque conteneur utilise une demande de mémoire de 500Mi. Ainsi, la demande totale de mémoire pour le pod est de 2Gi.

Si la même plage de limites est utilisée avec une tâche de dix étapes, la demande finale de mémoire est de 5Gi, ce qui est supérieur à ce dont chaque étape a réellement besoin, c'est-à-dire 500Mi (puisque chaque étape s'exécute l'une après l'autre).

Ainsi, pour réduire la consommation de ressources, vous pouvez :

  • Réduire le nombre d'étapes d'une tâche donnée en regroupant différentes étapes en une étape plus importante, en utilisant la fonction de script et la même image. Cela permet de réduire la ressource minimale requise.
  • Répartir les étapes qui sont relativement indépendantes les unes des autres et qui peuvent s'exécuter seules dans plusieurs tâches au lieu d'une seule. Cela réduit le nombre d'étapes dans chaque tâche, ce qui diminue la demande pour chaque tâche, et le planificateur peut alors les exécuter lorsque les ressources sont disponibles.

Un objet ResourceQuota dans Red Hat OpenShift Pipelines contrôle la consommation totale de ressources par espace de noms. Vous pouvez l'utiliser pour limiter la quantité d'objets créés dans un espace de noms, en fonction du type d'objet. En outre, vous pouvez spécifier un quota de ressources de calcul pour limiter la quantité totale de ressources de calcul consommées dans un espace de noms.

Cependant, vous pourriez vouloir limiter la quantité de ressources de calcul consommées par les pods résultant de l'exécution d'un pipeline, plutôt que de définir des quotas pour l'ensemble de l'espace de noms. Actuellement, Red Hat OpenShift Pipelines ne vous permet pas de spécifier directement le quota de ressources de calcul pour un pipeline.

Pour obtenir un certain degré de contrôle sur l'utilisation des ressources informatiques par un pipeline, il convient d'envisager les approches alternatives suivantes :

  • Définir les demandes et les limites de ressources pour chaque étape d'une tâche.

    Exemple : Définir les demandes et les limites de ressources pour chaque étape d'une tâche.

    ...
    spec:
      steps:
        - name: step-with-limts
          resources:
            requests:
              memory: 1Gi
              cpu: 500m
            limits:
              memory: 2Gi
              cpu: 800m
    ...
    Copy to Clipboard Toggle word wrap

  • Définissez des limites de ressources en spécifiant des valeurs pour l'objet LimitRange. Pour plus d'informations sur LimitRange, reportez-vous à la section Limiter la consommation de ressources avec des plages de limites.
  • Réduire la consommation de ressources du pipeline.
  • Définir et gérer des quotas de ressources par projet.
  • Idéalement, le quota de ressources de calcul pour un pipeline devrait correspondre à la quantité totale de ressources de calcul consommées par les pods fonctionnant simultanément dans un pipeline. Cependant, les pods qui exécutent les tâches consomment des ressources de calcul en fonction du cas d'utilisation. Par exemple, une tâche de construction Maven peut nécessiter différentes ressources de calcul pour les différentes applications qu'elle construit. Par conséquent, vous ne pouvez pas prédéterminer les quotas de ressources de calcul pour les tâches d'un pipeline générique. Pour une meilleure prévisibilité et un meilleur contrôle de l'utilisation des ressources de calcul, utilisez des pipelines personnalisés pour différentes applications.
Note

Lors de l'utilisation de Red Hat OpenShift Pipelines dans un espace de noms configuré avec un objet ResourceQuota, les pods résultant des exécutions de tâches et des exécutions de pipelines peuvent échouer avec une erreur, telle que : failed quota: <quota name> must specify cpu, memory.

Pour éviter cette erreur, effectuez l'une des opérations suivantes :

  • (Recommandé) Spécifiez une plage de limites pour l'espace de noms.
  • Définir explicitement les demandes et les limites pour tous les conteneurs.

Pour plus d'informations, reportez-vous à la question et à la résolution.

Si votre cas d'utilisation n'est pas couvert par ces approches, vous pouvez mettre en œuvre une solution de contournement en utilisant un quota de ressources pour une classe de priorité.

Un objet PriorityClass associe les noms des classes de priorité aux valeurs entières qui indiquent leurs priorités relatives. Les valeurs les plus élevées augmentent la priorité d'une classe. Après avoir créé une classe de priorité, vous pouvez créer des modules qui spécifient le nom de la classe de priorité dans leurs spécifications. En outre, vous pouvez contrôler la consommation de ressources système d'un pod en fonction de sa priorité.

La spécification d'un quota de ressources pour un pipeline est similaire à la définition d'un quota de ressources pour le sous-ensemble de pods créés par l'exécution d'un pipeline. Les étapes suivantes fournissent un exemple de solution de contournement en spécifiant un quota de ressources basé sur la classe de priorité.

Procédure

  1. Créer une classe de priorité pour un pipeline.

    Exemple : Classe de priorité pour un pipeline

    apiVersion: scheduling.k8s.io/v1
    kind: PriorityClass
    metadata:
      name: pipeline1-pc
    value: 1000000
    description: "Priority class for pipeline1"
    Copy to Clipboard Toggle word wrap

  2. Créer un quota de ressources pour un pipeline.

    Exemple : Quota de ressources pour un pipeline

    apiVersion: v1
    kind: ResourceQuota
    metadata:
      name: pipeline1-rq
    spec:
      hard:
        cpu: "1000"
        memory: 200Gi
        pods: "10"
      scopeSelector:
        matchExpressions:
        - operator : In
          scopeName: PriorityClass
          values: ["pipeline1-pc"]
    Copy to Clipboard Toggle word wrap

  3. Vérifier l'utilisation du quota de ressources pour le pipeline.

    Exemple : Vérifier l'utilisation des quotas de ressources pour le pipeline

    $ oc describe quota
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    Name:       pipeline1-rq
    Namespace:  default
    Resource    Used  Hard
    --------    ----  ----
    cpu         0     1k
    memory      0     200Gi
    pods        0     10
    Copy to Clipboard Toggle word wrap

    Comme les pods ne sont pas en cours d'exécution, le quota est inutilisé.

  4. Créer les pipelines et les tâches.

    Exemple : YAML pour le pipeline

    apiVersion: tekton.dev/v1alpha1
    kind: Pipeline
    metadata:
      name: maven-build
    spec:
      workspaces:
      - name: local-maven-repo
      resources:
      - name: app-git
        type: git
      tasks:
      - name: build
        taskRef:
          name: mvn
        resources:
          inputs:
          - name: source
            resource: app-git
        params:
        - name: GOALS
          value: ["package"]
        workspaces:
        - name: maven-repo
          workspace: local-maven-repo
      - name: int-test
        taskRef:
          name: mvn
        runAfter: ["build"]
        resources:
          inputs:
          - name: source
            resource: app-git
        params:
        - name: GOALS
          value: ["verify"]
        workspaces:
        - name: maven-repo
          workspace: local-maven-repo
      - name: gen-report
        taskRef:
          name: mvn
        runAfter: ["build"]
        resources:
          inputs:
          - name: source
            resource: app-git
        params:
        - name: GOALS
          value: ["site"]
        workspaces:
        - name: maven-repo
          workspace: local-maven-repo
    Copy to Clipboard Toggle word wrap

    Exemple : YAML pour une tâche dans le pipeline

    apiVersion: tekton.dev/v1alpha1
    kind: Task
    metadata:
      name: mvn
    spec:
      workspaces:
      - name: maven-repo
      inputs:
        params:
        - name: GOALS
          description: The Maven goals to run
          type: array
          default: ["package"]
        resources:
        - name: source
          type: git
      steps:
        - name: mvn
          image: gcr.io/cloud-builders/mvn
          workingDir: /workspace/source
          command: ["/usr/bin/mvn"]
          args:
            - -Dmaven.repo.local=$(workspaces.maven-repo.path)
            - "$(inputs.params.GOALS)"
          priorityClassName: pipeline1-pc
    Copy to Clipboard Toggle word wrap

    Note

    Veiller à ce que toutes les tâches du pipeline appartiennent à la même classe de priorité.

  5. Créer et lancer l'exécution du pipeline.

    Exemple : YAML pour l'exécution d'un pipeline

    apiVersion: tekton.dev/v1alpha1
    kind: PipelineRun
    metadata:
      generateName: petclinic-run-
    spec:
      pipelineRef:
        name: maven-build
      resources:
      - name: app-git
        resourceSpec:
          type: git
          params:
            - name: url
              value: https://github.com/spring-projects/spring-petclinic
    Copy to Clipboard Toggle word wrap

  6. Une fois les pods créés, vérifiez l'utilisation du quota de ressources pour l'exécution du pipeline.

    Exemple : Vérifier l'utilisation des quotas de ressources pour le pipeline

    $ oc describe quota
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    Name:       pipeline1-rq
    Namespace:  default
    Resource    Used  Hard
    --------    ----  ----
    cpu         500m  1k
    memory      10Gi  200Gi
    pods        1     10
    Copy to Clipboard Toggle word wrap

    La sortie indique que vous pouvez gérer le quota de ressources combiné pour tous les pods fonctionnant simultanément et appartenant à une classe de priorité, en spécifiant le quota de ressources par classe de priorité.

Les objets TaskRun et PipelineRun périmés et leurs instances exécutées occupent des ressources physiques qui peuvent être utilisées pour les exécutions actives. Pour éviter ce gaspillage, Red Hat OpenShift Pipelines fournit des annotations que les administrateurs de clusters peuvent utiliser pour élaguer automatiquement les objets inutilisés et leurs instances dans divers espaces de noms.

Note
  • À partir de Red Hat OpenShift Pipelines 1.6, l'élagage automatique est activé par défaut.
  • La configuration de l'élagage automatique par la spécification d'annotations affecte l'ensemble de l'espace de noms. Vous ne pouvez pas procéder à un élagage automatique sélectif des exécutions de tâches individuelles et des exécutions de pipeline dans un espace de noms.

3.12.1. Configuration par défaut de l'élagueur

La configuration par défaut pour l'élagage périodique des ressources associées à l'exécution d'un pipeline est la suivante :

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
  name: config
...
spec:
  pruner:
    keep: 100
    resources:
    - pipelinerun
    schedule: 0 8 * * *
...
Copy to Clipboard Toggle word wrap

Vous pouvez remplacer la configuration par défaut de l'élagueur pour un espace de noms en utilisant les annotations sur l'espace de noms.

Pour élaguer automatiquement les ressources associées aux exécutions de tâches et de pipelines dans un espace de noms, vous pouvez définir les annotations suivantes dans l'espace de noms :

  • operator.tekton.dev/prune.schedule: Si la valeur de cette annotation est différente de la valeur spécifiée dans la définition de la ressource personnalisée TektonConfig, un nouveau travail cron est créé dans cet espace de noms.
  • operator.tekton.dev/prune.skip: Lorsqu'il est défini sur true, l'espace de noms pour lequel il est configuré n'est pas élagué.
  • operator.tekton.dev/prune.resources: Cette annotation accepte une liste de ressources séparées par des virgules. Pour élaguer une seule ressource, telle qu'une exécution de pipeline, définissez cette annotation à "pipelinerun". Pour élaguer plusieurs ressources, telles qu'une exécution de tâche et une exécution de pipeline, définissez cette annotation à "taskrun, pipelinerun".
  • operator.tekton.dev/prune.keep: Utilisez cette annotation pour conserver une ressource sans l'élaguer.
  • operator.tekton.dev/prune.keep-since: Cette annotation permet de conserver les ressources en fonction de leur âge. La valeur de cette annotation doit être égale à l'âge de la ressource en minutes. Par exemple, pour conserver les ressources qui ont été créées il y a cinq jours au maximum, définissez keep-since sur 7200.

    Note

    Les annotations keep et keep-since s'excluent mutuellement. Pour toute ressource, vous ne devez configurer qu'une seule d'entre elles.

  • operator.tekton.dev/prune.strategy: Fixer la valeur de cette annotation à keep ou keep-since.

Prenons l'exemple des annotations suivantes, qui conservent toutes les exécutions de tâches et de pipelines créées au cours des cinq derniers jours et suppriment les ressources les plus anciennes :

Exemple d'élagage automatique des annotations

...
  annotations:
    operator.tekton.dev/prune.resources: "taskrun, pipelinerun"
    operator.tekton.dev/prune.keep-since: 7200
...
Copy to Clipboard Toggle word wrap

3.12.3. Ressources complémentaires

La configuration par défaut d'OpenShift Pipelines 1.3.x et des versions ultérieures ne vous permet pas d'exécuter des pods avec un contexte de sécurité privilégié, si les pods résultent de l'exécution d'un pipeline ou d'une tâche. Pour de tels pods, le compte de service par défaut est pipeline, et la contrainte de contexte de sécurité (SCC) associée au compte de service pipeline est pipelines-scc. La SCC pipelines-scc est similaire à la SCC anyuid, mais avec des différences mineures telles que définies dans le fichier YAML pour la SCC des pipelines :

Exemple pipelines-scc.yaml snippet

apiVersion: security.openshift.io/v1
kind: SecurityContextConstraints
...
allowedCapabilities:
  - SETFCAP
...
fsGroup:
  type: MustRunAs
...
Copy to Clipboard Toggle word wrap

En outre, la tâche de cluster Buildah, livrée avec OpenShift Pipelines, utilise vfs comme pilote de stockage par défaut.

Procédure

Pour exécuter un pod (résultant de l'exécution d'un pipeline ou d'une tâche) avec le contexte de sécurité privileged, procédez aux modifications suivantes :

  • Configurez le compte d'utilisateur ou le compte de service associé pour qu'il dispose d'une CSC explicite. Vous pouvez effectuer la configuration en utilisant l'une des méthodes suivantes :

    • Exécutez la commande suivante :

      $ oc adm policy add-scc-to-user <scc-name> -z <service-account-name>
      Copy to Clipboard Toggle word wrap
    • Vous pouvez également modifier les fichiers YAML pour RoleBinding, et Role ou ClusterRole:

      Exemple d'objet RoleBinding

      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
        name: service-account-name 
      1
      
        namespace: default
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: pipelines-scc-clusterrole 
      2
      
      subjects:
      - kind: ServiceAccount
        name: pipeline
        namespace: default
      Copy to Clipboard Toggle word wrap

      1
      Remplacer par un nom de compte de service approprié.
      2
      Remplacer par un rôle de cluster approprié en fonction de la liaison de rôle que vous utilisez.

      Exemple d'objet ClusterRole

      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: pipelines-scc-clusterrole 
      1
      
      rules:
      - apiGroups:
        - security.openshift.io
        resourceNames:
        - nonroot
        resources:
        - securitycontextconstraints
        verbs:
        - use
      Copy to Clipboard Toggle word wrap

      1
      Remplacer par un rôle de cluster approprié en fonction de la liaison de rôle que vous utilisez.
    Note

    La meilleure pratique consiste à créer une copie des fichiers YAML par défaut et à apporter des modifications au fichier dupliqué.

  • Si vous n'utilisez pas le pilote de stockage vfs, configurez le compte de service associé à l'exécution de la tâche ou du pipeline pour qu'il ait un SCC privilégié, et définissez le contexte de sécurité comme privileged: true.

Lors de l'utilisation de la contrainte de contexte de sécurité (SCC) pipelines-scc associée au compte de service par défaut pipelines, les pods d'exécution de pipeline et d'exécution de tâche peuvent être confrontés à des dépassements de délai. Cela se produit parce que dans la SCC par défaut pipelines-scc, le paramètre fsGroup.type est défini sur MustRunAs.

Note

Pour plus d'informations sur les délais d'attente des pods, voir BZ#1995779.

Pour éviter les délais d'attente des pods, vous pouvez créer un SCC personnalisé avec le paramètre fsGroup.type défini sur RunAsAny, et l'associer à un compte de service personnalisé.

Note

La meilleure pratique consiste à utiliser un SCC et un compte de service personnalisés pour les exécutions de pipeline et les exécutions de tâches. Cette approche permet une plus grande flexibilité et n'interrompt pas les exécutions lorsque les valeurs par défaut sont modifiées lors d'une mise à niveau.

Procédure

  1. Définir une CSC personnalisée avec le paramètre fsGroup.type fixé à RunAsAny:

    Exemple : CCN personnalisé

    apiVersion: security.openshift.io/v1
    kind: SecurityContextConstraints
    metadata:
      annotations:
        kubernetes.io/description: my-scc is a close replica of anyuid scc. pipelines-scc has fsGroup - RunAsAny.
      name: my-scc
    allowHostDirVolumePlugin: false
    allowHostIPC: false
    allowHostNetwork: false
    allowHostPID: false
    allowHostPorts: false
    allowPrivilegeEscalation: true
    allowPrivilegedContainer: false
    allowedCapabilities: null
    defaultAddCapabilities: null
    fsGroup:
      type: RunAsAny
    groups:
    - system:cluster-admins
    priority: 10
    readOnlyRootFilesystem: false
    requiredDropCapabilities:
    - MKNOD
    runAsUser:
      type: RunAsAny
    seLinuxContext:
      type: MustRunAs
    supplementalGroups:
      type: RunAsAny
    volumes:
    - configMap
    - downwardAPI
    - emptyDir
    - persistentVolumeClaim
    - projected
    - secret
    Copy to Clipboard Toggle word wrap

  2. Créer le SCC personnalisé :

    Exemple : Créer le site my-scc SCC

    $ oc create -f my-scc.yaml
    Copy to Clipboard Toggle word wrap

  3. Créer un compte de service personnalisé :

    Exemple : Créer un compte de service fsgroup-runasany

    $ oc create serviceaccount fsgroup-runasany
    Copy to Clipboard Toggle word wrap

  4. Associer le SCC personnalisé au compte de service personnalisé :

    Exemple : Associer le CCN my-scc au compte de service fsgroup-runasany

    $ oc adm policy add-scc-to-user my-scc -z fsgroup-runasany
    Copy to Clipboard Toggle word wrap

    Si vous souhaitez utiliser le compte de service personnalisé pour des tâches privilégiées, vous pouvez associer le privileged SCC au compte de service personnalisé en exécutant la commande suivante :

    Exemple : Associer le CCN privileged au compte de service fsgroup-runasany

    $ oc adm policy add-scc-to-user privileged -z fsgroup-runasany
    Copy to Clipboard Toggle word wrap

  5. Utilisez le compte de service personnalisé dans l'exécution du pipeline et l'exécution de la tâche :

    Exemple : Pipeline exécuter YAML avec fsgroup-runasany compte de service personnalisé

    apiVersion: tekton.dev/v1beta1
    kind: PipelineRun
    metadata:
      name: <pipeline-run-name>
    spec:
      pipelineRef:
        name: <pipeline-cluster-task-name>
      serviceAccountName: 'fsgroup-runasany'
    Copy to Clipboard Toggle word wrap

    Exemple : Exécution d'une tâche YAML avec le compte de service personnalisé fsgroup-runasany

    apiVersion: tekton.dev/v1beta1
    kind: TaskRun
    metadata:
      name: <task-run-name>
    spec:
      taskRef:
        name: <cluster-task-name>
      serviceAccountName: 'fsgroup-runasany'
    Copy to Clipboard Toggle word wrap

En tant qu'administrateur, vous pouvez sécuriser les webhooks à l'aide d'écouteurs d'événements. Après avoir créé un espace de noms, vous activez HTTPS pour la ressource Eventlistener en ajoutant l'étiquette operator.tekton.dev/enable-annotation=enabled à l'espace de noms. Ensuite, vous créez une ressource Trigger et un itinéraire sécurisé à l'aide de la terminaison TLS recryptée.

Les déclencheurs dans Red Hat OpenShift Pipelines prennent en charge les connexions HTTP non sécurisées et HTTPS sécurisées à la ressource Eventlistener. HTTPS sécurise les connexions à l'intérieur et à l'extérieur du cluster.

Red Hat OpenShift Pipelines exécute un pod tekton-operator-proxy-webhook qui surveille les étiquettes dans l'espace de noms. Lorsque vous ajoutez l'étiquette à l'espace de noms, le webhook définit l'annotation service.beta.openshift.io/serving-cert-secret-name=<secret_name> sur l'objet EventListener. Cette annotation crée à son tour des secrets et les certificats requis.

service.beta.openshift.io/serving-cert-secret-name=<secret_name>
Copy to Clipboard Toggle word wrap

En outre, vous pouvez monter le secret créé dans le pod Eventlistener pour sécuriser la demande.

Pour créer une route avec la terminaison TLS recryptée, exécutez :

$ 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 recrypté pour créer un itinéraire sécurisé.

Exemple de recryptage du YAML de terminaison TLS pour créer une 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 de terminaison est fixé à reencrypt. Il s'agit du seul champ TLS obligatoire.
4
Il est nécessaire pour le recryptage. Le champ destinationCACertificate spécifie un certificat CA pour valider le certificat du point final, sécurisant ainsi la connexion entre le routeur et les pods de destination. Vous pouvez omettre ce champ dans l'un ou l'autre des scénarios suivants :
  • Le service utilise un certificat de signature de service.
  • L'administrateur spécifie un certificat d'autorité de certification par défaut pour le routeur, et le service dispose d'un certificat signé par cette autorité de certification.

Vous pouvez exécuter la commande oc create route reencrypt --help pour afficher d'autres options.

Cette section utilise l'exemple pipelines-tutorial pour démontrer la création d'un exemple de ressource EventListener à l'aide d'une connexion HTTPS sécurisée.

Procédure

  1. Créer la ressource TriggerBinding à partir du fichier YAML disponible dans le dépôt pipelines-tutorial :

    $ oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/master/03_triggers/01_binding.yaml
    Copy to Clipboard Toggle word wrap
  2. Créer la ressource TriggerTemplate à partir du fichier YAML disponible dans le dépôt pipelines-tutorial :

    $ oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/master/03_triggers/02_template.yaml
    Copy to Clipboard Toggle word wrap
  3. Créez la ressource Trigger directement à partir du référentiel pipelines-tutorial :

    $ oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/master/03_triggers/03_trigger.yaml
    Copy to Clipboard Toggle word wrap
  4. Créer une ressource EventListener en utilisant 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 à partir du fichier YAML disponible dans le dépôt pipelines-tutorial :

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

      $ 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

3.15. Authentification des pipelines avec git secret

Un secret Git consiste en des informations d'identification permettant d'interagir de manière sécurisée avec un dépôt Git, et est souvent utilisé pour automatiser l'authentification. Dans Red Hat OpenShift Pipelines, vous pouvez utiliser les secrets Git pour authentifier les exécutions de pipeline et les exécutions de tâches qui interagissent avec un dépôt Git pendant l'exécution.

Une exécution de pipeline ou une exécution de tâche accède aux secrets par le biais du compte de service associé. OpenShift Pipelines prend en charge l'utilisation des secrets Git en tant qu'annotations (paires clé-valeur) pour l'authentification de base et l'authentification basée sur SSH.

3.15.1. Sélection des diplômes

L'exécution d'un pipeline ou d'une tâche peut nécessiter plusieurs authentifications pour accéder à différents dépôts Git. Annotez chaque secret avec les domaines où OpenShift Pipelines peut utiliser ses informations d'identification.

Une clé d'annotation de credential pour les secrets Git doit commencer par tekton.dev/git-, et sa valeur est l'URL de l'hôte pour lequel vous voulez qu'OpenShift Pipelines utilise ce credential.

Dans l'exemple suivant, OpenShift Pipelines utilise un secret basic-auth, qui repose sur un nom d'utilisateur et un mot de passe, pour accéder aux dépôts à github.com et gitlab.com.

Exemple : Plusieurs informations d'identification pour l'authentification de base

apiVersion: v1
kind: Secret
metadata:
  annotations:
    tekton.dev/git-0: github.com
    tekton.dev/git-1: gitlab.com
type: kubernetes.io/basic-auth
stringData:
  username: 
1

  password: 
2
Copy to Clipboard Toggle word wrap

1
Nom d'utilisateur pour le référentiel
2
Mot de passe ou jeton d'accès personnel au référentiel

Vous pouvez également utiliser un secret ssh-auth (clé privée) pour accéder à un dépôt Git.

Exemple : Clé privée pour l'authentification basée sur SSH

apiVersion: v1
kind: Secret
metadata:
  annotations:
    tekton.dev/git-0: https://github.com
type: kubernetes.io/ssh-auth
stringData:
  ssh-privatekey: 
1
Copy to Clipboard Toggle word wrap

1
Le contenu du fichier de clé privée SSH.

3.15.2. Configuration de l'authentification de base pour Git

Pour qu'un pipeline puisse récupérer des ressources dans des référentiels protégés par mot de passe, vous devez configurer l'authentification de base pour ce pipeline.

Pour configurer l'authentification de base pour un pipeline, mettez à jour les fichiers secret.yaml, serviceaccount.yaml, et run.yaml avec les informations d'identification du secret Git pour le référentiel spécifié. Lorsque vous avez terminé ce processus, OpenShift Pipelines peut utiliser ces informations pour récupérer les ressources de pipeline spécifiées.

Note

Pour GitHub, l'authentification par mot de passe simple est obsolète. Utilisez plutôt un jeton d'accès personnel.

Procédure

  1. Dans le fichier secret.yaml, spécifiez le nom d'utilisateur et le mot de passe ou le jeton d'accès personnel GitHub pour accéder au dépôt Git cible.

    apiVersion: v1
    kind: Secret
    metadata:
      name: basic-user-pass 
    1
    
      annotations:
        tekton.dev/git-0: https://github.com
    type: kubernetes.io/basic-auth
    stringData:
      username: 
    2
    
      password: 
    3
    Copy to Clipboard Toggle word wrap
    1
    Nom du secret. Dans cet exemple, basic-user-pass.
    2
    Nom d'utilisateur pour le dépôt Git.
    3
    Mot de passe pour le dépôt Git.
  2. Dans le fichier serviceaccount.yaml, associez le secret au compte de service approprié.

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: build-bot 
    1
    
    secrets:
      - name: basic-user-pass 
    2
    Copy to Clipboard Toggle word wrap
    1
    Nom du compte de service. Dans cet exemple, build-bot.
    2
    Nom du secret. Dans cet exemple, basic-user-pass.
  3. Dans le fichier run.yaml, associez le compte de service à une exécution de tâche ou de pipeline.

    • Associer le compte de service à l'exécution d'une tâche :

      apiVersion: tekton.dev/v1beta1
      kind: TaskRun
      metadata:
        name: build-push-task-run-2 
      1
      
      spec:
        serviceAccountName: build-bot 
      2
      
        taskRef:
          name: build-push 
      3
      Copy to Clipboard Toggle word wrap
      1
      Nom de la tâche exécutée. Dans cet exemple, build-push-task-run-2.
      2
      Nom du compte de service. Dans cet exemple, build-bot.
      3
      Nom de la tâche. Dans cet exemple, build-push.
    • Associer le compte de service à une ressource PipelineRun:

      apiVersion: tekton.dev/v1beta1
      kind: PipelineRun
      metadata:
        name: demo-pipeline 
      1
      
        namespace: default
      spec:
        serviceAccountName: build-bot 
      2
      
        pipelineRef:
          name: demo-pipeline 
      3
      Copy to Clipboard Toggle word wrap
      1
      Nom de l'exécution du pipeline. Dans cet exemple, demo-pipeline.
      2
      Nom du compte de service. Dans cet exemple, build-bot.
      3
      Nom du pipeline. Dans cet exemple, demo-pipeline.
  4. Appliquez les modifications.

    $ oc apply --filename secret.yaml,serviceaccount.yaml,run.yaml
    Copy to Clipboard Toggle word wrap

3.15.3. Configuration de l'authentification SSH pour Git

Pour qu'un pipeline puisse récupérer des ressources à partir de référentiels configurés avec des clés SSH, vous devez configurer l'authentification basée sur SSH pour ce pipeline.

Pour configurer l'authentification basée sur SSH pour un pipeline, mettez à jour les fichiers secret.yaml, serviceaccount.yaml, et run.yaml avec les informations d'identification de la clé privée SSH pour le référentiel spécifié. Lorsque vous avez terminé ce processus, OpenShift Pipelines peut utiliser ces informations pour récupérer les ressources de pipeline spécifiées.

Note

Envisagez d'utiliser l'authentification SSH plutôt que l'authentification de base.

Procédure

  1. Générer une clé privée SSH ou copier une clé privée existante, qui est généralement disponible dans le fichier ~/.ssh/id_rsa.
  2. Dans le fichier secret.yaml, définissez la valeur de ssh-privatekey comme étant le contenu du fichier de clé privée SSH, et définissez la valeur de known_hosts comme étant le contenu du fichier d'hôtes connus.

    apiVersion: v1
    kind: Secret
    metadata:
      name: ssh-key 
    1
    
      annotations:
        tekton.dev/git-0: github.com
    type: kubernetes.io/ssh-auth
    stringData:
      ssh-privatekey: 
    2
    
      known_hosts: 
    3
    Copy to Clipboard Toggle word wrap
    1
    Nom du secret contenant la clé privée SSH. Dans cet exemple, ssh-key.
    2
    Le contenu du fichier de clé privée SSH.
    3
    Le contenu du fichier des hôtes connus.
    Important

    Si vous omettez la clé privée, OpenShift Pipelines accepte la clé publique de n'importe quel serveur.

  3. Facultatif : Pour spécifier un port SSH personnalisé, ajoutez :<port number> à la fin de la valeur annotation. Par exemple, tekton.dev/git-0: github.com:2222.
  4. Dans le fichier serviceaccount.yaml, associez le secret ssh-key au compte de service build-bot.

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: build-bot 
    1
    
    secrets:
      - name: ssh-key 
    2
    Copy to Clipboard Toggle word wrap
    1
    Nom du compte de service. Dans cet exemple, build-bot.
    2
    Nom du secret contenant la clé privée SSH. Dans cet exemple, ssh-key.
  5. Dans le fichier run.yaml, associez le compte de service à une exécution de tâche ou de pipeline.

    • Associer le compte de service à l'exécution d'une tâche :

      apiVersion: tekton.dev/v1beta1
      kind: TaskRun
      metadata:
        name: build-push-task-run-2 
      1
      
      spec:
        serviceAccountName: build-bot 
      2
      
        taskRef:
          name: build-push 
      3
      Copy to Clipboard Toggle word wrap
      1
      Nom de la tâche exécutée. Dans cet exemple, build-push-task-run-2.
      2
      Nom du compte de service. Dans cet exemple, build-bot.
      3
      Nom de la tâche. Dans cet exemple, build-push.
    • Associer le compte de service à un pipeline :

      apiVersion: tekton.dev/v1beta1
      kind: PipelineRun
      metadata:
        name: demo-pipeline 
      1
      
        namespace: default
      spec:
        serviceAccountName: build-bot 
      2
      
        pipelineRef:
          name: demo-pipeline 
      3
      Copy to Clipboard Toggle word wrap
      1
      Nom de l'exécution du pipeline. Dans cet exemple, demo-pipeline.
      2
      Nom du compte de service. Dans cet exemple, build-bot.
      3
      Nom du pipeline. Dans cet exemple, demo-pipeline.
  6. Appliquez les modifications.

    $ oc apply --filename secret.yaml,serviceaccount.yaml,run.yaml
    Copy to Clipboard Toggle word wrap

Lorsque vous invoquez des commandes Git, vous pouvez utiliser l'authentification SSH directement dans les étapes d'une tâche. L'authentification SSH ignore la variable $HOME et utilise uniquement le répertoire personnel de l'utilisateur spécifié dans le fichier /etc/passwd. Chaque étape d'une tâche doit donc établir un lien symbolique entre le répertoire /tekton/home/.ssh et le répertoire personnel de l'utilisateur associé.

Cependant, les liens symboliques explicites ne sont pas nécessaires lorsque vous utilisez une ressource de pipeline du type git, ou la tâche git-clone disponible dans le catalogue Tekton.

Pour un exemple d'utilisation de l'authentification SSH dans les tâches de type git, voir authenticating-git-commands.yaml.

3.15.5. Utiliser des secrets en tant qu'utilisateur non root

Il se peut que vous deviez utiliser des secrets en tant qu'utilisateur non root dans certains cas, par exemple :

  • Les utilisateurs et les groupes que les conteneurs utilisent pour exécuter des tâches sont choisis au hasard par la plateforme.
  • Les étapes d'une tâche définissent un contexte de sécurité non racine.
  • Une tâche spécifie un contexte de sécurité global non racine, qui s'applique à toutes les étapes d'une tâche.

Dans de tels scénarios, il convient de prendre en compte les aspects suivants de l'exécution des tâches et des pipelines en tant qu'utilisateur non root :

  • L'authentification SSH pour Git exige que l'utilisateur ait un répertoire personnel valide configuré dans le répertoire /etc/passwd. La spécification d'un UID qui n'a pas de répertoire personnel valide entraîne l'échec de l'authentification.
  • L'authentification SSH ignore la variable d'environnement $HOME. Vous devez donc créer un lien symbolique entre les fichiers secrets appropriés du répertoire $HOME défini par OpenShift Pipelines (/tekton/home) et le répertoire personnel valide de l'utilisateur non root.

En outre, pour configurer l'authentification SSH dans un contexte de sécurité non root, reportez-vous à l'exemple d'authentification des commandes git.

Par défaut, les secrets pour OpenShift Pipelines sont stockés dans le répertoire $HOME/tekton/home, et sont disponibles pour toutes les étapes d'une tâche.

Pour limiter un secret à des étapes spécifiques, utilisez la définition du secret pour spécifier un volume et montez le volume dans des étapes spécifiques.

Important

Tekton Chains est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas de les utiliser en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.

Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.

Tekton Chains est un contrôleur de définition de ressources personnalisées (CRD) de Kubernetes. Vous pouvez l'utiliser pour gérer la sécurité de la chaîne logistique des tâches et des pipelines créés à l'aide de Red Hat OpenShift Pipelines.

Par défaut, Tekton Chains observe toutes les exécutions de tâches dans votre cluster OpenShift Container Platform. Lorsque les exécutions de tâches sont terminées, Tekton Chains prend un instantané des exécutions de tâches. Il convertit ensuite l'instantané en un ou plusieurs formats de charge utile standard, et enfin signe et stocke tous les artefacts.

Pour capturer des informations sur l'exécution des tâches, Tekton Chains utilise les objets Result et PipelineResource. Lorsque ces objets ne sont pas disponibles, Tekton Chains utilise les URL et les extraits qualifiés des images OCI.

Note

L'objet PipelineResource est obsolète et sera supprimé dans une prochaine version ; pour une utilisation manuelle, l'objet Results est recommandé.

3.16.1. Caractéristiques principales

  • Vous pouvez signer les exécutions de tâches, les résultats des exécutions de tâches et les images de registre OCI avec des types de clés cryptographiques et des services tels que cosign.
  • Vous pouvez utiliser des formats d'attestation tels que in-toto.
  • Vous pouvez stocker en toute sécurité des signatures et des artefacts signés en utilisant le référentiel OCI comme backend de stockage.

Les administrateurs de clusters peuvent utiliser la ressource personnalisée (CR) TektonChain pour installer et gérer les chaînes Tekton.

Note

Tekton Chains est un composant optionnel de Red Hat OpenShift Pipelines. Actuellement, vous ne pouvez pas l'installer en utilisant le CR TektonConfig.

Conditions préalables

  • Assurez-vous que Red Hat OpenShift Pipelines Operator est installé dans l'espace de noms openshift-pipelines sur votre cluster.

Procédure

  1. Créez le TektonChain CR pour votre cluster OpenShift Container Platform.

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonChain
    metadata:
      name: chain
    spec:
      targetNamespace: openshift-pipelines
    Copy to Clipboard Toggle word wrap
  2. Appliquer la CR TektonChain.

    $ oc apply -f TektonChain.yaml 
    1
    Copy to Clipboard Toggle word wrap
    1
    Remplacer par le nom de fichier du CR TektonChain.
  3. Vérifier l'état de l'installation.

    $ oc get tektonchains.operator.tekton.dev
    Copy to Clipboard Toggle word wrap

3.16.3. Configuration des chaînes Tekton

Tekton Chains utilise un objet ConfigMap nommé chains-config dans l'espace de noms openshift-pipelines pour la configuration.

Pour configurer les chaînes Tekton, utilisez l'exemple suivant :

Exemple : Configuration des chaînes Tekton

$ oc patch configmap chains-config -n openshift-pipelines -p='{"data":{"artifacts.oci.storage" : \N- "\N", \N- "artifacts.taskrun.format\N":\N- "tekton\N", \N- "artifacts.taskrun.storage\N" : \N- "tekton\N" }}'
1
Copy to Clipboard Toggle word wrap

1
Utiliser une combinaison de paires clé-valeur prises en charge dans la charge utile JSON.

Les administrateurs de grappes peuvent utiliser diverses clés et valeurs prises en charge pour configurer les spécifications relatives aux exécutions de tâches, aux images OCI et au stockage.

Expand
Tableau 3.13. Configuration des chaînes : Clés prises en charge pour l'exécution des tâches
Touches prises en chargeDescriptionValeurs prises en chargeValeurs par défaut

artifacts.taskrun.format

Format dans lequel sont stockées les charges utiles de l'exécution des tâches.

tekton, in-toto

tekton

artifacts.taskrun.storage

Le backend de stockage pour les signatures d'exécution de tâches. Vous pouvez spécifier plusieurs backends sous la forme d'une liste séparée par des virgules, par exemple “tekton,oci”. Pour désactiver cet artefact, indiquez une chaîne vide “”.

tekton, oci

tekton

artifacts.taskrun.signer

Le backend de signature pour signer les charges utiles de l'exécution des tâches.

x509

x509

3.16.3.1.2. Clés prises en charge pour l'OCI
Expand
Tableau 3.14. Configuration des chaînes : Clés prises en charge pour l'OCI
Touches prises en chargeDescriptionValeurs prises en chargeValeurs par défaut

artifacts.oci.format

Format de stockage des données utiles OCI.

simplesigning

simplesigning

artifacts.oci.storage

Le backend de stockage pour les signatures OCI. Vous pouvez spécifier plusieurs backends sous la forme d'une liste séparée par des virgules, comme “oci,tekton”. Pour désactiver l'artefact OCI, indiquez une chaîne vide “”.

tekton, oci

oci

artifacts.oci.signer

Le backend de signature pour signer les données utiles de l'OCI.

x509, cosign

x509

3.16.3.1.3. Clés de stockage prises en charge
Expand
Tableau 3.15. Configuration des chaînes : Clés prises en charge pour le stockage
Touches prises en chargeDescriptionValeurs prises en chargeValeurs par défaut

artifacts.oci.repository

Le référentiel OCI pour stocker les signatures OCI.

Actuellement, les Chains ne supportent que le registre interne OpenShift OCI ; d'autres options populaires telles que Quay ne sont pas supportées.

 

3.16.4. Signer des secrets dans les chaînes Tekton

Les administrateurs de clusters peuvent générer une paire de clés et utiliser Tekton Chains pour signer des artefacts à l'aide d'un secret Kubernetes. Pour que les chaînes Tekton fonctionnent, une clé privée et un mot de passe pour les clés cryptées doivent exister en tant que partie du secret Kubernetes signing-secrets, dans l'espace de noms openshift-pipelines.

Actuellement, Tekton Chains prend en charge les systèmes de signature x509 et cosign.

Note

N'utilisez qu'un seul des schémas de signature pris en charge.

3.16.4.1. Signature à l'aide de x509

Pour utiliser le schéma de signature x509 avec les chaînes Tekton, stockez la clé privée x509.pem du type ed25519 ou ecdsa dans le secret Kubernetes signing-secrets. Veillez à ce que la clé soit stockée sous la forme d'un fichier PKCS8 PEM non chiffré (BEGIN PRIVATE KEY).

3.16.4.2. Signer en utilisant la cosignature

Pour utiliser le schéma de signature cosign avec les chaînes Tekton :

  1. Installer la cosignature.
  2. Générer les paires de clés cosign.key et cosign.pub.

    $ cosign generate-key-pair k8s://openshift-pipelines/signing-secrets
    Copy to Clipboard Toggle word wrap

    Cosign vous demande un mot de passe et crée un secret Kubernetes.

  3. Stockez la clé privée chiffrée cosign.key et le mot de passe de déchiffrement cosign.password dans le secret Kubernetes signing-secrets. Veillez à ce que la clé privée soit stockée sous la forme d'un fichier PEM crypté de type ENCRYPTED COSIGN PRIVATE KEY.
3.16.4.3. Signature de dépannage

Si les secrets de signature sont déjà renseignés, vous risquez d'obtenir l'erreur suivante :

Error from server (AlreadyExists): secrets "signing-secrets" already exists
Copy to Clipboard Toggle word wrap

Pour résoudre l'erreur :

  1. Supprimer les secrets :

    $ oc delete secret signing-secrets -n openshift-pipelines
    Copy to Clipboard Toggle word wrap
  2. Recréer les paires de clés et les stocker dans les secrets en utilisant le schéma de signature de votre choix.

3.16.5. S'authentifier auprès d'un registre OCI

Avant d'envoyer des signatures à un registre OCI, les administrateurs de clusters doivent configurer Tekton Chains pour qu'il s'authentifie auprès du registre. Le contrôleur Tekton Chains utilise le même compte de service que celui sous lequel la tâche s'exécute. Pour configurer un compte de service avec les informations d'identification nécessaires pour envoyer des signatures à un registre OCI, procédez comme suit :

Procédure

  1. Définissez l'espace de noms et le nom du compte de service Kubernetes.

    $ export NAMESPACE=<namespace> 
    1
    
    $ export SERVICE_ACCOUNT_NAME=<service_account> 
    2
    Copy to Clipboard Toggle word wrap
    1
    L'espace de noms associé au compte de service.
    2
    Le nom du compte de service.
  2. Créez un secret Kubernetes.

    $ oc create secret registry-credentials \
      --from-file=.dockerconfigjson \ 
    1
    
      --type=kubernetes.io/dockerconfigjson \
      -n $NAMESPACE
    Copy to Clipboard Toggle word wrap
    1
    Remplacer par le chemin d'accès à votre fichier de configuration Docker. Le chemin par défaut est ~/.docker/config.json.
  3. Donner au compte de service l'accès au secret.

    $ oc patch serviceaccount $SERVICE_ACCOUNT_NAME \
      -p "{\"imagePullSecrets\": [{\"name\": \"registry-credentials\"}]}" -n $NAMESPACE
    Copy to Clipboard Toggle word wrap

    Si vous corrigez le compte de service pipeline par défaut que Red Hat OpenShift Pipelines attribue à toutes les exécutions de tâches, l'opérateur Red Hat OpenShift Pipelines remplacera le compte de service. En tant que meilleure pratique, vous pouvez effectuer les étapes suivantes :

    1. Créez un compte de service distinct à affecter aux tâches exécutées par l'utilisateur.

      oc create serviceaccount <service_account_name> $ oc create serviceaccount <service_account_name>
      Copy to Clipboard Toggle word wrap
    2. Associez le compte de service aux exécutions de tâches en définissant la valeur du champ serviceaccountname dans le modèle d'exécution de tâches.

      apiVersion: tekton.dev/v1beta1
      kind: TaskRun
      metadata:
      name: build-push-task-run-2
      spec:
      serviceAccountName: build-bot 
      1
      
      taskRef:
        name: build-push
      ...
      Copy to Clipboard Toggle word wrap
      1
      Remplacer par le nom du compte de service nouvellement créé.

Pour vérifier les signatures des exécutions de tâches à l'aide des chaînes Tekton sans authentification supplémentaire, effectuez les tâches suivantes :

  • Créez une paire de clés x509 chiffrée et enregistrez-la en tant que secret Kubernetes.
  • Configurer le stockage de Tekton Chains.
  • Créer une tâche, la signer et stocker la signature et la charge utile sous forme d'annotations sur la tâche elle-même.
  • Récupérer la signature et la charge utile de l'exécution de la tâche signée.
  • Vérifier la signature de l'exécution de la tâche.

Conditions préalables

Assurez-vous que les éléments suivants sont installés sur le cluster :

  • Opérateur Red Hat OpenShift Pipelines
  • Chaînes Tekton
  • Cosignature

Procédure

  1. Créez une paire de clés x509 chiffrée et enregistrez-la en tant que secret Kubernetes :

    $ cosign generate-key-pair k8s://openshift-pipelines/signing-secrets
    Copy to Clipboard Toggle word wrap

    Fournissez un mot de passe lorsque vous y êtes invité. Cosign stocke la clé privée résultante en tant que partie du secret Kubernetes signing-secrets dans l'espace de noms openshift-pipelines.

  2. Dans la configuration des chaînes Tekton, désactivez le stockage OCI et définissez le stockage et le format de l'exécution de la tâche sur tekton.

    $ oc patch configmap chains-config -n openshift-pipelines -p='{"data":{"artifacts.oci.storage": "", "artifacts.taskrun.format":"tekton", "artifacts.taskrun.storage": "tekton"}}'
    Copy to Clipboard Toggle word wrap
  3. Redémarrez le contrôleur Tekton Chains pour vous assurer que la configuration modifiée est appliquée.

    $ oc delete po -n openshift-pipelines -l app=tekton-chains-controller
    Copy to Clipboard Toggle word wrap
  4. Créer une exécution de tâche.

    $ oc create -f https://raw.githubusercontent.com/tektoncd/chains/main/examples/taskruns/task-output-image.yaml 
    1
    
    taskrun.tekton.dev/build-push-run-output-image-qbjvh created
    Copy to Clipboard Toggle word wrap
    1
    Remplacer par l'URI ou le chemin d'accès au fichier qui pointe vers l'exécution de la tâche.
  5. Vérifiez l'état d'avancement des étapes et attendez la fin du processus.

    $ tkn tr describe --last
    [...truncated output...]
    NAME                            STATUS
    ∙ create-dir-builtimage-9467f   Completed
    ∙ git-source-sourcerepo-p2sk8   Completed
    ∙ build-and-push                Completed
    ∙ echo                          Completed
    ∙ image-digest-exporter-xlkn7   Completed
    Copy to Clipboard Toggle word wrap
  6. Récupérer la signature et la charge utile de l'objet stocké sous forme d'annotations codées base64:

    $ export TASKRUN_UID=$(tkn tr describe --last -o  jsonpath='{.metadata.uid}')
    $ tkn tr describe --last -o jsonpath="{.metadata.annotations.chains\.tekton\.dev/signature-taskrun-$TASKRUN_UID}" > signature
    $ tkn tr describe --last -o jsonpath="{.metadata.annotations.chains\.tekton\.dev/payload-taskrun-$TASKRUN_UID}" | base64 -d > payload
    Copy to Clipboard Toggle word wrap
  7. Vérifier la signature.

    $ cosign verify-blob --key k8s://openshift-pipelines/signing-secrets --signature ./signature ./payload
    Verified OK
    Copy to Clipboard Toggle word wrap

Les administrateurs de clusters peuvent utiliser les chaînes Tekton pour signer et vérifier les images et les provenances, en effectuant les tâches suivantes :

  • Créez une paire de clés x509 chiffrée et enregistrez-la en tant que secret Kubernetes.
  • Configurer l'authentification pour le registre OCI afin de stocker les images, les signatures d'images et les attestations d'images signées.
  • Configurer les chaînes Tekton pour qu'elles génèrent et signent la provenance.
  • Créer une image avec Kaniko lors d'une exécution de tâches.
  • Vérifier l'image et la provenance signées.

Conditions préalables

Assurez-vous que les éléments suivants sont installés sur le cluster :

Procédure

  1. Créez une paire de clés x509 chiffrée et enregistrez-la en tant que secret Kubernetes :

    $ cosign generate-key-pair k8s://openshift-pipelines/signing-secrets
    Copy to Clipboard Toggle word wrap

    Fournissez un mot de passe lorsque vous y êtes invité. Cosign stocke la clé privée résultante dans le secret Kubernetes signing-secrets dans l'espace de noms openshift-pipelines et écrit la clé publique dans le fichier local cosign.pub.

  2. Configurer l'authentification pour le registre d'images.

    1. Pour configurer le contrôleur Tekton Chains afin qu'il transmette des signatures à un registre OCI, utilisez les informations d'identification associées au compte de service de l'exécution de la tâche. Pour plus d'informations, voir la section "Authentification auprès d'un registre OCI".
    2. Pour configurer l'authentification pour une tâche Kaniko qui construit et pousse l'image vers le registre, créez un secret Kubernetes du fichier docker config.json contenant les informations d'identification requises.

      $ oc create secret generic <docker_config_secret_name> \ 
      1
      
        --from-file <path_to_config.json> 
      2
      Copy to Clipboard Toggle word wrap
      1
      Remplacer par le nom du secret de configuration de Docker.
      2
      Remplacer par le chemin d'accès au fichier docker config.json.
  3. Configurez les chaînes Tekton en définissant les paramètres artifacts.taskrun.format, artifacts.taskrun.storage et transparency.enabled dans l'objet chains-config:

    $ oc patch configmap chains-config -n openshift-pipelines -p='{"data":{"artifacts.taskrun.format": "in-toto"}}'
    
    $ oc patch configmap chains-config -n openshift-pipelines -p='{"data":{"artifacts.taskrun.storage": "oci"}}'
    
    $ oc patch configmap chains-config -n openshift-pipelines -p='{"data":{"transparency.enabled": "true"}}'
    Copy to Clipboard Toggle word wrap
  4. Lancez la tâche Kaniko.

    1. Appliquez la tâche Kaniko au cluster.

      $ oc apply -f examples/kaniko/kaniko.yaml 
      1
      Copy to Clipboard Toggle word wrap
      1
      Remplacer par l'URI ou le chemin d'accès à votre tâche Kaniko.
    2. Définir les variables d'environnement appropriées.

      $ export REGISTRY=<url_of_registry> 
      1
      
      
      $ export DOCKERCONFIG_SECRET_NAME=<name_of_the_secret_in_docker_config_json> 
      2
      Copy to Clipboard Toggle word wrap
      1
      Remplacer par l'URL du registre dans lequel vous souhaitez placer l'image.
      2
      Remplacer par le nom du secret dans le fichier docker config.json.
    3. Lancez la tâche Kaniko.

      $ tkn task start --param IMAGE=$REGISTRY/kaniko-chains --use-param-defaults --workspace name=source,emptyDir="" --workspace name=dockerconfig,secret=$DOCKERCONFIG_SECRET_NAME kaniko-chains
      Copy to Clipboard Toggle word wrap

      Observez les journaux de cette tâche jusqu'à ce que toutes les étapes soient terminées. Une fois l'authentification réussie, l'image finale sera poussée sur $REGISTRY/kaniko-chains.

  5. Attendez une minute pour permettre à Tekton Chains de générer la provenance et de la signer, puis vérifiez la disponibilité de l'annotation chains.tekton.dev/signed=true lors de l'exécution de la tâche.

    $ oc get tr <task_run_name> \ 
    1
    
    -o json | jq -r .metadata.annotations
    
    {
      "chains.tekton.dev/signed": "true",
      ...
    }
    Copy to Clipboard Toggle word wrap
    1
    Remplacer par le nom de l'exécution de la tâche.
  6. Vérifier l'image et l'attestation.

    $ cosign verify --key cosign.pub $REGISTRY/kaniko-chains
    
    $ cosign verify-attestation --key cosign.pub $REGISTRY/kaniko-chains
    Copy to Clipboard Toggle word wrap
  7. Trouver la provenance de l'image dans Rekor.

    1. Obtenir le résumé de l'image $REGISTRY/kaniko-chains. Vous pouvez le rechercher lors de l'exécution de la tâche, ou extraire l'image pour en extraire le condensé.
    2. Recherchez dans Rekor toutes les entrées qui correspondent à l'extrait sha256 de l'image.

      $ rekor-cli search --sha <image_digest> 
      1
      
      
      <uuid_1> 
      2
      
      <uuid_2> 
      3
      
      ...
      Copy to Clipboard Toggle word wrap
      1
      Remplacer par le code sha256 de l'image.
      2
      Le premier identifiant universel unique (UUID) correspondant.
      3
      Le deuxième UUID correspondant.

      Le résultat de la recherche affiche les UUID des entrées correspondantes. L'un de ces UUID contient l'attestation.

    3. Vérifier l'attestation.

      $ rekor-cli get --uuid <uuid> --format json | jq -r .Attestation | base64 --decode | jq
      Copy to Clipboard Toggle word wrap

Les journaux générés par l'exécution des pipelines, des tâches et des événements sont stockés dans leurs pods respectifs. Il est utile d'examiner et d'analyser les journaux à des fins de dépannage et d'audit.

Cependant, le fait de conserver les pods indéfiniment entraîne une consommation inutile de ressources et un encombrement des espaces de noms.

Pour éliminer toute dépendance sur les pods pour la visualisation des logs du pipeline, vous pouvez utiliser l'OpenShift Elasticsearch Operator et l'OpenShift Logging Operator. Ces opérateurs vous permettent de visualiser les logs du pipeline en utilisant la pile Elasticsearch Kibana, même après avoir supprimé les pods qui contenaient les logs.

3.17.1. Conditions préalables

Avant d'essayer d'afficher les journaux de pipeline dans un tableau de bord Kibana, vérifiez les points suivants :

  • Les étapes sont effectuées par un administrateur de cluster.
  • Les journaux d'exécution des pipelines et des tâches sont disponibles.
  • L'OpenShift Elasticsearch Operator et l'OpenShift Logging Operator sont installés.

3.17.2. Visualisation des journaux de pipeline dans Kibana

Pour afficher les journaux de pipeline dans la console web Kibana :

Procédure

  1. Connectez-vous à la console web d'OpenShift Container Platform en tant qu'administrateur de cluster.
  2. En haut à droite de la barre de menu, cliquez sur l'icône gridObservabilityLogging. La console web Kibana s'affiche.
  3. Créer un modèle d'index :

    1. Dans le panneau de navigation gauche de la console web Kibana, cliquez sur Management.
    2. Cliquez sur Create index pattern.
    3. Sous Step 1 of 2: Define index patternIndex pattern, entrez un modèle et cliquez sur * et cliquez sur Next Step.
    4. Sous Step 2 of 2: Configure settingsTime filter field name, sélectionnez @timestamp dans le menu déroulant et cliquez sur Create index pattern.
  4. Ajouter un filtre :

    1. Dans le panneau de navigation gauche de la console web Kibana, cliquez sur Discover.
    2. Cliquez sur Add a filter Edit Query DSL.

      Note
      • Pour chacun des exemples de filtres suivants, modifiez la requête et cliquez sur Save.
      • Les filtres sont appliqués l'un après l'autre.
      1. Filtrer les conteneurs liés aux pipelines :

        Exemple de requête pour filtrer les conteneurs de pipelines

        {
          "query": {
        	"match": {
          	"kubernetes.flat_labels": {
            	"query": "app_kubernetes_io/managed-by=tekton-pipelines",
            	"type": "phrase"
          	}
        	}
          }
        }
        Copy to Clipboard Toggle word wrap

      2. Filtrer tous les conteneurs qui ne sont pas des conteneurs place-tools. Pour illustrer l'utilisation des menus déroulants graphiques au lieu d'éditer le DSL de la requête, considérons l'approche suivante :

        Figure 3.6. Exemple de filtrage à l'aide des champs déroulants

        Not place-tools
      3. Filtre pipelinerun dans les étiquettes à mettre en évidence :

        Exemple de requête pour filtrer pipelinerun dans les étiquettes pour les mettre en évidence

        {
          "query": {
        	"match": {
          	"kubernetes.flat_labels": {
            	"query": "tekton_dev/pipelineRun=",
            	"type": "phrase"
          	}
        	}
          }
        }
        Copy to Clipboard Toggle word wrap

      4. Filtre pipeline dans les étiquettes à mettre en évidence :

        Exemple de requête pour filtrer pipeline dans les étiquettes pour les mettre en évidence

        {
          "query": {
        	"match": {
          	"kubernetes.flat_labels": {
            	"query": "tekton_dev/pipeline=",
            	"type": "phrase"
          	}
        	}
          }
        }
        Copy to Clipboard Toggle word wrap

    3. Dans la liste Available fields, sélectionnez les champs suivants :

      • kubernetes.flat_labels
      • message

        Assurez-vous que les champs sélectionnés sont affichés dans la liste Selected fields.

    4. Les journaux sont affichés dans le champ message.

      Figure 3.7. Messages filtrés

      Filtered messages

L'exécution d'OpenShift Pipelines en tant qu'utilisateur root sur un conteneur peut exposer les processus du conteneur et l'hôte à d'autres ressources potentiellement malveillantes. Vous pouvez réduire ce type d'exposition en exécutant la charge de travail en tant qu'utilisateur non root spécifique dans le conteneur. Pour sécuriser les builds non privilégiés des images de conteneurs en utilisant Buildah, vous pouvez effectuer les étapes suivantes :

  • Définir le compte de service personnalisé (SA) et la contrainte de contexte de sécurité (SCC).
  • Configurez Buildah pour qu'il utilise l'utilisateur build avec l'identifiant 1000.
  • Lancez une exécution de tâche avec une carte de configuration personnalisée ou intégrez-la à une exécution de pipeline.

La SA par défaut pipeline permet d'utiliser un identifiant d'utilisateur en dehors de la plage de l'espace de noms. Pour réduire la dépendance à l'égard de la SA par défaut, vous pouvez définir une SA et un SCC personnalisés avec le rôle de cluster et les liaisons de rôle nécessaires pour l'utilisateur build avec l'identifiant 1000.

Procédure

  • Créez un SA et un SCC personnalisés avec le rôle de cluster et les liaisons de rôle nécessaires.

    Exemple : SA et SCC personnalisés pour l'identifiant utilisé 1000

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: pipelines-sa-userid-1000 
    1
    
    ---
    kind: SecurityContextConstraints
    metadata:
      annotations:
      name: pipelines-scc-userid-1000 
    2
    
    allowHostDirVolumePlugin: false
    allowHostIPC: false
    allowHostNetwork: false
    allowHostPID: false
    allowHostPorts: false
    allowPrivilegeEscalation: false
    allowPrivilegedContainer: false
    allowedCapabilities: null
    apiVersion: security.openshift.io/v1
    defaultAddCapabilities: null
    fsGroup:
      type: MustRunAs
    groups:
    - system:cluster-admins
    priority: 10
    readOnlyRootFilesystem: false
    requiredDropCapabilities:
    - MKNOD
    runAsUser: 
    3
    
      type: MustRunAs
      uid: 1000
    seLinuxContext:
      type: MustRunAs
    supplementalGroups:
      type: RunAsAny
    users: []
    volumes:
    - configMap
    - downwardAPI
    - emptyDir
    - persistentVolumeClaim
    - projected
    - secret
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: pipelines-scc-userid-1000-clusterrole 
    4
    
    rules:
    - apiGroups:
      - security.openshift.io
      resourceNames:
      - pipelines-scc-userid-1000
      resources:
      - securitycontextconstraints
      verbs:
      - use
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: pipelines-scc-userid-1000-rolebinding 
    5
    
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: pipelines-scc-userid-1000-clusterrole
    subjects:
    - kind: ServiceAccount
      name: pipelines-sa-userid-1000
    Copy to Clipboard Toggle word wrap

1
Définir une SA personnalisée.
2
Définir un SCC personnalisé créé sur la base de privilèges restreints, avec le champ runAsUser modifié.
3
Restreindre tout pod rattaché au SCC personnalisé par l'intermédiaire de la SA personnalisée à s'exécuter sous l'identité de l'utilisateur 1000.
4
Définir un rôle de cluster qui utilise le SCC personnalisé.
5
Lier le rôle de cluster qui utilise le SCC personnalisé à la SA personnalisée.

Vous pouvez définir une tâche Buildah pour utiliser l'utilisateur build avec l'identifiant 1000.

Procédure

  1. Créez une copie de la tâche de cluster buildah en tant que tâche ordinaire.

    $ tkn task create --from=buildah
    Copy to Clipboard Toggle word wrap
  2. Modifiez la tâche buildah copiée.

    $ oc edit task buildah
    Copy to Clipboard Toggle word wrap

    Exemple : Tâche Buildah modifiée avec l'utilisateur build

    apiVersion: tekton.dev/v1beta1
    kind: Task
    metadata:
      name: buildah-as-user
    spec:
      description: >-
        Buildah task builds source into a container image and
        then pushes it to a container registry.
        Buildah Task builds source into a container image using Project Atomic's
        Buildah build tool.It uses Buildah's support for building from Dockerfiles,
        using its buildah bud command.This command executes the directives in the
        Dockerfile to assemble a container image, then pushes that image to a
        container registry.
      params:
      - name: IMAGE
        description: Reference of the image buildah will produce.
      - name: BUILDER_IMAGE
        description: The location of the buildah builder image.
        default: registry.redhat.io/rhel8/buildah@sha256:99cae35f40c7ec050fed3765b2b27e0b8bbea2aa2da7c16408e2ca13c60ff8ee
      - name: STORAGE_DRIVER
        description: Set buildah storage driver
        default: vfs
      - name: DOCKERFILE
        description: Path to the Dockerfile to build.
        default: ./Dockerfile
      - name: CONTEXT
        description: Path to the directory to use as context.
        default: .
      - name: TLSVERIFY
        description: Verify the TLS on the registry endpoint (for push/pull to a non-TLS registry)
        default: "true"
      - name: FORMAT
        description: The format of the built container, oci or docker
        default: "oci"
      - name: BUILD_EXTRA_ARGS
        description: Extra parameters passed for the build command when building images.
        default: ""
      - description: Extra parameters passed for the push command when pushing images.
        name: PUSH_EXTRA_ARGS
        type: string
        default: ""
      - description: Skip pushing the built image
        name: SKIP_PUSH
        type: string
        default: "false"
      results:
      - description: Digest of the image just built.
        name: IMAGE_DIGEST
        type: string
      workspaces:
      - name: source
      steps:
      - name: build
        securityContext:
          runAsUser: 1000 
    1
    
        image: $(params.BUILDER_IMAGE)
        workingDir: $(workspaces.source.path)
        script: |
          echo "Running as USER ID `id`" 
    2
    
          buildah --storage-driver=$(params.STORAGE_DRIVER) bud \
            $(params.BUILD_EXTRA_ARGS) --format=$(params.FORMAT) \
            --tls-verify=$(params.TLSVERIFY) --no-cache \
            -f $(params.DOCKERFILE) -t $(params.IMAGE) $(params.CONTEXT)
          [[ "$(params.SKIP_PUSH)" == "true" ]] && echo "Push skipped" && exit 0
          buildah --storage-driver=$(params.STORAGE_DRIVER) push \
            $(params.PUSH_EXTRA_ARGS) --tls-verify=$(params.TLSVERIFY) \
            --digestfile $(workspaces.source.path)/image-digest $(params.IMAGE) \
            docker://$(params.IMAGE)
          cat $(workspaces.source.path)/image-digest | tee /tekton/results/IMAGE_DIGEST
        volumeMounts:
        - name: varlibcontainers
          mountPath: /home/build/.local/share/containers
        volumeMounts:
        - name: varlibcontainers
          mountPath: /home/build/.local/share/containers
      volumes:
      - name: varlibcontainers
        emptyDir: {}
    Copy to Clipboard Toggle word wrap

    1
    Exécutez le conteneur explicitement en tant qu'utilisateur 1000, ce qui correspond à l'utilisateur build dans l'image Buildah.
    2
    Affichez l'identifiant de l'utilisateur pour confirmer que le processus s'exécute en tant qu'identifiant de l'utilisateur 1000.

Après avoir défini la tâche de cluster Buildah personnalisée, vous pouvez créer un objet TaskRun qui construit une image en tant qu'utilisateur build avec l'identifiant d'utilisateur 1000. En outre, vous pouvez intégrer l'objet TaskRun dans un objet PipelineRun.

Procédure

  1. Créez un objet TaskRun avec des objets personnalisés ConfigMap et Dockerfile.

    Exemple : Une tâche qui exécute Buildah en tant qu'identifiant de l'utilisateur 1000

    apiVersion: v1
    data:
      Dockerfile: |
        ARG BASE_IMG=registry.access.redhat.com/ubi8/ubi
        FROM $BASE_IMG AS buildah-runner
        RUN dnf -y update && \
            dnf -y install git && \
            dnf clean all
        CMD git
    kind: ConfigMap
    metadata:
      name: dockerfile 
    1
    
    ---
    apiVersion: tekton.dev/v1beta1
    kind: TaskRun
    metadata:
      name: buildah-as-user-1000
    spec:
      serviceAccountName: pipelines-sa-userid-1000
      params:
      - name: IMAGE
        value: image-registry.openshift-image-registry.svc:5000/test/buildahuser
      taskRef:
        kind: Task
        name: buildah-as-user
      workspaces:
      - configMap:
          name: dockerfile 
    2
    
        name: source
    Copy to Clipboard Toggle word wrap

    1
    Utiliser une carte de configuration parce que l'accent est mis sur l'exécution de la tâche, sans aucune tâche préalable qui récupère des sources avec un Dockerfile.
    2
    Monter une carte de configuration comme espace de travail source pour la tâche buildah-as-user.
  2. (Facultatif) Créer un pipeline et un cycle de pipeline correspondant.

    Exemple : Une canalisation et un tronçon de canalisation correspondant

    apiVersion: tekton.dev/v1beta1
    kind: Pipeline
    metadata:
      name: pipeline-buildah-as-user-1000
    spec:
      params:
      - name: IMAGE
      - name: URL
      workspaces:
      - name: shared-workspace
      - name: sslcertdir
        optional: true
      tasks:
      - name: fetch-repository 
    1
    
        taskRef:
          name: git-clone
          kind: ClusterTask
        workspaces:
        - name: output
          workspace: shared-workspace
        params:
        - name: url
          value: $(params.URL)
        - name: subdirectory
          value: ""
        - name: deleteExisting
          value: "true"
      - name: buildah
        taskRef:
          name: buildah-as-user 
    2
    
        runAfter:
        - fetch-repository
        workspaces:
        - name: source
          workspace: shared-workspace
        - name: sslcertdir
          workspace: sslcertdir
        params:
        - name: IMAGE
          value: $(params.IMAGE)
    ---
    apiVersion: tekton.dev/v1beta1
    kind: PipelineRun
    metadata:
      name: pipelinerun-buildah-as-user-1000
    spec:
      serviceAccountName: pipelines-sa-userid-1000
      params:
      - name: URL
        value: https://github.com/openshift/pipelines-vote-api
      - name: IMAGE
        value: image-registry.openshift-image-registry.svc:5000/test/buildahuser
      taskRef:
        kind: Pipeline
        name: pipeline-buildah-as-user-1000
      workspaces:
      - name: shared-workspace 
    3
    
        volumeClaimTemplate:
          spec:
            accessModes:
              - ReadWriteOnce
            resources:
              requests:
                storage: 100Mi
    Copy to Clipboard Toggle word wrap

    1
    Utilisez la tâche de cluster git-clone pour récupérer la source contenant un fichier Docker et le construire à l'aide de la tâche Buildah modifiée.
    2
    Se référer à la tâche Buildah modifiée.
    3
    Partager les données entre la tâche git-clone et la tâche Buildah modifiée à l'aide d'une revendication de volume persistant (PVC) créée automatiquement par le contrôleur.
  3. Lancer l'exécution de la tâche ou du pipeline.

3.18.4. Limites des versions non privilégiées

Le processus de construction sans privilège fonctionne avec la plupart des objets Dockerfile. Cependant, certaines limitations connues peuvent entraîner l'échec de la construction :

  • L'utilisation de l'option --mount=type=cache peut échouer en raison de problèmes de permissions non nécessaires. Pour plus d'informations, voir cet article.
  • L'utilisation de l'option --mount=type=secret échoue car le montage des ressources nécessite des capacités supplémentaires qui ne sont pas fournies par le SCC personnalisé.

Chapitre 4. GitOps

4.1. Notes de mise à jour de Red Hat OpenShift GitOps

Red Hat OpenShift GitOps est un moyen déclaratif de mettre en œuvre le déploiement continu pour les applications natives du cloud. Red Hat OpenShift GitOps assure la cohérence des applications lorsque vous les déployez sur différents clusters dans différents environnements, tels que : développement, staging et production. Red Hat OpenShift GitOps vous aide à automatiser les tâches suivantes :

  • Veiller à ce que les grappes aient des états similaires pour la configuration, la surveillance et le stockage
  • Récupérer ou recréer des clusters à partir d'un état connu
  • Appliquer ou inverser les changements de configuration à plusieurs clusters OpenShift Container Platform
  • Associer une configuration modèle à différents environnements
  • Promouvoir les applications sur l'ensemble des clusters, de la phase d'essai à la production

Pour une vue d'ensemble de Red Hat OpenShift GitOps, voir Comprendre OpenShift GitOps.

4.1.1. Matrice de compatibilité et de soutien

Certaines fonctionnalités de cette version sont actuellement en avant-première technologique. Ces fonctionnalités expérimentales ne sont pas destinées à être utilisées en production.

Dans le tableau, les caractéristiques sont marquées par les statuts suivants :

  • TP: Technology Preview
  • GA: General Availability
  • NA: Not Applicable
Expand
OpenShift GitOpsComponent VersionsOpenShift Versions

Version

kam

Helm

Kustomize

Argo CD

ApplicationSet

Dex

RH SSO

 

1.8.0

0.0,47 TP

3.10.0 GA

4.5.7 GA

2.6.3 GA

NA

2.35.1 GA

7.5.1 GA

4.10-4.12

1.7.0

0.0,46 TP

3.10.0 GA

4.5.7 GA

2.5.4 GA

NA

2.35.1 GA

7.5.1 GA

4.10-4.12

1.6.0

0.0,46 TP

3.8.1 GA

4.4.1 GA

2.4,5 GA

GA et inclus dans la composante ArgoCD

2.30.3 GA

7.5.1 GA

4.8-4.11

1.5.0

0.0.42 TP

3.8.0 GA

4.4.1 GA

2.3.3 GA

0.4.1 TP

2.30.3 GA

7.5.1 GA

4.8-4.11

1.4.0

0.0.41 TP

3.7.1 GA

4.2.0 GA

2.2.2 GA

0.2.0 TP

2.30,0 GA

7.4.0 GA

4.7-4.10

1.3.0

0.0.40 TP

3.6.0 GA

4.2.0 GA

2.1.2 GA

0.2.0 TP

2.28,0 GA

7.4.0 GA

4.7-4.9, 4.6 avec soutien limité de l'AG

1.2.0

0.0.38 TP

3.5.0 GA

3.9.4 GA

2.0,5 GA

0.1.0 TP

NA

7.4.0 GA

4.8

1.1.0

0.0.32 TP

3.5.0 GA

3.9.4 GA

2.0,0 GA

NA

NA

NA

4.7

  • kam est l'interface de ligne de commande (CLI) du Gestionnaire d'applications Red Hat OpenShift GitOps.
  • RH SSO est l'abréviation de Red Hat SSO.
4.1.1.1. Caractéristiques de l'aperçu technologique

Les fonctionnalités mentionnées dans le tableau suivant sont actuellement en avant-première technologique (TP). Ces fonctionnalités expérimentales ne sont pas destinées à être utilisées en production.

Expand
Tableau 4.1. Suivi de l'avant-première technologique
FonctionnalitéTP dans les versions de Red Hat OpenShift GitOpsGA dans Red Hat OpenShift GitOps versions

Stratégie de déploiement progressif d'ApplicationSet

1.8.0

NA

Sources multiples pour une demande

1.8.0

NA

Applications du CD Argo dans des espaces nominatifs autres que ceux des avions de contrôle

1.7.0

NA

Contrôleur de notifications Argo CD

1.6.0

NA

La page Red Hat OpenShift GitOps Environments dans la perspective Developer de la console web OpenShift Container Platform

1.1.0

NA

4.1.2. Rendre l'open source plus inclusif

Red Hat s'engage à remplacer les termes problématiques dans son code, sa documentation et ses propriétés Web. Nous commençons par ces quatre termes : master, slave, blacklist et whitelist. En raison de l'ampleur de cette entreprise, ces changements seront mis en œuvre progressivement au cours de plusieurs versions à venir. Pour plus de détails, voir le message de notre directeur technique Chris Wright.

4.1.3. Notes de version pour Red Hat OpenShift GitOps 1.8.2

Red Hat OpenShift GitOps 1.8.2 est maintenant disponible sur OpenShift Container Platform 4.10, 4.11, et 4.12.

4.1.3.1. Problèmes corrigés

Les problèmes suivants ont été résolus dans la version actuelle :

  • Avant cette mise à jour, lorsque vous configuriez Dex en utilisant le paramètre .spec.dex et que vous essayiez de vous connecter à l'interface utilisateur d'Argo CD en utilisant l'option LOG IN VIA OPENSHIFT, vous ne pouviez pas vous connecter. Cette mise à jour corrige le problème.

    Important

    Le paramètre spec.dex dans la CR ArgoCD est obsolète. Dans une prochaine version de Red Hat OpenShift GitOps v1.9, il est prévu de supprimer la configuration de Dex à l'aide du paramètre spec.dex dans la CR ArgoCD. Envisagez d'utiliser le paramètre .spec.sso à la place. Voir "Activer ou désactiver Dex en utilisant .spec.sso". GITOPS-2761

  • Avant cette mise à jour, le cluster et les pods CLI kam ne démarraient pas avec une nouvelle installation de Red Hat OpenShift GitOps v1.8.0 sur le cluster OpenShift Container Platform 4.10. Cette mise à jour corrige le problème et maintenant tous les pods fonctionnent comme prévu. GITOPS-2762

4.1.4. Notes de version pour Red Hat OpenShift GitOps 1.8.1

Red Hat OpenShift GitOps 1.8.1 est maintenant disponible sur OpenShift Container Platform 4.10, 4.11, et 4.12.

4.1.4.1. Mise à jour des errata

Publié : 2023-03-23

La liste des correctifs de sécurité inclus dans cette version est documentée dans l'avis RHSA-2023:1452.

Si vous avez installé Red Hat OpenShift GitOps Operator, exécutez la commande suivante pour afficher les images de conteneurs dans cette version :

$ oc describe deployment gitops-operator-controller-manager -n openshift-operators
Copy to Clipboard Toggle word wrap

4.1.5. Notes de version pour Red Hat OpenShift GitOps 1.8.0

Red Hat OpenShift GitOps 1.8.0 est maintenant disponible sur OpenShift Container Platform 4.10, 4.11, et 4.12.

4.1.5.1. Nouvelles fonctionnalités

La version actuelle apporte les améliorations suivantes :

  • Avec cette mise à jour, vous pouvez ajouter la prise en charge de la fonctionnalité ApplicationSet Progressive Rollout Strategy. Grâce à cette fonctionnalité, vous pouvez améliorer la ressource ApplicationSet d'ArgoCD pour intégrer une stratégie de déploiement pour une mise à jour progressive des ressources d'application après avoir modifié la spécification de l'ApplicationSet ou les modèles d'application. Lorsque vous activez cette fonctionnalité, les applications sont mises à jour dans un ordre déclaratif au lieu d'être mises à jour simultanément. GITOPS-956

    Important

    ApplicationSet Progressive Rollout Strategy est une fonctionnalité de l'aperçu technologique.

  • Avec cette mise à jour, la page Application environments dans la perspective Developer de la console web OpenShift Container Platform est découplée de l'interface de ligne de commande (CLI) Red Hat OpenShift GitOps Application Manager, kam. Vous n'avez pas besoin d'utiliser l'interface de ligne de commande kam pour générer des manifestes d'environnement d'application pour que les environnements apparaissent dans la perspective Developer de la console web d'OpenShift Container Platform. Vous pouvez utiliser vos propres manifestes, mais les environnements doivent toujours être représentés par des espaces de noms. De plus, des étiquettes et des annotations spécifiques sont toujours nécessaires. GITOPS-1785
  • Avec cette mise à jour, Red Hat OpenShift GitOps Operator et kam CLI sont maintenant disponibles pour l'architecture ARM sur OpenShift Container Platform. GITOPS-1688

    Important

    spec.sso.provider: keycloak n'est pas encore pris en charge sur ARM.

  • Avec cette mise à jour, vous pouvez activer la surveillance de la charge de travail pour des instances Argo CD spécifiques en définissant la valeur de l'indicateur .spec.monitoring.enabled sur true. En conséquence, l'opérateur crée un objet PrometheusRule qui contient des règles d'alerte pour chaque composant Argo CD. Ces règles d'alerte déclenchent une alerte lorsque le nombre de répliques du composant correspondant s'éloigne de l'état souhaité pendant un certain temps. L'opérateur n'écrase pas les modifications apportées à l'objet PrometheusRule par les utilisateurs. GITOPS-2459
  • Avec cette mise à jour, vous pouvez passer des arguments de commande au déploiement du serveur repo en utilisant le CD CR d'Argo. GITOPS-2445

    Par exemple :

    apiVersion: argoproj.io/v1alpha1
    kind: ArgoCD
    metadata:
      name: example-argocd
    spec:
      repo:
        extraRepoCommandArgs:
          - --max.combined.directory.manifests.size
          - 10M
    Copy to Clipboard Toggle word wrap
4.1.5.2. Problèmes corrigés

Les problèmes suivants ont été résolus dans la version actuelle :

  • Avant cette mise à jour, la variable d'environnement ARGOCD_GIT_MODULES_ENABLED ne pouvait être définie que sur le pod openshift-gitops-repo-server et non sur le pod ApplicationSet Controller. Par conséquent, lors de l'utilisation du générateur Git, les sous-modules Git étaient clonés lors de la génération des applications enfants car la variable était absente de l'environnement ApplicationSet Controller. De plus, si les informations d'identification requises pour cloner ces sous-modules n'étaient pas configurées dans ArgoCD, la génération de l'application échouait. Cette mise à jour corrige le problème ; vous pouvez maintenant ajouter des variables d'environnement telles que ArgoCD_GIT_MODULES_ENABLED au pod ApplicationSet Controller en utilisant le CD CR d'Argo. Le pod ApplicationSet Controller génère alors avec succès des applications enfants à partir du référentiel cloné et aucun sous-module n'est cloné dans le processus. GITOPS-2399

    Par exemple :

    apiVersion: argoproj.io/v1alpha1
    kind: ArgoCD
    metadata:
      name: example-argocd
      labels:
        example: basic
    spec:
      applicationSet:
        env:
         - name: ARGOCD_GIT_MODULES_ENABLED
           value: "true"
    Copy to Clipboard Toggle word wrap
  • Avant cette mise à jour, lors de l'installation de Red Hat OpenShift GitOps Operator v1.7.0, le fichier de configuration par défaut argocd-cm.yml créé pour l'authentification de Dex contenait le secret client encodé en base64 au format d'une paire key:value. Cette mise à jour corrige ce problème en ne stockant pas le secret client dans le fichier de configuration par défaut argocd-cm.yml. Au lieu de cela, le secret client se trouve maintenant dans un objet argocd-secret, et vous pouvez le référencer dans la carte de configuration en tant que nom de secret. GITOPS-2570
4.1.5.3. Problèmes connus
  • Lorsque vous déployez des applications en utilisant vos manifestes sans utiliser la CLI kam et que vous visualisez les applications dans la page Application environments dans la perspective Developer de la console web OpenShift Container Platform, l'URL Argo CD de l'application correspondante ne charge pas la page comme prévu à partir de l'icône Argo CD dans la carte. GITOPS-2736

4.1.6. Notes de version pour Red Hat OpenShift GitOps 1.7.3

Red Hat OpenShift GitOps 1.7.3 est maintenant disponible sur OpenShift Container Platform 4.10, 4.11, et 4.12.

4.1.6.1. Mise à jour des errata

Publié : 2023-03-23

La liste des correctifs de sécurité inclus dans cette version est documentée dans l'avis RHSA-2023:1454.

Si vous avez installé Red Hat OpenShift GitOps Operator, exécutez la commande suivante pour afficher les images de conteneurs dans cette version :

$ oc describe deployment gitops-operator-controller-manager -n openshift-operators
Copy to Clipboard Toggle word wrap

4.1.7. Notes de version pour Red Hat OpenShift GitOps 1.7.1

Red Hat OpenShift GitOps 1.7.1 est maintenant disponible sur OpenShift Container Platform 4.10, 4.11, et 4.12.

4.1.7.1. Mise à jour des errata

Publié : 2023-01-25

La liste des correctifs de sécurité inclus dans cette version est documentée dans l'avis RHSA-2023:0467.

Si vous avez installé Red Hat OpenShift GitOps Operator, exécutez la commande suivante pour afficher les images de conteneurs dans cette version :

$ oc describe deployment gitops-operator-controller-manager -n openshift-operators
Copy to Clipboard Toggle word wrap

4.1.8. Notes de version pour Red Hat OpenShift GitOps 1.7.0

Red Hat OpenShift GitOps 1.7.0 est maintenant disponible sur OpenShift Container Platform 4.10, 4.11, et 4.12.

4.1.8.1. Nouvelles fonctionnalités

La version actuelle apporte les améliorations suivantes :

  • Avec cette mise à jour, vous pouvez ajouter des variables d'environnement au contrôleur de notifications. GITOPS-2313
  • Avec cette mise à jour, la paire clé-valeur nodeSelector "kubernetes.io/os": "linux" par défaut est ajoutée à toutes les charges de travail de manière à ce qu'elles ne soient planifiées que sur des nœuds Linux. De plus, tous les sélecteurs de nœuds personnalisés sont ajoutés au sélecteur par défaut et sont prioritaires s'ils ont la même clé. GITOPS-2215
  • Avec cette mise à jour, vous pouvez définir des sélecteurs de nœuds personnalisés dans les charges de travail Operator en éditant leur ressource personnalisée GitopsService. GITOPS-2164
  • Avec cette mise à jour, vous pouvez utiliser le mode de correspondance des politiques RBAC pour sélectionner l'une des options suivantes : glob (par défaut) et regex.GITOPS-1975
  • Avec cette mise à jour, vous pouvez personnaliser le comportement des ressources en utilisant les sous-clés supplémentaires suivantes :

    Expand
    Sous-cléForme de la cléChamp mappé en argocd-cm

    contrôles de santé des ressources

    resource.customizations.health.<group_kind>

    ressources.personnalisations.santé

    ressourceIgnoreDifferences

    resource.customizations.ignoreDifferences.<group_kind>

    resource.customizations.ignoreDifferences

    actions sur les ressources

    resource.customizations.actions.<group_kind>

    resource.customizations.actions

    GITOPS-1561

    Note

    Dans les prochaines versions, il est possible de supprimer l'ancienne méthode de personnalisation du comportement des ressources en utilisant uniquement resourceCustomization et non les sous-clés.

  • Avec cette mise à jour, pour utiliser la page Environments dans la perspective Developer, vous devez effectuer une mise à jour si vous utilisez une version de Red Hat OpenShift GitOps antérieure à 1.7 et OpenShift Container Platform 4.15 ou supérieure. GITOPS-2415
  • Avec cette mise à jour, vous pouvez créer des applications, qui sont gérées par la même instance de plan de contrôle Argo CD, dans n'importe quel espace de noms dans le même cluster. En tant qu'administrateur, effectuez les actions suivantes pour activer cette mise à jour :

    • Ajoutez l'espace de noms à l'attribut .spec.sourceNamespaces pour une instance Argo CD en cluster qui gère l'application.
    • Ajoutez l'espace de noms à l'attribut .spec.sourceNamespaces de la ressource personnalisée AppProject associée à l'application.

      GITOPS-2341

Important

Les applications Argo CD dans les espaces de noms du plan de contrôle ne sont qu'une fonctionnalité de l'aperçu technologique. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas de les utiliser en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.

Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.

  • Avec cette mise à jour, Argo CD prend en charge la fonctionnalité Server-Side Apply, qui aide les utilisateurs à effectuer les tâches suivantes :

    • Gérer les ressources volumineuses qui sont trop grandes pour la taille d'annotation autorisée de 262144 octets.
    • Patch d'une ressource existante qui n'est pas gérée ou déployée par Argo CD.

      Vous pouvez configurer cette fonction au niveau de l'application ou de la ressource. GITOPS-2340

4.1.8.2. Problèmes corrigés

Les problèmes suivants ont été résolus dans la version actuelle :

  • Avant cette mise à jour, les versions Red Hat OpenShift GitOps étaient affectées par un problème d'échec des pods Dex avec l'erreur CreateContainerConfigError lorsque le SCC anyuid était assigné au compte de service Dex. Cette mise à jour corrige le problème en assignant un identifiant d'utilisateur par défaut au conteneur Dex. GITOPS-2235
  • Avant cette mise à jour, Red Hat OpenShift GitOps utilisait le RHSSO (Keycloak) via OIDC en plus de Dex. Cependant, avec un correctif de sécurité récent, le certificat de RHSSO ne pouvait pas être validé lorsqu'il était configuré avec un certificat non signé par l'une des autorités de certification bien connues. Cette mise à jour corrige le problème ; vous pouvez maintenant fournir un certificat personnalisé pour vérifier le certificat TLS du KeyCloak lors de la communication avec lui. En outre, vous pouvez ajouter rootCA au champ .spec.keycloak.rootCA de la ressource personnalisée Argo CD. L'opérateur réconcilie ces changements et met à jour la carte de configuration oidc.config in argocd-cm avec le certificat racine encodé PEM. GITOPS-2214

Exemple de CD Argo avec configuration Keycloak :

apiVersion: argoproj.io/v1alpha1
kind: ArgoCD
metadata:
  name: example-argocd
spec:
  sso:
    keycloak:
      rootCA: '<PEM encoded root certificate>'
    provider: keycloak
.......
.......
Copy to Clipboard Toggle word wrap
  • Avant cette mise à jour, les contrôleurs d'application redémarraient plusieurs fois en raison de l'absence de réponse des sondes de réactivité. Cette mise à jour corrige le problème en supprimant la sonde de réactivité dans le contrôleur d'application statefulset. GITOPS-2153
4.1.8.3. Problèmes connus
  • Avant cette mise à jour, l'opérateur ne réconciliait pas les paramètres mountsatoken et ServiceAccount pour le serveur de dépôt. Bien que cela ait été corrigé, la suppression du compte de service ne rétablit pas la valeur par défaut. GITOPS-1873
  • Solution de contournement : Définissez manuellement le compte de service spec.repo.serviceaccountfield to thedefault. GITOPS-2452

4.1.9. Notes de version pour Red Hat OpenShift GitOps 1.6.4

Red Hat OpenShift GitOps 1.6.4 est maintenant disponible sur OpenShift Container Platform 4.8, 4.9, 4.10, et 4.11.

4.1.9.1. Problèmes corrigés
  • Avant cette mise à jour, toutes les versions d'Argo CD v1.8.2 et ultérieures étaient vulnérables à un bogue d'autorisation inapproprié. En conséquence, Argo CD acceptait des jetons pour des utilisateurs qui n'étaient pas censés accéder au cluster. Ce problème est maintenant corrigé. CVE-2023-22482

4.1.10. Notes de version pour Red Hat OpenShift GitOps 1.6.2

Red Hat OpenShift GitOps 1.6.2 est désormais disponible sur OpenShift Container Platform 4.8, 4.9, 4.10 et 4.11.

4.1.10.1. Nouvelles fonctionnalités
  • Cette version supprime la variable d'environnement DISABLE_DEX du fichier CSV openshift-gitops-operator. Par conséquent, cette variable d'environnement n'est plus définie lorsque vous effectuez une nouvelle installation de Red Hat OpenShift GitOps. GITOPS-2360
4.1.10.2. Problèmes corrigés

Les problèmes suivants ont été résolus dans la version actuelle :

  • Avant cette mise à jour, le contrôle de santé de l'abonnement était marqué degraded pour InstallPlan manquant lorsque plus de 5 opérateurs étaient installés dans un projet. Cette mise à jour corrige le problème. GITOPS-2018
  • Avant cette mise à jour, l'opérateur Red Hat OpenShift GitOps spammerait le cluster avec un avertissement d'avis de dépréciation chaque fois qu'il détectait qu'une instance Argo CD utilisait des champs dépréciés. Cette mise à jour corrige ce problème et ne montre qu'un seul événement d'avertissement pour chaque instance qui détecte un champ. GITOPS-2230
  • Depuis OpenShift Container Platform 4.12, l'installation de la console est optionnelle. Ce correctif met à jour le Red Hat OpenShift GitOps Operator afin d'éviter les erreurs avec l'Operator si la console n'est pas installée. GITOPS-2352

4.1.11. Notes de version pour Red Hat OpenShift GitOps 1.6.1

Red Hat OpenShift GitOps 1.6.1 est maintenant disponible sur OpenShift Container Platform 4.8, 4.9, 4.10, et 4.11.

4.1.11.1. Problèmes corrigés

Les problèmes suivants ont été résolus dans la version actuelle :

  • Avant cette mise à jour, dans un grand nombre d'applications, les contrôleurs d'application étaient redémarrés plusieurs fois en raison de l'absence de réponse des sondes de réactivité. Cette mise à jour corrige le problème en supprimant la sonde de réactivité dans l'objet StatefulSet du contrôleur d'application. GITOPS-2153
  • Avant cette mise à jour, le certificat RHSSO ne pouvait pas être validé lorsqu'il était configuré avec un certificat qui n'était pas signé par les autorités de certification. Cette mise à jour corrige le problème et vous pouvez désormais fournir un certificat personnalisé qui sera utilisé pour vérifier le certificat TLS du Keycloak lors de la communication avec celui-ci. Vous pouvez ajouter le site rootCA au champ de la ressource personnalisée Argo CD .spec.keycloak.rootCA. L'opérateur réconcilie ce changement et met à jour le champ oidc.config dans le champ argocd-cm ConfigMap avec le certificat racine codé en PEM. GITOPS-2214

    Note

    Redémarrez le serveur Argo CD après avoir mis à jour le champ .spec.keycloak.rootCA.

    Par exemple :

    apiVersion: argoproj.io/v1alpha1
    kind: ArgoCD
    metadata:
      name: example-argocd
      labels:
        example: basic
    spec:
      sso:
        provider: keycloak
        keycloak:
         rootCA: |
           ---- BEGIN CERTIFICATE ----
           This is a dummy certificate
           Please place this section with appropriate rootCA
           ---- END CERTIFICATE ----
      server:
        route:
          enabled: true
    Copy to Clipboard Toggle word wrap
  • Avant cette mise à jour, un espace de noms de terminaison géré par Argo CD bloquait la création de rôles et d'autres configurations d'autres espaces de noms gérés. Cette mise à jour corrige ce problème. GITOPS-2277
  • Avant cette mise à jour, les pods Dex ne démarraient pas avec CreateContainerConfigError lorsqu'un SCC de anyuid était attribué à la ressource Dex ServiceAccount. Cette mise à jour corrige ce problème en assignant un identifiant utilisateur par défaut au conteneur Dex. GITOPS-2235

4.1.12. Notes de version pour Red Hat OpenShift GitOps 1.6.0

Red Hat OpenShift GitOps 1.6.0 est maintenant disponible sur OpenShift Container Platform 4.8, 4.9, 4.10, et 4.11.

4.1.12.1. Nouvelles fonctionnalités

La version actuelle apporte les améliorations suivantes :

  • Auparavant, le contrôleur Argo CD ApplicationSet était une fonctionnalité de prévisualisation technologique (TP). Avec cette mise à jour, il s'agit d'une fonctionnalité de disponibilité générale (GA). GITOPS-1958
  • Avec cette mise à jour, les dernières versions de Red Hat OpenShift GitOps sont disponibles sur latest et sur les canaux basés sur les versions. Pour obtenir ces mises à jour, mettez à jour le paramètre channel dans le fichier YAML de l'objet Subscription: changez sa valeur de stable à latest ou à un canal basé sur la version tel que gitops-1.6. GITOPS-1791
  • Avec cette mise à jour, les paramètres du champ spec.sso qui contrôlaient les configurations de porte-clés sont déplacés vers .spec.sso.keycloak. Les paramètres du champ .spec.dex ont été ajoutés à .spec.sso.dex. Commencez à utiliser .spec.sso.provider pour activer ou désactiver Dex. Les paramètres de .spec.dex sont obsolètes et devraient être supprimés dans la version 1.9, de même que les champs DISABLE_DEX et .spec.sso pour la configuration du keycloak. GITOPS-1983
  • Avec cette mise à jour, le contrôleur de notifications Argo CD est disponible en tant que charge de travail optionnelle qui peut être activée ou désactivée en utilisant le paramètre .spec.notifications.enabled dans la ressource personnalisée Argo CD. Le contrôleur de notifications Argo CD est disponible en tant que fonctionnalité d'aperçu technique. GITOPS-1917
Important

Le contrôleur Argo CD Notifications est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas leur utilisation en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.

Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.

  • Avec cette mise à jour, les exclusions de ressources pour les exécutions du pipeline Tekton et les exécutions de tâches sont ajoutées par défaut. Argo CD élague ces ressources par défaut. Ces exclusions de ressources sont ajoutées aux nouvelles instances Argo CD qui sont créées à partir de OpenShift Container Platform. Si les instances sont créées à partir de la CLI, les ressources ne sont pas ajoutées. GITOPS-1876
  • Avec cette mise à jour, vous pouvez sélectionner la méthode de suivi utilisée par Argo CD en définissant le paramètre resourceTrackingMethod dans la spécification de l'opérande. GITOPS-1862
  • Avec cette mise à jour, vous pouvez ajouter des entrées au configMap argocd-cm en utilisant le champ extraConfig de la ressource personnalisée Red Hat OpenShift GitOps Argo CD. Les entrées spécifiées sont rapprochées de la carte de configuration config-cm sans validations. GITOPS-1964
  • Avec cette mise à jour, sur OpenShift Container Platform 4.11, la page Red Hat OpenShift GitOps Environments dans la perspective Developer montre l'historique des déploiements réussis des environnements d'application, ainsi que des liens vers la révision pour chaque déploiement. GITOPS-1269
  • Avec cette mise à jour, vous pouvez gérer des ressources avec Argo CD qui sont également utilisées comme ressources modèles ou "source" par un opérateur. GITOPS-982
  • Avec cette mise à jour, l'opérateur configurera désormais les charges de travail Argo CD avec les permissions correctes pour satisfaire l'admission de sécurité des pods qui a été activée pour Kubernetes 1.24. GITOPS-2026
  • Avec cette mise à jour, les plugins de gestion de la configuration 2.0 sont pris en charge. Vous pouvez utiliser la ressource personnalisée Argo CD pour spécifier des conteneurs de barre latérale pour le serveur repo. GITOPS-776
  • Avec cette mise à jour, toutes les communications entre les composants du CD Argo et le cache Redis sont correctement sécurisées en utilisant un cryptage TLS moderne. GITOPS-720
  • Cette version de Red Hat OpenShift GitOps ajoute la prise en charge d'IBM Z et IBM Power sur OpenShift Container Platform 4.10. Actuellement, les installations dans des environnements restreints ne sont pas prises en charge sur IBM Z et IBM Power.
4.1.12.2. Problèmes corrigés

Les problèmes suivants ont été résolus dans la version actuelle :

  • Avant cette mise à jour, le site system:serviceaccount:argocd:gitops-argocd-application-controller ne pouvait pas créer la ressource "prometheusrules" dans le groupe d'API monitoring.coreos.com dans l'espace de noms webapps-dev. Cette mise à jour corrige ce problème et Red Hat OpenShift GitOps est maintenant capable de gérer toutes les ressources du groupe d'API monitoring.coreos.com. GITOPS-1638
  • Avant cette mise à jour, lors de la réconciliation des permissions des clusters, si un secret appartenait à une instance de configuration de cluster, il était supprimé. Cette mise à jour corrige ce problème. Maintenant, le champ namespaces du secret est supprimé au lieu du secret. GITOPS-1777
  • Avant cette mise à jour, si vous installiez la variante HA d'Argo CD par l'intermédiaire de l'opérateur, ce dernier créait l'objet Redis StatefulSet avec les règles podAffinity au lieu des règles podAntiAffinity. Cette mise à jour corrige ce problème et l'Opérateur crée maintenant l'objet Redis StatefulSet avec les règles podAntiAffinity. GITOPS-1645
  • Avant cette mise à jour, Argo CD ApplicationSet avait trop de processus ssh Zombie. Cette mise à jour corrige ce problème : elle ajoute tini, un simple daemon init qui crée des processus et récolte des zombies, au contrôleur ApplicationSet. Cela garantit que le signal SIGTERM est correctement transmis au processus en cours d'exécution, l'empêchant ainsi d'être un processus zombie. GITOPS-2108
4.1.12.3. Problèmes connus
  • Red Hat OpenShift GitOps Operator peut utiliser RHSSO (KeyCloak) via OIDC en plus de Dex. Cependant, avec l'application d'un correctif de sécurité récent, le certificat de RHSSO ne peut pas être validé dans certains scénarios. GITOPS-2214

    En guise de solution de contournement, désactivez la validation TLS pour le point de terminaison OIDC (Keycloak/RHSSO) dans la spécification ArgoCD.

spec:
  extraConfig:
    oidc.tls.insecure.skip.verify: "true"
...
Copy to Clipboard Toggle word wrap

4.1.13. Notes de version pour Red Hat OpenShift GitOps 1.5.9

Red Hat OpenShift GitOps 1.5.9 est maintenant disponible sur OpenShift Container Platform 4.8, 4.9, 4.10, et 4.11.

4.1.13.1. Problèmes corrigés
  • Avant cette mise à jour, toutes les versions d'Argo CD v1.8.2 et ultérieures étaient vulnérables à un bogue d'autorisation inapproprié. En conséquence, Argo CD acceptait des jetons pour des utilisateurs qui n'étaient peut-être pas autorisés à accéder au cluster. Ce problème est maintenant corrigé. CVE-2023-22482

4.1.14. Notes de version pour Red Hat OpenShift GitOps 1.5.7

Red Hat OpenShift GitOps 1.5.7 est maintenant disponible sur OpenShift Container Platform 4.8, 4.9, 4.10, et 4.11.

4.1.14.1. Problèmes corrigés

Les problèmes suivants ont été résolus dans la version actuelle :

  • Depuis OpenShift Container Platform 4.12, l'installation de la console est optionnelle. Ce correctif met à jour le Red Hat OpenShift GitOps Operator pour éviter les erreurs avec l'Operator si la console n'est pas installée. GITOPS-2353

4.1.15. Notes de version pour Red Hat OpenShift GitOps 1.5.6

Red Hat OpenShift GitOps 1.5.6 est maintenant disponible sur OpenShift Container Platform 4.8, 4.9, 4.10, et 4.11.

4.1.15.1. Problèmes corrigés

Les problèmes suivants ont été résolus dans la version actuelle :

  • Avant cette mise à jour, dans un grand nombre d'applications, les contrôleurs d'application étaient redémarrés plusieurs fois en raison de l'absence de réponse des sondes de réactivité. Cette mise à jour corrige le problème en supprimant la sonde de réactivité dans l'objet StatefulSet du contrôleur d'application. GITOPS-2153
  • Avant cette mise à jour, le certificat RHSSO ne pouvait pas être validé lorsqu'il était configuré avec un certificat qui n'était pas signé par les autorités de certification. Cette mise à jour corrige le problème et vous pouvez désormais fournir un certificat personnalisé qui sera utilisé pour vérifier le certificat TLS du Keycloak lors de la communication avec celui-ci. Vous pouvez ajouter le site rootCA au champ de la ressource personnalisée Argo CD .spec.keycloak.rootCA. L'opérateur réconcilie ce changement et met à jour le champ oidc.config dans le champ argocd-cm ConfigMap avec le certificat racine codé en PEM. GITOPS-2214

    Note

    Redémarrez le serveur Argo CD après avoir mis à jour le champ .spec.keycloak.rootCA.

    Par exemple :

    apiVersion: argoproj.io/v1alpha1
    kind: ArgoCD
    metadata:
      name: example-argocd
      labels:
        example: basic
    spec:
      sso:
        provider: keycloak
        keycloak:
         rootCA: |
           ---- BEGIN CERTIFICATE ----
           This is a dummy certificate
           Please place this section with appropriate rootCA
           ---- END CERTIFICATE ----
      server:
        route:
          enabled: true
    Copy to Clipboard Toggle word wrap
  • Avant cette mise à jour, un espace de noms de terminaison géré par Argo CD bloquait la création de rôles et d'autres configurations d'autres espaces de noms gérés. Cette mise à jour corrige ce problème. GITOPS-2278
  • Avant cette mise à jour, les pods Dex ne démarraient pas avec CreateContainerConfigError lorsqu'un SCC de anyuid était attribué à la ressource Dex ServiceAccount. Cette mise à jour corrige ce problème en assignant un identifiant utilisateur par défaut au conteneur Dex. GITOPS-2235

4.1.16. Notes de version pour Red Hat OpenShift GitOps 1.5.5

Red Hat OpenShift GitOps 1.5.5 est maintenant disponible sur OpenShift Container Platform 4.8, 4.9, 4.10, et 4.11.

4.1.16.1. Nouvelles fonctionnalités

La version actuelle apporte les améliorations suivantes :

  • Avec cette mise à jour, le CD Argo fourni a été mis à jour à la version 2.3.7.
4.1.16.2. Problèmes corrigés

Les problèmes suivants ont été résolus dans la version actuelle :

  • Avant cette mise à jour, les pods redis-ha-haproxy d'une instance ArgoCD échouaient lorsque des SCC plus restrictifs étaient présents dans le cluster. Cette mise à jour corrige le problème en mettant à jour le contexte de sécurité dans les charges de travail. GITOPS-2034
4.1.16.3. Problèmes connus
  • Red Hat OpenShift GitOps Operator peut utiliser RHSSO (KeyCloak) avec OIDC et Dex. Cependant, avec l'application d'un correctif de sécurité récent, l'opérateur ne peut pas valider le certificat RHSSO dans certains scénarios. GITOPS-2214

    En guise de solution de contournement, désactivez la validation TLS pour le point de terminaison OIDC (Keycloak/RHSSO) dans la spécification ArgoCD.

    apiVersion: argoproj.io/v1alpha1
    kind: ArgoCD
    metadata:
      name: example-argocd
    spec:
      extraConfig:
        "admin.enabled": "true"
    ...
    Copy to Clipboard Toggle word wrap

4.1.17. Notes de version pour Red Hat OpenShift GitOps 1.5.4

Red Hat OpenShift GitOps 1.5.4 est maintenant disponible sur OpenShift Container Platform 4.8, 4.9, 4.10, et 4.11.

4.1.17.1. Problèmes corrigés

Les problèmes suivants ont été résolus dans la version actuelle :

  • Avant cette mise à jour, Red Hat OpenShift GitOps utilisait une ancienne version de la balise d'image REDIS 5. Cette mise à jour corrige le problème et met à jour la balise d'image rhel8/redis-5. GITOPS-2037

4.1.18. Notes de version pour Red Hat OpenShift GitOps 1.5.3

Red Hat OpenShift GitOps 1.5.3 est maintenant disponible sur OpenShift Container Platform 4.8, 4.9, 4.10, et 4.11.

4.1.18.1. Problèmes corrigés

Les problèmes suivants ont été résolus dans la version actuelle :

  • Avant cette mise à jour, toutes les versions non corrigées d'Argo CD v1.0.0 et ultérieures étaient vulnérables à un bogue de script intersite. En conséquence, un utilisateur non autorisé pouvait injecter un lien javascript dans l'interface utilisateur. Ce problème est maintenant corrigé. CVE-2022-31035
  • Avant cette mise à jour, toutes les versions d'Argo CD v0.11.0 et ultérieures étaient vulnérables à de multiples attaques lorsque la connexion SSO était initiée à partir du CLI d'Argo CD ou de l'interface utilisateur. Ce problème est maintenant corrigé. CVE-2022-31034
  • Avant cette mise à jour, toutes les versions non corrigées d'Argo CD v0.7 et ultérieures étaient vulnérables à un bogue de consommation de mémoire. En conséquence, un utilisateur non autorisé pouvait planter le serveur de dépôt d'Argo CD. Ce problème est maintenant corrigé. CVE-2022-31016
  • Avant cette mise à jour, toutes les versions non corrigées d'Argo CD v1.3.0 et ultérieures étaient vulnérables à un bogue de suivi de lien symbolique. En conséquence, un utilisateur non autorisé ayant un accès en écriture au référentiel pouvait faire fuir des fichiers YAML sensibles du serveur de référentiel d'Argo CD. Ce problème est maintenant corrigé. CVE-2022-31036

4.1.19. Notes de version pour Red Hat OpenShift GitOps 1.5.2

Red Hat OpenShift GitOps 1.5.2 est maintenant disponible sur OpenShift Container Platform 4.8, 4.9, 4.10, et 4.11.

4.1.19.1. Problèmes corrigés

Les problèmes suivants ont été résolus dans la version actuelle :

  • Avant cette mise à jour, les images référencées par le site redhat-operator-index étaient manquantes. Ce problème est maintenant corrigé. GITOPS-2036

4.1.20. Notes de version pour Red Hat OpenShift GitOps 1.5.1

Red Hat OpenShift GitOps 1.5.1 est maintenant disponible sur OpenShift Container Platform 4.8, 4.9, 4.10, et 4.11.

4.1.20.1. Problèmes corrigés

Les problèmes suivants ont été résolus dans la version actuelle :

  • Avant cette mise à jour, si l'accès anonyme à Argo CD était activé, un utilisateur non authentifié pouvait créer un jeton JWT et obtenir un accès complet à l'instance d'Argo CD. Ce problème est maintenant corrigé. CVE-2022-29165
  • Avant cette mise à jour, un utilisateur non authentifié pouvait afficher des messages d'erreur sur l'écran de connexion lorsque le SSO était activé. Ce problème est maintenant corrigé. CVE-2022-24905
  • Avant cette mise à jour, toutes les versions non corrigées d'Argo CD v0.7.0 et ultérieures étaient vulnérables à un bogue de suivi de lien symbolique. En conséquence, un utilisateur non autorisé ayant un accès en écriture au référentiel pouvait faire fuir des fichiers sensibles depuis le serveur de référentiel d'Argo CD. Ce problème est maintenant corrigé. CVE-2022-24904

4.1.21. Notes de version pour Red Hat OpenShift GitOps 1.5.0

Red Hat OpenShift GitOps 1.5.0 est maintenant disponible sur OpenShift Container Platform 4.8, 4.9, 4.10, et 4.11.

4.1.21.1. Nouvelles fonctionnalités

La version actuelle apporte les améliorations suivantes :

  • Cette amélioration met à jour Argo CD vers la version 2.3.3. GITOPS-1708
  • Cette amélioration met à jour Dex vers la version 2.30.3. GITOPS-1850
  • Cette amélioration met à jour Helm vers la version 3.8.0. GITOPS-1709
  • Cette amélioration met à jour Kustomize vers la version 4.4.1. GITOPS-1710
  • Cette amélioration permet de passer à la version 0.4.1 de l'Application Set.
  • Avec cette mise à jour, un nouveau canal du nom de latest a été ajouté qui fournit la dernière version de Red Hat OpenShift GitOps. Pour GitOps v1.5.0, l'Opérateur est poussé vers gitops-1.5, le canal latest et le canal existant stable. A partir de GitOps v1.6, toutes les dernières versions seront poussées uniquement sur le canal latest et non plus sur le canal stable. GITOPS-1791
  • Avec cette mise à jour, le nouveau CSV ajoute l'annotation olm.skipRange: '>=1.0.0 <1.5.0'. Par conséquent, toutes les versions précédentes seront ignorées. L'opérateur passe directement à la version 1.5.0. GITOPS-1787
  • Avec cette mise à jour, l'opérateur met à jour Red Hat Single Sign-On (RH-SSO) vers la version v7.5.1 incluant les améliorations suivantes :

    • Vous pouvez vous connecter à Argo CD en utilisant les identifiants OpenShift, y compris l'identifiant kube:admin.
    • Le RH-SSO prend en charge et configure les instances Argo CD pour le contrôle d'accès basé sur les rôles (RBAC) à l'aide des groupes OpenShift.
    • Le RH-SSO respecte les variables d'environnement HTTP_Proxy. Vous pouvez utiliser RH-SSO comme SSO pour Argo CD fonctionnant derrière un proxy.

      GITOPS-1330

  • Avec cette mise à jour, un nouveau champ URL .host est ajouté au champ .status de l'opérande Argo CD. Lorsqu'une route ou une entrée est activée avec la priorité donnée à la route, le nouveau champ URL affiche la route. Si aucune URL n'est fournie par la route ou l'entrée, le champ .host n'est pas affiché.

    Lorsque la route ou l'entrée est configurée, mais que le contrôleur correspondant n'est pas configuré correctement et n'est pas dans l'état Ready ou ne propage pas son URL, la valeur du champ .status.host dans l'opérande indique Pending au lieu d'afficher l'URL. Cela affecte l'état général de l'opérande en le rendant Pending au lieu de Available. GITOPS-654

4.1.21.2. Problèmes corrigés

Les problèmes suivants ont été résolus dans la version actuelle :

  • Avant cette mise à jour, les règles RBAC spécifiques à AppProjects n'autorisaient pas l'utilisation de virgules dans le champ sujet du rôle, ce qui empêchait les liaisons avec le compte LDAP. Cette mise à jour corrige le problème et vous pouvez maintenant spécifier des liaisons de rôles complexes dans les règles RBAC spécifiques à AppProject. GITOPS-1771
  • Avant cette mise à jour, lorsqu'une ressource DeploymentConfig est mise à l'échelle à 0, Argo CD l'affichait dans un état progressing avec un message d'état de santé à "replication controller is waiting for pods to run". Cette mise à jour corrige le cas particulier et la vérification de l'état de santé indique maintenant l'état de santé correct de la ressource DeploymentConfig. GITOPS-1738
  • Avant cette mise à jour, le certificat TLS dans la carte de configuration argocd-tls-certs-cm était supprimé par Red Hat OpenShift GitOps à moins que le certificat n'ait été configuré dans le champ ArgoCD CR specification tls.initialCerts. Ce problème est maintenant corrigé. GITOPS-1725
  • Avant cette mise à jour, lors de la création d'un espace de noms avec le label managed-by, de nombreuses ressources RoleBinding étaient créées sur le nouvel espace de noms. Cette mise à jour corrige le problème et maintenant Red Hat OpenShift GitOps supprime les ressources Role et RoleBinding non pertinentes créées par les versions précédentes. GITOPS-1550
  • Avant cette mise à jour, le certificat TLS de la route en mode pass-through n'avait pas de nom d'autorité de certification. Par conséquent, Firefox 94 et les versions ultérieures ne parvenaient pas à se connecter à l'interface utilisateur d'Argo CD avec le code d'erreur SEC_ERROR_BAD_DER. Cette mise à jour corrige le problème. Vous devez supprimer les secrets <openshift-gitops-ca> et les laisser se recréer. Ensuite, vous devez supprimer les secrets <openshift-gitops-tls>. Après que Red Hat OpenShift GitOps l'ait recréé, l'interface utilisateur Argo CD est à nouveau accessible par Firefox. GITOPS-1548
4.1.21.3. Problèmes connus
  • Le champ Argo CD .status.host n'est pas mis à jour lorsqu'une ressource Ingress est utilisée à la place d'une ressource Route sur les clusters OpenShift. GITOPS-1920

4.1.22. Notes de version pour Red Hat OpenShift GitOps 1.4.13

Red Hat OpenShift GitOps 1.4.13 est maintenant disponible sur OpenShift Container Platform 4.7, 4.8, 4.9, et 4.10.

4.1.22.1. Problèmes corrigés

Les problèmes suivants ont été résolus dans la version actuelle :

  • Depuis OpenShift Container Platform 4.12, l'installation de la console est optionnelle. Ce correctif met à jour le Red Hat OpenShift GitOps Operator afin d'éviter les erreurs avec l'Operator si la console n'est pas installée. GITOPS-2354

4.1.23. Notes de version pour Red Hat OpenShift GitOps 1.4.12

Red Hat OpenShift GitOps 1.4.12 est maintenant disponible sur OpenShift Container Platform 4.7, 4.8, 4.9, et 4.10.

4.1.23.1. Problèmes corrigés

Les problèmes suivants ont été résolus dans la version actuelle :

  • Avant cette mise à jour, dans un grand nombre d'applications, les contrôleurs d'application étaient redémarrés plusieurs fois en raison de l'absence de réponse des sondes de réactivité. Cette mise à jour corrige le problème en supprimant la sonde de réactivité dans l'objet StatefulSet du contrôleur d'application. GITOPS-2153
  • Avant cette mise à jour, le certificat RHSSO ne pouvait pas être validé lorsqu'il était configuré avec un certificat qui n'était pas signé par les autorités de certification. Cette mise à jour corrige le problème et vous pouvez désormais fournir un certificat personnalisé qui sera utilisé pour vérifier le certificat TLS du Keycloak lors de la communication avec celui-ci. Vous pouvez ajouter le site rootCA au champ de la ressource personnalisée Argo CD .spec.keycloak.rootCA. L'opérateur réconcilie ce changement et met à jour le champ oidc.config dans le champ argocd-cm ConfigMap avec le certificat racine codé en PEM. GITOPS-2214

    Note

    Redémarrez le serveur Argo CD après avoir mis à jour le champ .spec.keycloak.rootCA.

    Par exemple :

    apiVersion: argoproj.io/v1alpha1
    kind: ArgoCD
    metadata:
      name: example-argocd
      labels:
        example: basic
    spec:
      sso:
        provider: keycloak
        keycloak:
         rootCA: |
           ---- BEGIN CERTIFICATE ----
           This is a dummy certificate
           Please place this section with appropriate rootCA
           ---- END CERTIFICATE ----
      server:
        route:
          enabled: true
    Copy to Clipboard Toggle word wrap
  • Avant cette mise à jour, un espace de noms de terminaison géré par Argo CD bloquait la création de rôles et d'autres configurations d'autres espaces de noms gérés. Cette mise à jour corrige ce problème. GITOPS-2276
  • Avant cette mise à jour, les pods Dex ne démarraient pas avec CreateContainerConfigError lorsqu'un SCC de anyuid était attribué à la ressource Dex ServiceAccount. Cette mise à jour corrige ce problème en assignant un identifiant utilisateur par défaut au conteneur Dex. GITOPS-2235

4.1.24. Notes de version pour Red Hat OpenShift GitOps 1.4.11

Red Hat OpenShift GitOps 1.4.11 est maintenant disponible sur OpenShift Container Platform 4.7, 4.8, 4.9, et 4.10.

4.1.24.1. Nouvelles fonctionnalités

La version actuelle apporte les améliorations suivantes :

  • Avec cette mise à jour, le CD Argo fourni a été mis à jour à la version 2.2.12.
4.1.24.2. Problèmes corrigés

Les problèmes suivants ont été résolus dans la version actuelle :

  • Avant cette mise à jour, les pods redis-ha-haproxy d'une instance ArgoCD échouaient lorsque des SCC plus restrictifs étaient présents dans le cluster. Cette mise à jour corrige le problème en mettant à jour le contexte de sécurité dans les charges de travail. GITOPS-2034
4.1.24.3. Problèmes connus
  • Red Hat OpenShift GitOps Operator peut utiliser RHSSO (KeyCloak) avec OIDC et Dex. Cependant, avec l'application d'un correctif de sécurité récent, l'opérateur ne peut pas valider le certificat RHSSO dans certains scénarios. GITOPS-2214

    En guise de solution de contournement, désactivez la validation TLS pour le point de terminaison OIDC (Keycloak/RHSSO) dans la spécification ArgoCD.

    apiVersion: argoproj.io/v1alpha1
    kind: ArgoCD
    metadata:
      name: example-argocd
    spec:
      extraConfig:
        "admin.enabled": "true"
    ...
    Copy to Clipboard Toggle word wrap

4.1.25. Notes de version pour Red Hat OpenShift GitOps 1.4.6

Red Hat OpenShift GitOps 1.4.6 est maintenant disponible sur OpenShift Container Platform 4.7, 4.8, 4.9, et 4.10.

4.1.25.1. Problèmes corrigés

Le problème suivant a été résolu dans la version actuelle :

  • Les images de base sont mises à jour vers la dernière version afin d'éviter le lien avec la faille OpenSSL : (CVE-2022-0778).
Note

Pour installer la version actuelle de Red Hat OpenShift GitOps 1.4 et recevoir d'autres mises à jour tout au long du cycle de vie du produit, rendez-vous sur le canal GitOps-1.4.

4.1.26. Notes de version pour Red Hat OpenShift GitOps 1.4.5

Red Hat OpenShift GitOps 1.4.5 est maintenant disponible sur OpenShift Container Platform 4.7, 4.8, 4.9, et 4.10.

4.1.26.1. Problèmes corrigés
Avertissement

Vous devriez mettre à niveau directement vers Red Hat OpenShift GitOps v1.4.5 à partir de Red Hat OpenShift GitOps v1.4.3. N'utilisez pas Red Hat OpenShift GitOps v1.4.4 dans un environnement de production. Les problèmes majeurs qui affectaient Red Hat OpenShift GitOps v1.4.4 sont corrigés dans Red Hat OpenShift GitOps 1.4.5.

Le problème suivant a été résolu dans la version actuelle :

  • Avant cette mise à jour, les pods Argo CD étaient bloqués à l'état ErrImagePullBackOff. Le message d'erreur suivant s'affichait :
reason: ErrImagePull
          message: >-
            rpc error: code = Unknown desc = reading manifest
            sha256:ff4ad30752cf0d321cd6c2c6fd4490b716607ea2960558347440f2f370a586a8
            in registry.redhat.io/openshift-gitops-1/argocd-rhel8: StatusCode:
            404, <HTML><HEAD><TITLE>Error</TITLE></HEAD><BODY>
Copy to Clipboard Toggle word wrap

Ce problème est maintenant corrigé. GITOPS-1848

4.1.27. Notes de version pour Red Hat OpenShift GitOps 1.4.3

Red Hat OpenShift GitOps 1.4.3 est maintenant disponible sur OpenShift Container Platform 4.7, 4.8, 4.9, et 4.10.

4.1.27.1. Problèmes corrigés

Le problème suivant a été résolu dans la version actuelle :

  • Avant cette mise à jour, le certificat TLS dans la carte de configuration argocd-tls-certs-cm était supprimé par Red Hat OpenShift GitOps à moins que le certificat n'ait été configuré dans le champ tls.initialCerts de la spécification ArgoCD CR. Cette mise à jour corrige ce problème. GITOPS-1725

4.1.28. Notes de version pour Red Hat OpenShift GitOps 1.4.2

Red Hat OpenShift GitOps 1.4.2 est maintenant disponible sur OpenShift Container Platform 4.7, 4.8, 4.9, et 4.10.

4.1.28.1. Problèmes corrigés

Le problème suivant a été résolu dans la version actuelle :

  • Avant cette mise à jour, les ressources Route restaient bloquées dans l'état de santé Progressing si plusieurs Ingress étaient attachés à la route. Cette mise à jour corrige la vérification de l'état de santé et signale l'état de santé correct des ressources Route. GITOPS-1751

4.1.29. Notes de version pour Red Hat OpenShift GitOps 1.4.1

Red Hat OpenShift GitOps 1.4.1 est maintenant disponible sur OpenShift Container Platform 4.7, 4.8, 4.9, et 4.10.

4.1.29.1. Problèmes corrigés

Le problème suivant a été résolu dans la version actuelle :

  • Red Hat OpenShift GitOps Operator v1.4.0 a introduit une régression qui supprime les champs de description de spec pour les CRD suivants :

    • argoproj.io_applications.yaml
    • argoproj.io_appprojects.yaml
    • argoproj.io_argocds.yaml

      Avant cette mise à jour, lorsque vous créiez une ressource AppProject à l'aide de la commande oc create, la synchronisation de la ressource échouait en raison de l'absence de champs de description. Cette mise à jour rétablit les champs de description manquants dans les CRDs précédents. GITOPS-1721

4.1.30. Notes de version pour Red Hat OpenShift GitOps 1.4.0

Red Hat OpenShift GitOps 1.4.0 est maintenant disponible sur OpenShift Container Platform 4.7, 4.8, 4.9, et 4.10.

4.1.30.1. Nouvelles fonctionnalités

La version actuelle apporte les améliorations suivantes.

  • Cette amélioration met à jour le Red Hat OpenShift GitOps Application Manager CLI (kam) vers la version 0.0.41. GITOPS-1669
  • Cette amélioration permet de mettre à niveau Argo CD vers la version 2.2.2. GITOPS-1532
  • Cette amélioration met à jour Helm vers la version 3.7.1. GITOPS-1530
  • Cette amélioration ajoute l'état de santé des éléments DeploymentConfig, Route, et OLM Operator au tableau de bord Argo CD et à la console web OpenShift Container Platform. Ces informations vous aident à surveiller l'état de santé général de votre application. GITOPS-655, GITOPS-915, GITOPS-916, GITOPS-1110
  • Avec cette mise à jour, vous pouvez spécifier le nombre de répliques souhaitées pour les composants argocd-server et argocd-repo-server en définissant les attributs .spec.server.replicas et .spec.repo.replicas dans la ressource personnalisée Argo CD, respectivement. Si vous configurez le pod autoscaler horizontal (HPA) pour les composants argocd-server, il est prioritaire sur les attributs de la ressource personnalisée Argo CD. GITOPS-1245
  • En tant qu'utilisateur administratif, lorsque vous donnez à Argo CD l'accès à un espace de noms en utilisant l'étiquette argocd.argoproj.io/managed-by, il assume les privilèges d'administrateur d'espace de noms. Ces privilèges posent un problème aux administrateurs qui fournissent des espaces de noms à des non-administrateurs, tels que des équipes de développement, car ils permettent à ces derniers de modifier des objets tels que les stratégies de réseau.

    Avec cette mise à jour, les administrateurs peuvent configurer un rôle de cluster commun pour tous les espaces de noms gérés. Dans les liaisons de rôles pour le contrôleur d'application Argo CD, l'opérateur fait référence à la variable d'environnement CONTROLLER_CLUSTER_ROLE. Dans les liaisons de rôles pour le serveur Argo CD, l'opérateur se réfère à la variable d'environnement SERVER_CLUSTER_ROLE. Si ces variables d'environnement contiennent des rôles personnalisés, l'opérateur ne crée pas le rôle d'administrateur par défaut. Au lieu de cela, il utilise le rôle personnalisé existant pour tous les espaces de noms gérés. GITOPS-1290

  • Avec cette mise à jour, la page Environments dans la perspective OpenShift Container Platform Developer affiche une icône de cœur brisé pour indiquer les ressources dégradées, à l'exception de celles dont le statut est Progressing, Missing, et Unknown. La console affiche une icône jaune pour indiquer les ressources désynchronisées. GITOPS-1307
4.1.30.2. Problèmes corrigés

Les problèmes suivants ont été résolus dans la version actuelle :

  • Avant cette mise à jour, lorsque la route vers le CLI de Red Hat OpenShift GitOps Application Manager (kam) était accessible sans spécifier de chemin d'accès dans l'URL, une page par défaut sans aucune information utile était affichée à l'utilisateur. Cette mise à jour corrige le problème afin que la page par défaut affiche des liens de téléchargement pour le CLI kam. GITOPS-923
  • Avant cette mise à jour, la définition d'un quota de ressources dans l'espace de noms de la ressource personnalisée Argo CD pouvait entraîner l'échec de la configuration de l'instance Red Hat SSO (RH SSO). Cette mise à jour corrige ce problème en définissant une demande minimale de ressources pour les pods de déploiement RH SSO. GITOPS-1297
  • Avant cette mise à jour, si vous changiez le niveau de journal pour la charge de travail argocd-repo-server, l'opérateur ne rapprochait pas ce paramètre. La solution consistait à supprimer la ressource de déploiement afin que l'opérateur la recrée avec le nouveau niveau de journalisation. Avec cette mise à jour, le niveau de journal est correctement réconcilié pour les charges de travail argocd-repo-server existantes. GITOPS-1387
  • Avant cette mise à jour, si l'opérateur gérait une instance Argo CD dans laquelle il manquait le champ .data dans le secret argocd-secret, l'opérateur de cette instance se plantait. Cette mise à jour corrige le problème de sorte que l'opérateur ne se bloque pas lorsque le champ .data est manquant. Au lieu de cela, le secret se régénère et la ressource gitops-operator-controller-manager est redéployée. GITOPS-1402
  • Avant cette mise à jour, le service gitopsservice était annoté comme un objet interne. Cette mise à jour supprime l'annotation afin que vous puissiez mettre à jour ou supprimer l'instance Argo CD par défaut et exécuter les charges de travail GitOps sur les nœuds d'infrastructure en utilisant l'interface utilisateur. GITOPS-1429
4.1.30.3. Problèmes connus

Voici les problèmes connus dans la version actuelle :

  • Si vous migrez du fournisseur d'authentification Dex vers le fournisseur Keycloak, il se peut que vous rencontriez des problèmes de connexion avec Keycloak.

    Pour éviter ce problème, lors de la migration, désinstallez Dex en supprimant la section .spec.dex de la ressource personnalisée du CD Argo. Laissez quelques minutes à Dex pour se désinstaller complètement. Ensuite, installez Keycloak en ajoutant .spec.sso.provider: keycloak à la ressource personnalisée du CD Argo.

    En guise de solution, désinstallez Keycloak en supprimant .spec.sso.provider: keycloak. Réinstallez-le ensuite. GITOPS-1450, GITOPS-1331

4.1.31. Notes de version pour Red Hat OpenShift GitOps 1.3.7

Red Hat OpenShift GitOps 1.3.7 est maintenant disponible sur OpenShift Container Platform 4.7, 4.8, 4.9, et 4.6 avec un support GA limité.

4.1.31.1. Problèmes corrigés

Le problème suivant a été résolu dans la version actuelle :

  • Avant cette mise à jour, une faille a été découverte dans OpenSSL. Cette mise à jour corrige le problème en mettant à jour les images de base vers la dernière version afin d'éviter la faille OpenSSL. (CVE-2022-0778).
Note

Pour installer la version actuelle de Red Hat OpenShift GitOps 1.3 et recevoir d'autres mises à jour tout au long du cycle de vie du produit, rendez-vous sur le canal GitOps-1.3.

4.1.32. Notes de version pour Red Hat OpenShift GitOps 1.3.6

Red Hat OpenShift GitOps 1.3.6 est maintenant disponible sur OpenShift Container Platform 4.7, 4.8, 4.9, et 4.6 avec un support GA limité.

4.1.32.1. Problèmes corrigés

Les problèmes suivants ont été résolus dans la version actuelle :

  • Dans Red Hat OpenShift GitOps, un contrôle d'accès incorrect permet une élévation des privilèges de l'administrateur (CVE-2022-1025). Cette mise à jour corrige le problème.
  • Une faille de traversée de chemin permet la fuite de fichiers hors limites (CVE-2022-24731). Cette mise à jour corrige le problème.
  • Une faille de traversée de chemin et un contrôle d'accès incorrect permettent la fuite de fichiers hors limites (CVE-2022-24730). Cette mise à jour corrige le problème.

4.1.33. Notes de version pour Red Hat OpenShift GitOps 1.3.2

Red Hat OpenShift GitOps 1.3.2 est maintenant disponible sur OpenShift Container Platform 4.7, 4.8, 4.9, et 4.6 avec un support GA limité.

4.1.33.1. Nouvelles fonctionnalités

En plus des corrections et des améliorations de stabilité, les sections suivantes soulignent les nouveautés de Red Hat OpenShift GitOps 1.3.2 :

  • Mise à jour du CD Argo vers la version 2.1.8
  • Mise à jour de Dex vers la version 2.30.0
4.1.33.2. Problèmes corrigés

Les problèmes suivants ont été résolus dans la version actuelle :

  • Auparavant, dans l'interface OperatorHub sous la section Infrastructure Features, lorsque vous filtrez par Disconnected, l'Opérateur Red Hat OpenShift GitOps n'apparaissait pas dans les résultats de la recherche, car l'Opérateur n'avait pas l'annotation associée dans son fichier CSV. Avec cette mise à jour, l'annotation Disconnected Cluster a été ajoutée à l'Opérateur Red Hat OpenShift GitOps en tant que fonctionnalité d'infrastructure. GITOPS-1539
  • Lors de l'utilisation d'une instance Argo CD Namespace-scoped, par exemple, une instance Argo CD qui n'est pas cadrée sur All Namepsaces dans un cluster, Red Hat OpenShift GitOps maintient dynamiquement une liste d'espaces de noms gérés. Ces espaces de noms incluent l'étiquette argocd.argoproj.io/managed-by. Cette liste d'espaces de noms est stockée dans un cache à Argo CD → Settings → Clusters → "in-cluster" → NAMESPACES. Avant cette mise à jour, si vous supprimiez l'un de ces espaces de noms, l'opérateur l'ignorait et l'espace de noms restait dans la liste. Ce comportement brisait CONNECTION STATE dans cette configuration de cluster, et toutes les tentatives de synchronisation aboutissaient à des erreurs. Par exemple :

    Le compte de service Argo n'a pas <random_verb> sur <random_resource_type> dans l'espace de noms <the_namespace_you_deleted>.
    Copy to Clipboard Toggle word wrap

    Ce bogue est corrigé. GITOPS-1521

  • Avec cette mise à jour, l'opérateur GitOps de Red Hat OpenShift a été annoté avec le niveau de capacité Deep Insights. GITOPS-1519
  • Auparavant, l'opérateur CD Argo gérait lui-même le champ resource.exclusion mais ignorait le champ resource.inclusion. Cela empêchait le champ resource.inclusion configuré dans le CR Argo CD de se générer dans la carte de configuration argocd-cm. Ce bogue est corrigé. GITOPS-1518

4.1.34. Notes de version pour Red Hat OpenShift GitOps 1.3.1

Red Hat OpenShift GitOps 1.3.1 est maintenant disponible sur OpenShift Container Platform 4.7, 4.8, 4.9, et 4.6 avec un support GA limité.

4.1.34.1. Problèmes corrigés
  • Si vous passez à la version 1.3.0, l'opérateur ne renvoie pas une tranche ordonnée de variables d'environnement. En conséquence, le réconciliateur échoue, ce qui entraîne la recréation fréquente de pods Argo CD dans les clusters OpenShift Container Platform fonctionnant derrière un proxy. Cette mise à jour corrige le problème afin que les pods Argo CD ne soient pas recréés. GITOPS-1489

4.1.35. Notes de version pour Red Hat OpenShift GitOps 1.3

Red Hat OpenShift GitOps 1.3 est maintenant disponible sur OpenShift Container Platform 4.7, 4.8, 4.9, et 4.6 avec un support GA limité.

4.1.35.1. Nouvelles fonctionnalités

En plus des corrections et des améliorations de stabilité, les sections suivantes soulignent les nouveautés de Red Hat OpenShift GitOps 1.3.0 :

  • Pour une nouvelle installation de la version 1.3.0, Dex est automatiquement configuré. Vous pouvez vous connecter à l'instance Argo CD par défaut dans l'espace de noms openshift-gitops en utilisant les informations d'identification OpenShift ou kubeadmin. En tant qu'administrateur, vous pouvez désactiver l'installation de Dex après l'installation de l'opérateur, ce qui supprimera le déploiement de Dex de l'espace de noms openshift-gitops.
  • L'instance Argo CD par défaut installée par l'opérateur ainsi que les contrôleurs qui l'accompagnent peuvent désormais s'exécuter sur les nœuds d'infrastructure du cluster grâce à un simple basculement de configuration.
  • Les communications internes dans Argo CD peuvent maintenant être sécurisées en utilisant TLS et les certificats du cluster OpenShift. Les routes d'Argo CD peuvent désormais exploiter les certificats du cluster OpenShift en plus d'utiliser des gestionnaires de certificats externes tels que le cert-manager.
  • Utilisez la page Environments améliorée dans la perspective Developer de la console 4.9 pour obtenir des informations sur les environnements GitOps.
  • Vous pouvez désormais accéder aux contrôles de santé personnalisés dans Argo CD pour les ressources DeploymentConfig, les ressources Route et les opérateurs installés à l'aide d'OLM.
  • L'Opérateur GitOps est maintenant conforme aux conventions de nommage recommandées par la dernière version de l'Operator-SDK :

    • Le préfixe gitops-operator- est ajouté à toutes les ressources
    • Le compte de service est renommé en gitops-operator-controller-manager
4.1.35.2. Problèmes corrigés

Les problèmes suivants ont été résolus dans la version actuelle :

  • Auparavant, si vous configuriez un nouvel espace de noms à gérer par une nouvelle instance d'Argo CD, il était immédiatement Out Of Sync en raison des nouveaux rôles et liens créés par l'opérateur pour gérer ce nouvel espace de noms. Ce comportement est corrigé. GITOPS-1384
4.1.35.3. Problèmes connus
  • Lors de la migration du fournisseur d'authentification Dex vers le fournisseur Keycloak, il se peut que vous rencontriez des problèmes de connexion avec Keycloak. GITOPS-1450

    Pour éviter ce problème, lors de la migration, désinstallez Dex en supprimant la section .spec.dex qui se trouve dans la ressource personnalisée du CD Argo. Laissez quelques minutes à Dex pour se désinstaller complètement, puis procédez à l'installation de Keycloak en ajoutant .spec.sso.provider: keycloak à la ressource personnalisée du CD Argo.

    En guise de solution, désinstallez Keycloak en supprimant .spec.sso.provider: keycloak, puis réinstallez-le.

4.1.36. Notes de version pour Red Hat OpenShift GitOps 1.2.2

Red Hat OpenShift GitOps 1.2.2 est maintenant disponible sur OpenShift Container Platform 4.8.

4.1.36.1. Problèmes corrigés

Le problème suivant a été résolu dans la version actuelle :

  • Toutes les versions d'Argo CD sont vulnérables à un bogue de traversée de chemin qui permet de passer des valeurs arbitraires à consommer par les graphiques Helm. Cette mise à jour corrige l'erreur CVE-2022-24348 gitops, la traversée de chemin et le déréférencement des liens symboliques lors du passage des fichiers de valeurs Helm. GITOPS-1756

4.1.37. Notes de version pour Red Hat OpenShift GitOps 1.2.1

Red Hat OpenShift GitOps 1.2.1 est maintenant disponible sur OpenShift Container Platform 4.8.

4.1.37.1. Matrice de soutien

Certaines fonctionnalités de cette version sont actuellement en avant-première technologique. Ces fonctionnalités expérimentales ne sont pas destinées à être utilisées en production.

Aperçu de la technologie Fonctionnalités Support Champ d'application

Dans le tableau ci-dessous, les caractéristiques sont marquées par les statuts suivants :

  • TP: Technology Preview
  • GA: General Availability

Notez l'étendue de l'assistance suivante sur le portail client de Red Hat pour ces fonctionnalités :

Expand
Tableau 4.2. Matrice de soutien
FonctionnalitéRed Hat OpenShift GitOps 1.2.1

CD Argo

GA

Argo CD ApplicationSet

TP

Red Hat OpenShift GitOps Application Manager CLI (kam)

TP

4.1.37.2. Problèmes corrigés

Les problèmes suivants ont été résolus dans la version actuelle :

  • Auparavant, d'énormes pics de mémoire étaient observés sur le contrôleur d'application au démarrage. L'indicateur --kubectl-parallelism-limit pour le contrôleur d'application est maintenant fixé à 10 par défaut, mais cette valeur peut être remplacée en spécifiant un nombre pour .spec.controller.kubeParallelismLimit dans la spécification Argo CD CR. GITOPS-1255
  • Les dernières API de déclenchement ont provoqué des échecs de construction de Kubernetes en raison d'entrées dupliquées dans le kustomization.yaml lors de l'utilisation de la commande kam bootstrap. Les composants Pipelines et Tekton triggers ont été mis à jour respectivement en v0.24.2 et v0.14.2 pour résoudre ce problème. GITOPS-1273
  • Les rôles et les liens RBAC persistants sont désormais automatiquement supprimés de l'espace de noms cible lorsque l'instance Argo CD de l'espace de noms source est supprimée. GITOPS-1228
  • Auparavant, lors du déploiement d'une instance d'Argo CD dans un espace de noms, l'instance d'Argo CD modifiait l'étiquette "managed-by" pour en faire son propre espace de noms. Cette correction rend les espaces de noms non étiquetés tout en s'assurant que les rôles RBAC et les liaisons nécessaires sont créés et supprimés pour l'espace de noms. GITOPS-1247
  • Auparavant, les limites par défaut des demandes de ressources sur les charges de travail d'Argo CD, en particulier pour le serveur repo et le contrôleur d'application, s'avéraient très restrictives. Le quota de ressources existant a été supprimé et la limite de mémoire par défaut a été augmentée à 1024M dans le serveur repo. Veuillez noter que ce changement n'affectera que les nouvelles installations ; les charges de travail des instances Argo CD existantes ne seront pas affectées. GITOPS-1274

4.1.38. Notes de version pour Red Hat OpenShift GitOps 1.2

Red Hat OpenShift GitOps 1.2 est maintenant disponible sur OpenShift Container Platform 4.8.

4.1.38.1. Matrice de soutien

Certaines fonctionnalités de cette version sont actuellement en avant-première technologique. Ces fonctionnalités expérimentales ne sont pas destinées à être utilisées en production.

Aperçu de la technologie Fonctionnalités Support Champ d'application

Dans le tableau ci-dessous, les caractéristiques sont marquées par les statuts suivants :

  • TP: Technology Preview
  • GA: General Availability

Notez l'étendue de l'assistance suivante sur le portail client de Red Hat pour ces fonctionnalités :

Expand
Tableau 4.3. Matrice de soutien
FonctionnalitéRed Hat OpenShift GitOps 1.2

CD Argo

GA

Argo CD ApplicationSet

TP

Red Hat OpenShift GitOps Application Manager CLI (kam)

TP

4.1.38.2. Nouvelles fonctionnalités

En plus des corrections et des améliorations de stabilité, les sections suivantes soulignent les nouveautés de Red Hat OpenShift GitOps 1.2 :

  • Si vous n'avez pas d'accès en lecture ou en écriture à l'espace de noms openshift-gitops, vous pouvez maintenant utiliser la variable d'environnement DISABLE_DEFAULT_ARGOCD_INSTANCE dans l'opérateur GitOps et définir la valeur TRUE pour empêcher l'instance Argo CD par défaut de démarrer dans l'espace de noms openshift-gitops.
  • Les demandes et les limites de ressources sont maintenant configurées dans les charges de travail Argo CD. Le quota de ressources est activé dans l'espace de noms openshift-gitops. Par conséquent, les charges de travail hors bande déployées manuellement dans l'espace de noms openshift-gitops doivent être configurées avec des demandes et des limites de ressources et le quota de ressources peut devoir être augmenté.
  • L'authentification Argo CD est maintenant intégrée avec Red Hat SSO et elle est automatiquement configurée avec OpenShift 4 Identity Provider sur le cluster. Cette fonctionnalité est désactivée par défaut. Pour activer Red Hat SSO, ajoutez la configuration SSO dans ArgoCD CR comme indiqué ci-dessous. Actuellement,keycloak est le seul fournisseur pris en charge.

    apiVersion: argoproj.io/v1alpha1
    kind: ArgoCD
    metadata:
      name: example-argocd
      labels:
        example: basic
    spec:
      sso:
        provider: keycloak
      server:
        route:
         enabled: true
    Copy to Clipboard Toggle word wrap
  • Vous pouvez désormais définir des noms d'hôtes à l'aide d'étiquettes d'itinéraires afin de prendre en charge la répartition des routeurs. La prise en charge de la définition d'étiquettes sur les routes server (serveur argocd), grafana et prometheus est désormais disponible. Pour définir des étiquettes sur une route, ajoutez labels sous la configuration de la route pour un serveur dans le CR ArgoCD.

    Exemple ArgoCD CR YAML pour définir les étiquettes sur le serveur argocd

    apiVersion: argoproj.io/v1alpha1
    kind: ArgoCD
    metadata:
      name: example-argocd
      labels:
        example: basic
    spec:
      server:
        route:
         enabled: true
         labels:
           key1: value1
           key2: value2
    Copy to Clipboard Toggle word wrap

  • L'opérateur GitOps accorde désormais automatiquement des permissions aux instances Argo CD pour gérer les ressources dans les espaces de noms cibles en appliquant des étiquettes. Les utilisateurs peuvent étiqueter l'espace de noms cible avec l'étiquette argocd.argoproj.io/managed-by: <source-namespace>, où source-namespace est l'espace de noms où l'instance argocd est déployée.
4.1.38.3. Problèmes corrigés

Les problèmes suivants ont été résolus dans la version actuelle :

  • Auparavant, si un utilisateur créait des instances supplémentaires d'Argo CD gérées par l'instance de cluster par défaut dans l'espace de noms openshift-gitops, l'application responsable de la nouvelle instance d'Argo CD restait bloquée dans un état OutOfSync. Ce problème a été résolu en ajoutant une référence au propriétaire dans le secret du cluster. GITOPS-1025
4.1.38.4. Problèmes connus

Voici les problèmes connus dans Red Hat OpenShift GitOps 1.2 :

  • Lorsqu'une instance de CD Argo est supprimée de l'espace de noms source, les étiquettes argocd.argoproj.io/managed-by dans les espaces de noms cibles ne sont pas supprimées. GITOPS-1228
  • Le quota de ressources a été activé dans l'espace de noms openshift-gitops dans Red Hat OpenShift GitOps 1.2. Cela peut affecter les charges de travail hors bande déployées manuellement et les charges de travail déployées par l'instance Argo CD par défaut dans l'espace de noms openshift-gitops. Lorsque vous mettez à niveau Red Hat OpenShift GitOps v1.1.2 vers v1.2, ces charges de travail doivent être configurées avec des demandes et des limites de ressources. S'il y a des charges de travail supplémentaires, le quota de ressources dans l'espace de noms openshift-gitops doit être augmenté.

    Quota de ressources actuel pour l'espace de noms openshift-gitops.

    Expand
    ResourceRequestsLimits

    UNITÉ CENTRALE

    6688m

    13750m

    Mémoire

    4544Mi

    9070Mi

    Vous pouvez utiliser la commande suivante pour mettre à jour les limites du processeur.

    $ oc patch resourcequota openshift-gitops-compute-resources -n openshift-gitops --type='json' -p='[{"op": "replace", "path": "/spec/hard/limits.cpu", "value":"9000m"}]'
    Copy to Clipboard Toggle word wrap

    Vous pouvez utiliser la commande suivante pour mettre à jour les demandes de CPU.

    $ oc patch resourcequota openshift-gitops-compute-resources -n openshift-gitops --type='json' -p='[{"op": "replace", "path": "/spec/hard/cpu", "value":"7000m"}]
    Copy to Clipboard Toggle word wrap

    Vous pouvez remplacer le chemin dans les commandes ci-dessus de cpu à memory pour mettre à jour la mémoire.

4.1.39. Notes de version pour Red Hat OpenShift GitOps 1.1

Red Hat OpenShift GitOps 1.1 est maintenant disponible sur OpenShift Container Platform 4.7.

4.1.39.1. Matrice de soutien

Certaines fonctionnalités de cette version sont actuellement en avant-première technologique. Ces fonctionnalités expérimentales ne sont pas destinées à être utilisées en production.

Aperçu de la technologie Fonctionnalités Support Champ d'application

Dans le tableau ci-dessous, les caractéristiques sont marquées par les statuts suivants :

  • TP: Technology Preview
  • GA: General Availability

Notez l'étendue de l'assistance suivante sur le portail client de Red Hat pour ces fonctionnalités :

Expand
Tableau 4.4. Matrice de soutien
FonctionnalitéRed Hat OpenShift GitOps 1.1

CD Argo

GA

Argo CD ApplicationSet

TP

Red Hat OpenShift GitOps Application Manager CLI (kam)

TP

4.1.39.2. Nouvelles fonctionnalités

En plus des corrections et des améliorations de stabilité, les sections suivantes soulignent les nouveautés de Red Hat OpenShift GitOps 1.1 :

  • La fonctionnalité ApplicationSet est maintenant ajoutée (Technology Preview). La fonctionnalité ApplicationSet permet à la fois l'automatisation et une plus grande flexibilité lors de la gestion des applications Argo CD sur un grand nombre de clusters et au sein de monorepos. Elle rend également possible l'utilisation en libre-service sur les clusters Kubernetes multitenant.
  • Argo CD est désormais intégré à la pile de journalisation des clusters et aux fonctions de surveillance et d'alerte d'OpenShift Container Platform.
  • Argo CD auth est désormais intégré à OpenShift Container Platform.
  • Le contrôleur d'applications Argo CD prend désormais en charge la mise à l'échelle horizontale.
  • Les serveurs Argo CD Redis prennent désormais en charge la haute disponibilité (HA).
4.1.39.3. Problèmes corrigés

Les problèmes suivants ont été résolus dans la version actuelle :

  • Auparavant, Red Hat OpenShift GitOps ne fonctionnait pas comme prévu dans une configuration de serveur proxy avec des paramètres de proxy global actifs. Ce problème est corrigé et maintenant Argo CD est configuré par l'opérateur Red Hat OpenShift GitOps en utilisant des noms de domaine entièrement qualifiés (FQDN) pour les pods afin de permettre la communication entre les composants. GITOPS-703
  • Le backend Red Hat OpenShift GitOps s'appuie sur le paramètre de requête ?ref= dans l'URL Red Hat OpenShift GitOps pour effectuer des appels API. Auparavant, ce paramètre n'était pas lu à partir de l'URL, ce qui faisait que le backend considérait toujours la référence par défaut. Ce problème est corrigé et le backend Red Hat OpenShift GitOps extrait désormais le paramètre de requête de référence de l'URL Red Hat OpenShift GitOps et utilise uniquement la référence par défaut lorsqu'il n'y a pas de référence d'entrée fournie. GITOPS-817
  • Auparavant, le backend Red Hat OpenShift GitOps ne parvenait pas à trouver le dépôt GitLab valide. Ceci était dû au fait que le backend Red Hat OpenShift GitOps recherchait main comme référence de branche, au lieu de master dans le dépôt GitLab. Ce problème est maintenant corrigé. GITOPS-768
  • La page Environments dans la perspective Developer de la console web OpenShift Container Platform affiche maintenant la liste des applications et le nombre d'environnements. Cette page affiche également un lien Argo CD qui vous dirige vers la page Argo CD Applications qui répertorie toutes les applications. La page Argo CD Applications contient LABELS (par exemple, app.kubernetes.io/name=appName) qui vous aide à filtrer uniquement les applications de votre choix. GITOPS-544
4.1.39.4. Problèmes connus

Voici les problèmes connus dans Red Hat OpenShift GitOps 1.1 :

  • Red Hat OpenShift GitOps ne supporte pas Helm v2 et ksonnet.
  • L'opérateur Red Hat SSO (RH SSO) n'est pas pris en charge dans les clusters déconnectés. Par conséquent, l'intégration de Red Hat OpenShift GitOps Operator et RH SSO n'est pas prise en charge dans les clusters déconnectés.
  • Lorsque vous supprimez une application Argo CD à partir de la console web d'OpenShift Container Platform, l'application Argo CD est supprimée dans l'interface utilisateur, mais les déploiements sont toujours présents dans le cluster. Comme solution de contournement, supprimez l'application Argo CD à partir de la console Argo CD. GITOPS-830
4.1.39.5. Rupture du changement
4.1.39.5.1. Mise à jour de Red Hat OpenShift GitOps v1.0.1

Lorsque vous mettez à niveau Red Hat OpenShift GitOps v1.0.1 vers v1.1, l'opérateur Red Hat OpenShift GitOps renomme l'instance Argo CD par défaut créée dans l'espace de noms openshift-gitops de argocd-cluster à openshift-gitops.

Il s'agit d'un changement radical qui nécessite que les étapes suivantes soient effectuées manuellement, avant la mise à jour :

  1. Allez dans la console web de OpenShift Container Platform et copiez le contenu du fichier argocd-cm.yml config map dans l'espace de noms openshift-gitops dans un fichier local. Le contenu peut ressembler à l'exemple suivant :

    Exemple argocd config map YAML

    kind: ConfigMap
    apiVersion: v1
    metadata:
    selfLink: /api/v1/namespaces/openshift-gitops/configmaps/argocd-cm
    resourceVersion: '112532'
    name: argocd-cm
    uid: f5226fbc-883d-47db-8b53-b5e363f007af
    creationTimestamp: '2021-04-16T19:24:08Z'
    managedFields:
    ...
    namespace: openshift-gitops
    labels:
      app.kubernetes.io/managed-by: argocd-cluster
      app.kubernetes.io/name: argocd-cm
      app.kubernetes.io/part-of: argocd
    data: "" 
    1
    
    admin.enabled: 'true'
    statusbadge.enabled: 'false'
    resource.exclusions: |
      - apiGroups:
        - tekton.dev
        clusters:
        - '*'
        kinds:
        - TaskRun
        - PipelineRun
    ga.trackingid: ''
    repositories: |
      - type: git
        url: https://github.com/user-name/argocd-example-apps
    ga.anonymizeusers: 'false'
    help.chatUrl: ''
    url: >-
      https://argocd-cluster-server-openshift-gitops.apps.dev-svc-4.7-041614.devcluster.openshift.com   "" 
    2
    
    help.chatText: ''
    kustomize.buildOptions: ''
    resource.inclusions: ''
    repository.credentials: ''
    users.anonymous.enabled: 'false'
    configManagementPlugins: ''
    application.instanceLabelKey: ''
    Copy to Clipboard Toggle word wrap

    1
    Restaurer manuellement uniquement la section data du contenu du fichier de configuration argocd-cm.yml.
    2
    Remplacer la valeur URL dans l'entrée de la carte de configuration par le nouveau nom de l'instance openshift-gitops.
  2. Supprimer l'instance par défaut de argocd-cluster.
  3. Modifiez le nouveau fichier de configuration argocd-cm.yml pour restaurer manuellement l'ensemble de la section data.
  4. Remplacez la valeur URL dans l'entrée de la carte de configuration par le nouveau nom d'instance openshift-gitops. Par exemple, dans l'exemple précédent, remplacez la valeur URL par la valeur URL suivante :

    url: >-
      https://openshift-gitops-server-openshift-gitops.apps.dev-svc-4.7-041614.devcluster.openshift.com
    Copy to Clipboard Toggle word wrap
  5. Connectez-vous au cluster Argo CD et vérifiez que les configurations précédentes sont présentes.

4.2. Comprendre OpenShift GitOps

4.2.1. À propos de GitOps

GitOps est un moyen déclaratif de mettre en œuvre le déploiement continu pour les applications natives du cloud. Vous pouvez utiliser GitOps pour créer des processus reproductibles pour gérer les clusters et les applications OpenShift Container Platform dans des environnements Kubernetes multi-clusters. GitOps gère et automatise les déploiements complexes à un rythme rapide, ce qui permet de gagner du temps lors des cycles de déploiement et de mise en production.

Le flux de travail de GitOps fait passer une application par les étapes de développement, de test, de mise à l'essai et de production. GitOps déploie une nouvelle application ou met à jour une application existante. Vous n'avez donc qu'à mettre à jour le référentiel, GitOps automatise tout le reste.

GitOps est un ensemble de pratiques qui utilisent les requêtes Git pour gérer les configurations de l'infrastructure et des applications. Dans GitOps, le dépôt Git est la seule source de vérité pour la configuration des systèmes et des applications. Ce dépôt Git contient une description déclarative de l'infrastructure dont vous avez besoin dans votre environnement spécifique et contient un processus automatisé pour faire correspondre votre environnement à l'état décrit. Il contient également l'état complet du système, de sorte que la trace des changements apportés à l'état du système est visible et vérifiable. L'utilisation de GitOps permet de résoudre les problèmes liés à la prolifération des configurations d'infrastructures et d'applications.

GitOps définit l'infrastructure et les applications sous forme de code. Il utilise ensuite ce code pour gérer plusieurs espaces de travail et clusters afin de simplifier la création de configurations d'infrastructures et d'applications. En suivant les principes du code, vous pouvez stocker la configuration des clusters et des applications dans des référentiels Git, puis suivre le flux de travail Git pour appliquer ces référentiels aux clusters de votre choix. Vous pouvez appliquer les principes fondamentaux du développement et de la maintenance de logiciels dans un dépôt Git à la création et à la gestion de vos fichiers de configuration de clusters et d'applications.

4.2.2. À propos de Red Hat OpenShift GitOps

Red Hat OpenShift GitOps assure la cohérence des applications lorsque vous les déployez sur différents clusters dans différents environnements, tels que : développement, staging et production. Red Hat OpenShift GitOps organise le processus de déploiement autour des référentiels de configuration et en fait l'élément central. Il dispose toujours d'au moins deux référentiels :

  1. Dépôt d'applications avec le code source
  2. Référentiel de configuration de l'environnement qui définit l'état souhaité de l'application

Ces référentiels contiennent une description déclarative de l'infrastructure dont vous avez besoin dans votre environnement spécifique. Ils contiennent également un processus automatisé permettant de faire correspondre votre environnement à l'état décrit.

Red Hat OpenShift GitOps utilise Argo CD pour maintenir les ressources du cluster. Argo CD est un outil déclaratif open-source pour l'intégration et le déploiement continus (CI/CD) d'applications. Red Hat OpenShift GitOps implémente Argo CD en tant que contrôleur afin qu'il surveille continuellement les définitions et les configurations d'applications définies dans un dépôt Git. Ensuite, Argo CD compare l'état spécifié de ces configurations avec leur état réel sur le cluster.

Argo CD signale toutes les configurations qui s'écartent de l'état spécifié. Ces rapports permettent aux administrateurs de resynchroniser automatiquement ou manuellement les configurations vers l'état défini. Par conséquent, Argo CD vous permet de fournir des ressources globales personnalisées, comme les ressources utilisées pour configurer les clusters OpenShift Container Platform.

4.2.2.1. Caractéristiques principales

Red Hat OpenShift GitOps vous aide à automatiser les tâches suivantes :

  • Veiller à ce que les grappes aient des états similaires pour la configuration, la surveillance et le stockage
  • Appliquer ou inverser les changements de configuration à plusieurs clusters OpenShift Container Platform
  • Associer une configuration modèle à différents environnements
  • Promouvoir les applications sur l'ensemble des clusters, de la phase d'essai à la production

4.3. Installation de Red Hat OpenShift GitOps

Red Hat OpenShift GitOps utilise Argo CD pour gérer des ressources spécifiques aux clusters, y compris les opérateurs de clusters, les opérateurs optionnels du gestionnaire de cycle de vie des opérateurs (OLM) et la gestion des utilisateurs.

Conditions préalables
  • Vous avez accès à la console web de OpenShift Container Platform.
  • Vous êtes connecté en tant qu'utilisateur avec le rôle cluster-admin.
  • Vous êtes connecté au cluster OpenShift Container Platform en tant qu'administrateur.
  • Votre cluster a la capacité Marketplace activée ou la source du catalogue Red Hat Operator configurée manuellement.
Avertissement

Si vous avez déjà installé la version communautaire de l'Opérateur Argo CD, supprimez l'Opérateur Argo CD Community avant d'installer l'Opérateur Red Hat OpenShift GitOps.

Ce guide explique comment installer Red Hat OpenShift GitOps Operator sur un cluster OpenShift Container Platform et se connecter à l'instance Argo CD.

Procédure

  1. Ouvrez la perspective Administrator de la console web et naviguez vers OperatorsOperatorHub dans le menu de gauche.
  2. Recherchez OpenShift GitOps, cliquez sur la tuile Red Hat OpenShift GitOps, puis sur Install.

    Red Hat OpenShift GitOps sera installé dans tous les espaces de noms du cluster.

Après l'installation de Red Hat OpenShift GitOps Operator, il configure automatiquement une instance Argo CD prête à l'emploi qui est disponible dans l'espace de noms openshift-gitops, et une icône Argo CD est affichée dans la barre d'outils de la console. Vous pouvez créer des instances Argo CD ultérieures pour vos applications sous vos projets.

Vous pouvez installer Red Hat OpenShift GitOps Operator depuis OperatorHub en utilisant le CLI.

Procédure

  1. Créez un fichier YAML d'objet d'abonnement pour abonner un espace de noms à Red Hat OpenShift GitOps, par exemple, sub.yaml:

    Exemple d'abonnement

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: openshift-gitops-operator
      namespace: openshift-operators
    spec:
      channel: latest 
    1
    
      installPlanApproval: Automatic
      name: openshift-gitops-operator 
    2
    
      source: redhat-operators 
    3
    
      sourceNamespace: openshift-marketplace 
    4
    Copy to Clipboard Toggle word wrap

    1
    Indiquez le nom du canal à partir duquel vous souhaitez abonner l'opérateur.
    2
    Indiquez le nom de l'opérateur auquel vous souhaitez vous abonner.
    3
    Indiquez le nom du CatalogSource qui fournit l'opérateur.
    4
    L'espace de noms du CatalogSource. Utilisez openshift-marketplace pour les CatalogSources par défaut d'OperatorHub.
  2. Appliquez le site Subscription à la grappe :

    $ oc apply -f openshift-gitops-sub.yaml
    Copy to Clipboard Toggle word wrap
  3. Une fois l'installation terminée, assurez-vous que tous les pods de l'espace de noms openshift-gitops sont en cours d'exécution :

    $ oc get pods -n openshift-gitops
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    NAME                                                      	READY   STATUS	RESTARTS   AGE
    cluster-b5798d6f9-zr576                                   	1/1 	Running   0      	65m
    kam-69866d7c48-8nsjv                                      	1/1 	Running   0      	65m
    openshift-gitops-application-controller-0                 	1/1 	Running   0      	53m
    openshift-gitops-applicationset-controller-6447b8dfdd-5ckgh 1/1 	Running   0      	65m
    openshift-gitops-redis-74bd8d7d96-49bjf                   	1/1 	Running   0      	65m
    openshift-gitops-repo-server-c999f75d5-l4rsg              	1/1 	Running   0      	65m
    openshift-gitops-server-5785f7668b-wj57t                  	1/1 	Running   0      	53m
    Copy to Clipboard Toggle word wrap

Red Hat OpenShift GitOps Operator crée automatiquement une instance Argo CD prête à l'emploi qui est disponible dans l'espace de noms openshift-gitops.

Conditions préalables

  • Vous avez installé Red Hat OpenShift GitOps Operator dans votre cluster.

Procédure

  1. Dans la perspective Administrator de la console web, naviguez vers OperatorsInstalled Operators pour vérifier que Red Hat OpenShift GitOps Operator est installé.
  2. Naviguez jusqu'à l'icône de menu icône de menu des applications red hat menu → OpenShift GitOpsCluster Argo CD. La page de connexion de l'interface utilisateur d'Argo CD s'affiche dans une nouvelle fenêtre.
  3. Obtenir le mot de passe de l'instance Argo CD :

    1. Dans le panneau gauche de la console, utilisez le sélecteur de perspective pour passer à la perspective Developer.
    2. Utilisez la liste déroulante Project et sélectionnez le projet openshift-gitops.
    3. Utilisez le panneau de navigation de gauche pour accéder à la page Secrets.
    4. Sélectionnez l'instance openshift-gitops-cluster pour afficher le mot de passe.
    5. Copier le mot de passe.

      Note

      Pour vous connecter avec vos identifiants OpenShift Container Platform, sélectionnez l'option LOG IN VIA OPENSHIFT dans l'interface utilisateur d'Argo CD.

  4. Utilisez ce mot de passe et admin comme nom d'utilisateur pour vous connecter à l'interface utilisateur d'Argo CD dans la nouvelle fenêtre.
Note

Vous ne pouvez pas créer deux CD CR Argo dans le même espace de noms.

4.4. Désinstallation d'OpenShift GitOps

La désinstallation de Red Hat OpenShift GitOps Operator est un processus en deux étapes :

  1. Supprimez les instances Argo CD qui ont été ajoutées sous l'espace de noms par défaut de l'opérateur Red Hat OpenShift GitOps.
  2. Désinstallez l'opérateur Red Hat OpenShift GitOps.

La désinstallation de l'opérateur ne supprimera pas les instances de CD Argo créées.

4.4.1. Suppression des instances du CD Argo

Supprimer les instances du CD Argo ajoutées à l'espace de noms de l'opérateur GitOps.

Procédure

  1. Dans le site Terminal, tapez la commande suivante :
$ oc delete gitopsservice cluster -n openshift-gitops
Copy to Clipboard Toggle word wrap
Note

Vous ne pouvez pas supprimer un cluster Argo CD à partir de l'interface de la console web.

Une fois la commande exécutée avec succès, toutes les instances d'Argo CD seront supprimées de l'espace de noms openshift-gitops.

Supprimez toute autre instance de CD Argo dans d'autres espaces de noms à l'aide de la même commande :

oc delete gitopsservice cluster -n <namespace>
Copy to Clipboard Toggle word wrap

4.4.2. Désinstallation de l'opérateur GitOps

Procédure

  1. À partir de la page OperatorsOperatorHub, utilisez la boîte Filter by keyword pour rechercher la tuile Red Hat OpenShift GitOps Operator.
  2. Cliquez sur la tuile Red Hat OpenShift GitOps Operator. La tuile Opérateur indique qu'elle est installée.
  3. Dans la page du descripteur Red Hat OpenShift GitOps Operator, cliquez sur Uninstall.

4.5. Mise en place d'une instance Argo CD

Par défaut, Red Hat OpenShift GitOps installe une instance d'Argo CD dans l'espace de noms openshift-gitops avec des permissions supplémentaires pour gérer certaines ressources du cluster. Pour gérer les configurations du cluster ou déployer des applications, vous pouvez installer et déployer une nouvelle instance d'Argo CD. Par défaut, toute nouvelle instance dispose d'autorisations pour gérer les ressources uniquement dans l'espace de noms où elle est déployée.

4.5.1. Installation du CD Argo

Pour gérer les configurations de cluster ou déployer des applications, vous pouvez installer et déployer une nouvelle instance d'Argo CD.

Procédure

  1. Connectez-vous à la console web de OpenShift Container Platform.
  2. Cliquez sur OperatorsInstalled Operators.
  3. Créez ou sélectionnez le projet dans lequel vous voulez installer l'instance d'Argo CD dans le menu déroulant Project.
  4. Sélectionnez OpenShift GitOps Operator parmi les opérateurs installés et choisissez l'onglet Argo CD.
  5. Cliquez sur Create pour configurer les paramètres :

    1. Saisissez le Name de l'instance. Par défaut, l'adresse Name est fixée à argocd.
    2. Créez une route OS externe pour accéder au serveur Argo CD. Cliquez sur ServerRoute et cochez Enabled.
  6. Pour ouvrir l'interface web d'Argo CD, cliquez sur la route en naviguant vers Networking → Routes → <instance name>-server dans le projet où l'instance d'Argo CD est installée.

Les charges de travail d'Argo CD-server et d'Argo CD-repo-server sont sans état. Pour mieux répartir vos charges de travail entre les pods, vous pouvez augmenter le nombre de réplicas du serveur Argo CD et du serveur Argo CD-repo. Cependant, si un autoscaler horizontal est activé sur le serveur Argo CD, il remplace le nombre de réplicas que vous avez défini.

Procédure

  • Définissez les paramètres replicas pour les spécifications repo et server en fonction du nombre de répliques que vous souhaitez exécuter :

    Exemple de ressource personnalisée Argo CD

    apiVersion: argoproj.io/v1alpha1
    kind: ArgoCD
    metadata:
      name: example-argocd
      labels:
        example: repo
    spec:
      repo:
        replicas: <number_of_replicas>
      server:
        replicas: <number_of_replicas>
        route:
          enabled: true
          path: /
          tls:
            insecureEdgeTerminationPolicy: Redirect
            termination: passthrough
          wildcardPolicy: None
    Copy to Clipboard Toggle word wrap

4.5.3. Déployer des ressources dans un autre espace de noms

Pour permettre à Argo CD de gérer des ressources dans d'autres espaces de noms que celui où il est installé, configurez l'espace de noms cible avec une étiquette argocd.argoproj.io/managed-by.

Procédure

  • Configurer l'espace de noms :

    $ oc label namespace <namespace> \
    argocd.argoproj.io/managed-by=<namespace> 
    1
    Copy to Clipboard Toggle word wrap
    1
    L'espace de noms dans lequel Argo CD est installé.

Avec Red Hat OpenShift GitOps, vous pouvez configurer Argo CD pour synchroniser récursivement le contenu d'un répertoire Git avec une application qui contient des configurations personnalisées pour votre cluster.

Conditions préalables

  • Red Hat OpenShift GitOps est installé dans votre cluster.
  • Connexion à l'instance Argo CD.

4.6.1. Exécution de l'instance Argo CD au niveau du cluster

L'instance Argo CD par défaut et les contrôleurs qui l'accompagnent, installés par l'opérateur Red Hat OpenShift GitOps, peuvent désormais fonctionner sur les nœuds d'infrastructure du cluster en définissant un simple basculement de configuration.

Procédure

  1. Étiqueter les nœuds existants :

    $ oc label node <node-name> node-role.kubernetes.io/infra=""
    Copy to Clipboard Toggle word wrap
  2. Facultatif : si nécessaire, vous pouvez également appliquer des taints et isoler les charges de travail sur les nœuds d'infrastructure et empêcher d'autres charges de travail d'être planifiées sur ces nœuds :

    $ oc adm taint nodes -l node-role.kubernetes.io/infra \
    infra=reserved:NoSchedule infra=reserved:NoExecute
    Copy to Clipboard Toggle word wrap
  3. Ajoutez la bascule runOnInfra dans la ressource personnalisée GitOpsService:

    apiVersion: pipelines.openshift.io/v1alpha1
    kind: GitopsService
    metadata:
      name: cluster
    spec:
      runOnInfra: true
    Copy to Clipboard Toggle word wrap
  4. Facultatif : si des taints ont été ajoutés aux nœuds, ajoutez tolerations à la ressource personnalisée GitOpsService, par exemple :

      spec:
        runOnInfra: true
        tolerations:
        - effect: NoSchedule
          key: infra
          value: reserved
        - effect: NoExecute
          key: infra
          value: reserved
    Copy to Clipboard Toggle word wrap
  5. Vérifiez que les charges de travail de l'espace de noms openshift-gitops sont désormais planifiées sur les nœuds d'infrastructure en affichant PodsPod details pour n'importe quel module dans l'interface utilisateur de la console.
Note

Tous les nodeSelectors et tolerations ajoutés manuellement à la ressource personnalisée Argo CD par défaut sont remplacés par la bascule et tolerations dans la ressource personnalisée GitOpsService.

Argo CD fournit un tableau de bord qui vous permet de créer des applications.

Cet exemple de flux de travail vous guide dans le processus de configuration d'Argo CD pour synchroniser de manière récursive le contenu du répertoire cluster avec l'application cluster-configs. Le répertoire définit les configurations de cluster de la console web d'OpenShift Container Platform qui ajoutent un lien vers Red Hat Developer Blog - Kubernetes sous l'icône de menu red hat applications menu icon dans la console web, et définit un espace de noms spring-petclinic sur le cluster.

Procédure

  1. Dans le tableau de bord Argo CD, cliquez sur NEW APP pour ajouter une nouvelle application Argo CD.
  2. Pour ce flux de travail, créez une application cluster-configs avec les configurations suivantes :

    Nom de l'application
    cluster-configs
    Projet
    default
    Politique de synchronisation
    Manual
    URL du référentiel
    https://github.com/redhat-developer/openshift-gitops-getting-started
    Révision
    HEAD
    Chemin d'accès
    cluster
    Destination
    https://kubernetes.default.svc
    Espace de noms
    spring-petclinic
    Récurrence des répertoires
    checked
  3. Cliquez sur CREATE pour créer votre application.
  4. Ouvrez la perspective Administrator de la console web et naviguez vers AdministrationNamespaces dans le menu de gauche.
  5. Recherchez et sélectionnez l'espace de noms, puis entrez argocd.argoproj.io/managed-by=openshift-gitops dans le champ Label afin que l'instance d'Argo CD dans l'espace de noms openshift-gitops puisse gérer votre espace de noms.

4.6.3. Création d'une application à l'aide de l'outil oc

Vous pouvez créer des applications Argo CD dans votre terminal en utilisant l'outil oc.

Procédure

  1. Télécharger l'exemple d'application:

    $ git clone git@github.com:redhat-developer/openshift-gitops-getting-started.git
    Copy to Clipboard Toggle word wrap
  2. Créer l'application :

    $ oc create -f openshift-gitops-getting-started/argo/app.yaml
    Copy to Clipboard Toggle word wrap
  3. Exécutez la commande oc get pour examiner l'application créée :

    $ oc get application -n openshift-gitops
    Copy to Clipboard Toggle word wrap
  4. Ajoutez une étiquette à l'espace de noms dans lequel votre application est déployée afin que l'instance Argo CD dans l'espace de noms openshift-gitops puisse la gérer :

    $ oc label namespace spring-petclinic argocd.argoproj.io/managed-by=openshift-gitops
    Copy to Clipboard Toggle word wrap

4.6.4. Synchroniser votre application avec votre dépôt Git

Procédure

  1. Dans le tableau de bord Argo CD, remarquez que l'application cluster-configs Argo CD a les statuts Missing et OutOfSync. Parce que l'application a été configurée avec une politique de synchronisation manuelle, Argo CD ne la synchronise pas automatiquement.
  2. Cliquez sur SYNC sur la tuile cluster-configs, examinez les changements, puis cliquez sur SYNCHRONIZE. Argo CD détectera automatiquement tout changement dans le référentiel Git. Si les configurations sont modifiées, Argo CD changera l'état de cluster-configs en OutOfSync. Vous pouvez modifier la politique de synchronisation d'Argo CD pour appliquer automatiquement les modifications de votre référentiel Git au cluster.
  3. Remarquez que l'application cluster-configs Argo CD a maintenant les statuts Healthy et Synced. Cliquez sur la tuile cluster-configs pour vérifier les détails des ressources synchronisées et leur statut sur le cluster.
  4. Naviguez vers la console web OpenShift Container Platform et cliquez sur l'icône de menu red hat applications menu icon pour vérifier qu'un lien vers le site Red Hat Developer Blog - Kubernetes est maintenant présent.
  5. Naviguez jusqu'à la page Project et recherchez l'espace de noms spring-petclinic pour vérifier qu'il a été ajouté au cluster.

    Les configurations de votre cluster ont été synchronisées avec succès sur le cluster.

Par défaut, l'instance Argo CD dispose d'autorisations pour gérer des ressources spécifiques à la grappe, telles que les opérateurs de grappe, les opérateurs OLM facultatifs et la gestion des utilisateurs.

Note

Argo CD n'a pas les permissions d'administrateur de cluster.

Permissions pour l'instance Argo CD :

Expand

Resources

Descriptions

Groupes de ressources

Configurer l'utilisateur ou l'administrateur

operators.coreos.com

Opérateurs optionnels gérés par OLM

user.openshift.io, rbac.authorization.k8s.io

Groupes, utilisateurs et leurs autorisations

config.openshift.io

Opérateurs du plan de contrôle gérés par l'OVE utilisés pour configurer la configuration de la construction à l'échelle de la grappe, la configuration du registre et les politiques du planificateur

storage.k8s.io

Stockage

console.openshift.io

Personnalisation de la console

4.6.6. Ajout de permissions pour la configuration de la grappe

Vous pouvez accorder des autorisations à une instance Argo CD pour gérer la configuration du cluster. Créez un rôle de cluster avec des autorisations supplémentaires, puis créez une nouvelle liaison de rôle de cluster pour associer le rôle de cluster à un compte de service.

Procédure

  1. Connectez-vous à la console web de OpenShift Container Platform en tant qu'administrateur.
  2. Dans la console web, sélectionnez User ManagementRolesCreate Role. Utilisez le modèle YAML ClusterRole suivant pour ajouter des règles afin de spécifier les autorisations supplémentaires.

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: secrets-cluster-role
    rules:
    - apiGroups: [""]
      resources: ["secrets"]
      verbs: ["*"]
    Copy to Clipboard Toggle word wrap
  3. Cliquez sur Create pour ajouter le rôle de cluster.
  4. Créez maintenant le binding du rôle de cluster. Dans la console web, sélectionnez User ManagementRole BindingsCreate Binding.
  5. Sélectionnez All Projects dans la liste déroulante Project.
  6. Cliquez sur Create binding.
  7. Sélectionnez Binding type comme Cluster-wide role binding (ClusterRoleBinding).
  8. Saisissez une valeur unique pour le site RoleBinding name.
  9. Sélectionnez le rôle de cluster nouvellement créé ou un rôle de cluster existant dans la liste déroulante.
  10. Sélectionnez le site Subject comme ServiceAccount et fournissez ensuite les sites Subject namespace et name.

    1. Subject namespace: openshift-gitops
    2. Subject name: openshift-gitops-argocd-application-controller
  11. Cliquez sur Create. Le fichier YAML de l'objet ClusterRoleBinding est le suivant :

    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: cluster-role-binding
    subjects:
      - kind: ServiceAccount
        name: openshift-gitops-argocd-application-controller
        namespace: openshift-gitops
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: admin
    Copy to Clipboard Toggle word wrap

4.7. Déployer une application Spring Boot avec Argo CD

Avec Argo CD, vous pouvez déployer vos applications sur le cluster OpenShift soit en utilisant le tableau de bord Argo CD, soit en utilisant l'outil oc.

Conditions préalables

  • Red Hat OpenShift GitOps est installé dans votre cluster.
  • Connexion à l'instance Argo CD.

Argo CD fournit un tableau de bord qui vous permet de créer des applications.

Cet exemple de flux de travail vous guide dans le processus de configuration d'Argo CD pour synchroniser de manière récursive le contenu du répertoire cluster avec l'application cluster-configs. Le répertoire définit les configurations de cluster de la console web d'OpenShift Container Platform qui ajoutent un lien vers Red Hat Developer Blog - Kubernetes sous l'icône de menu red hat applications menu icon dans la console web, et définit un espace de noms spring-petclinic sur le cluster.

Procédure

  1. Dans le tableau de bord Argo CD, cliquez sur NEW APP pour ajouter une nouvelle application Argo CD.
  2. Pour ce flux de travail, créez une application cluster-configs avec les configurations suivantes :

    Nom de l'application
    cluster-configs
    Projet
    default
    Politique de synchronisation
    Manual
    URL du référentiel
    https://github.com/redhat-developer/openshift-gitops-getting-started
    Révision
    HEAD
    Chemin d'accès
    cluster
    Destination
    https://kubernetes.default.svc
    Espace de noms
    spring-petclinic
    Récurrence des répertoires
    checked
  3. Pour ce flux de travail, créez une application spring-petclinic avec les configurations suivantes :

    Nom de l'application
    spring-petclinic
    Projet
    default
    Politique de synchronisation
    Automatic
    URL du référentiel
    https://github.com/redhat-developer/openshift-gitops-getting-started
    Révision
    HEAD
    Chemin d'accès
    app
    Destination
    https://kubernetes.default.svc
    Espace de noms
    spring-petclinic
  4. Cliquez sur CREATE pour créer votre application.
  5. Ouvrez la perspective Administrator de la console web et naviguez vers AdministrationNamespaces dans le menu de gauche.
  6. Recherchez et sélectionnez l'espace de noms, puis entrez argocd.argoproj.io/managed-by=openshift-gitops dans le champ Label afin que l'instance d'Argo CD dans l'espace de noms openshift-gitops puisse gérer votre espace de noms.

4.7.2. Création d'une application à l'aide de l'outil oc

Vous pouvez créer des applications Argo CD dans votre terminal en utilisant l'outil oc.

Procédure

  1. Télécharger l'exemple d'application:

    $ git clone git@github.com:redhat-developer/openshift-gitops-getting-started.git
    Copy to Clipboard Toggle word wrap
  2. Créer l'application :

    $ oc create -f openshift-gitops-getting-started/argo/app.yaml
    Copy to Clipboard Toggle word wrap
    $ oc create -f openshift-gitops-getting-started/argo/app.yaml
    Copy to Clipboard Toggle word wrap
  3. Exécutez la commande oc get pour examiner l'application créée :

    $ oc get application -n openshift-gitops
    Copy to Clipboard Toggle word wrap
  4. Ajoutez une étiquette à l'espace de noms dans lequel votre application est déployée afin que l'instance Argo CD dans l'espace de noms openshift-gitops puisse la gérer :

    $ oc label namespace spring-petclinic argocd.argoproj.io/managed-by=openshift-gitops
    Copy to Clipboard Toggle word wrap
    $ oc label namespace spring-petclinic argocd.argoproj.io/managed-by=openshift-gitops
    Copy to Clipboard Toggle word wrap

Argo CD surveille en permanence l'état des applications déployées, détecte les différences entre les manifestes spécifiés dans Git et les changements en cours dans le cluster, puis les corrige automatiquement. Ce comportement est appelé "auto-réparation".

Vous pouvez tester et observer le comportement d'auto-guérison dans Argo CD.

Conditions préalables

  • L'exemple d'application app-spring-petclinic est déployé et configuré.

Procédure

  1. Dans le tableau de bord d'Argo CD, vérifiez que votre application a le statut Synced.
  2. Cliquez sur la tuile app-spring-petclinic dans le tableau de bord Argo CD pour afficher les ressources d'application déployées dans le cluster.
  3. Dans la console web de OpenShift Container Platform, naviguez vers la perspective Developer.
  4. Modifier le déploiement de Spring PetClinic et valider les changements dans le répertoire app/ du dépôt Git. Argo CD déploiera automatiquement les changements sur le cluster.

    1. Forker le dépôt OpenShift GitOps getting started.
    2. Dans le fichier deployment.yaml, remplacez la valeur failureThreshold par 5.
    3. Dans le cluster de déploiement, exécutez la commande suivante pour vérifier la valeur modifiée du champ failureThreshold:

      $ oc edit deployment spring-petclinic -n spring-petclinic
      Copy to Clipboard Toggle word wrap
  5. Testez le comportement d'autoréparation en modifiant le déploiement sur le cluster et en l'augmentant à deux pods tout en observant l'application dans la console web d'OpenShift Container Platform.

    1. Exécutez la commande suivante pour modifier le déploiement :

      $ oc scale deployment spring-petclinic --replicas 2  -n spring-petclinic
      Copy to Clipboard Toggle word wrap
    2. Dans la console web d'OpenShift Container Platform, remarquez que le déploiement passe à deux pods et redescend immédiatement à un pod. Argo CD a détecté une différence dans le référentiel Git et a guéri automatiquement l'application sur le cluster OpenShift Container Platform.
  6. Dans le tableau de bord Argo CD, cliquez sur la tuile app-spring-petclinicAPP DETAILSEVENTS. L'onglet EVENTS affiche les événements suivants : Argo CD a détecté des ressources de déploiement désynchronisées sur le cluster et a resynchronisé le référentiel Git pour corriger la situation.

4.8. Opérateur CD Argo

La ressource personnalisée ArgoCD est une ressource personnalisée Kubernetes (CRD) qui décrit l'état souhaité pour un cluster Argo CD donné qui vous permet de configurer les composants qui constituent un cluster Argo CD.

4.8.1. Outil CLI d'Argo CD

L'outil Argo CD CLI est un outil utilisé pour configurer Argo CD via la ligne de commande. Red Hat OpenShift GitOps ne prend pas en charge ce binaire. Utilisez la console OpenShift pour configurer Argo CD.

4.8.2. Propriétés des ressources personnalisées d'Argo CD

La ressource personnalisée du CD Argo est constituée des propriétés suivantes :

Expand

Name

Description

Default

Properties

ApplicationInstanceLabelKey

Le nom de la clé metadata.label où Argo CD injecte le nom de l'application comme étiquette de suivi.

app.kubernetes.io/instance

 

ApplicationSet

ApplicationSet options de configuration du contrôleur.

<Object>

  • <Image> - L'image du conteneur pour le contrôleur ApplicationSet. Elle remplace la variable d'environnement ARGOCD_APPLICATIONSET_IMAGE.
  • <Version> - La balise à utiliser avec l'image du conteneur ApplicationSet.
  • <Resources> - Les ressources informatiques du conteneur.
  • <LogLevel> - Le niveau de journalisation utilisé par le composant contrôleur d'application Argo CD. Les options valides sont debug, info, error, et warn.
  • <LogFormat> - Le format de journal utilisé par le composant contrôleur d'application Argo CD. Les options valides sont text ou json.
  • <PrallelismLimit> - La limite de parallélisme kubectl à définir pour le contrôleur (--kubectl-parallelism-limit flag).

ConfigManagementPlugins

Ajouter un plugin de gestion de la configuration.

<empty>

 

Controller

Options du contrôleur d'application Argo CD.

<Object>

  • <Processors.Operation> - Le nombre de processeurs d'opération.
  • <Processors.Status> - Le nombre de processeurs d'état.
  • <Resources> - Les ressources informatiques du conteneur.
  • <LogLevel> - Le niveau de journalisation utilisé par le composant contrôleur d'application Argo CD. Les options valides sont debug, info, error, et warn.
  • <AppSync> - AppSync est utilisé pour contrôler la fréquence de synchronisation des applications Argo CD
  • <Sharding.enabled> - Activer le sharding sur le composant contrôleur d'application Argo CD. Cette propriété est utilisée pour gérer un grand nombre de clusters afin de réduire la pression de la mémoire sur le composant contrôleur.
  • <Sharding.replicas> - Le nombre de répliques qui seront utilisées pour prendre en charge le sharding du contrôleur d'application Argo CD.
  • <Env> - Environnement à définir pour les charges de travail du contrôleur d'application.

DisableAdmin

Désactive l'utilisateur administrateur intégré.

false

 

GATrackingID

Utiliser un identifiant de suivi Google Analytics.

<empty>

 

GAAnonymizeusers

Activer les noms d'utilisateur hachés envoyés à Google Analytics.

false

 

HA

Options de grande disponibilité.

<Object>

  • <Enabled> - Basculer le support de haute disponibilité au niveau mondial pour Argo CD.
  • <RedisProxyImage> - L'image du conteneur Redis HAProxy. Elle remplace la variable d'environnement ARGOCD_REDIS_HA_PROXY_IMAGE.
  • <RedisProxyVersion> - La balise à utiliser pour l'image du conteneur Redis HAProxy.

HelpChatURL

URL pour obtenir de l'aide par chat (il s'agit généralement de votre canal Slack pour l'assistance).

https://mycorp.slack.com/argo-cd

 

HelpChatText

Le texte qui apparaît dans une zone de texte pour obtenir de l'aide sur le chat.

Chat now!

 

Image

L'image du conteneur pour tous les composants d'Argo CD. Elle remplace la variable d'environnement ARGOCD_IMAGE.

argoproj/argocd

 

Ingress

Options de configuration de l'entrée.

<Object>

 

InitialRepositories

Dépôts Git initiaux pour configurer Argo CD à utiliser lors de la création du cluster.

<empty>

 

Notifications

Options de configuration du contrôleur de notifications.

<Object>

  • <Enabled> - La bascule pour démarrer le contrôleur de notifications.
  • <Image> - L'image du conteneur pour tous les composants d'Argo CD. Elle remplace la variable d'environnement ARGOCD_IMAGE.
  • <Version> - La balise à utiliser avec l'image du conteneur de notifications.
  • <Resources> - Les ressources informatiques du conteneur.
  • <LogLevel> - Le niveau de journalisation utilisé par le composant contrôleur d'application Argo CD. Les options valides sont debug, info, error, et warn.

RepositoryCredentials

Modèles d'identifiants du référentiel Git à configurer pour qu'Argo CD les utilise lors de la création du cluster.

<empty>

 

InitialSSHKnownHosts

Hôtes SSH initiaux connus pour Argo CD à utiliser lors de la création du cluster.

<default_Argo_CD_Known_Hosts>

 

KustomizeBuildOptions

Les options de construction et les paramètres à utiliser avec kustomize build.

<empty>

 

OIDCConfig

La configuration OIDC comme alternative à Dex.

<empty>

 

NodePlacement

Ajouter le nodeSelector et le tolerations.

<empty>

 

Prometheus

Options de configuration de Prometheus.

<Object>

  • <Enabled> - Basculer la prise en charge globale de Prometheus pour Argo CD.
  • <Host> - Le nom d'hôte à utiliser pour les ressources Ingress ou Route.
  • <Ingress> - Bascule Ingress pour Prometheus.
  • <Route> - Options de configuration de l'itinéraire.
  • <Size> - Le nombre de répliques pour le Prometheus StatefulSet.

RBAC

Options de configuration RBAC.

<Object>

  • <DefaultPolicy> - La propriété policy.default dans la carte de configuration argocd-rbac-cm. Le nom du rôle par défaut sur lequel Argo CD s'appuiera pour autoriser les demandes d'API.
  • <Policy> - La propriété policy.csv dans la carte de configuration argocd-rbac-cm. Les données CSV contenant les politiques RBAC définies par l'utilisateur et les définitions des rôles.
  • <Scopes> - La propriété scopes dans la carte de configuration argocd-rbac-cm. Contrôle les champs d'application OIDC à examiner lors de l'application des règles RBAC (en plus des sous champs d'application).

Redis

Options de configuration de Redis.

<Object>

  • <AutoTLS> - Utilisez le fournisseur pour créer le certificat TLS du serveur Redis (l'un de : openshift). Actuellement disponible uniquement pour OpenShift Container Platform.
  • <DisableTLSVerification> - Définir si le serveur Redis doit être accessible en utilisant une validation TLS stricte.
  • <Image> - L'image du conteneur pour Redis. Elle remplace la variable d'environnement ARGOCD_REDIS_IMAGE.
  • <Resources> - Les ressources informatiques du conteneur.
  • <Version> - La balise à utiliser avec l'image du conteneur Redis.

ResourceCustomizations

Personnaliser le comportement des ressources.

<empty>

 

ResourceExclusions

Ignorer complètement des classes entières de groupes de ressources.

<empty>

 

ResourceInclusions

La configuration permet de déterminer les groupes de ressources ou les types de ressources qui sont appliqués.

<empty>

 

Server

Options de configuration du serveur Argo CD.

<Object>

  • <Autoscale> - Options de configuration du serveur autoscale.
  • <ExtraCommandArgs> - Liste des arguments ajoutés aux arguments existants définis par l'opérateur.
  • <GRPC> - Options de configuration du GRPC.
  • <Host> - Le nom d'hôte utilisé pour les ressources Ingress ou Route.
  • <Ingress> - Configuration de l'entrée pour le composant serveur Argo CD.
  • <Insecure> - Bascule le drapeau d'insécurité pour le serveur Argo CD.
  • <Resources> - Les ressources informatiques du conteneur.
  • <Replicas> - Le nombre de répliques pour le serveur Argo CD. Doit être supérieur ou égal à 0. Si Autoscale est activé, Replicas est ignoré.
  • <Route> - Options de configuration de l'itinéraire.
  • <Service.Type> - Le site ServiceType utilisé pour la ressource de service.
  • <LogLevel> - Le niveau de journalisation à utiliser par le composant Argo CD Server. Les options valides sont debug, info, error, et warn.
  • <LogFormat> - Le format de journal utilisé par le composant contrôleur d'application Argo CD. Les options valides sont text ou json.
  • <Env> - Environnement à définir pour les charges de travail du serveur.

SSO

Options d'authentification unique.

<Object>

  • <Image> - L'image du conteneur pour Keycloak. Elle remplace la variable d'environnement ARGOCD_KEYCLOAK_IMAGE.
  • <Keycloak> - Options de configuration pour le fournisseur SSO Keycloak.
  • <Dex> - Options de configuration pour le fournisseur Dex SSO.
  • <Provider> - Le nom du fournisseur utilisé pour configurer l'authentification unique. Pour l'instant, les options prises en charge sont Dex et Keycloak.
  • <Resources> - Les ressources informatiques du conteneur.
  • <VerifyTLS> - Si l'on veut appliquer une vérification TLS stricte lors de la communication avec le service Keycloak.
  • <Version> - La balise à utiliser avec l'image du conteneur Keycloak.

StatusBadgeEnabled

Activer le badge d'état de la demande.

true

 

TLS

Options de configuration de TLS.

<Object>

  • <CA.ConfigMapName> - Le nom du site ConfigMap qui contient le certificat de l'autorité de certification.
  • <CA.SecretName> - Le nom du secret qui contient le certificat et la clé de l'autorité de certification.
  • <InitialCerts> - Ensemble initial de certificats dans la carte de configuration argocd-tls-certs-cm pour la connexion des dépôts Git via HTTPS.

UserAnonyousEnabled

Activer l'accès des utilisateurs anonymes.

true

 

Version

La balise à utiliser avec l'image du conteneur pour tous les composants du CD Argo.

Dernière version du CD Argo

 

Banner

Ajouter un message de bannière d'interface utilisateur.

<Object>

  • <Banner.Content> - Le contenu du message de la bannière (obligatoire si une bannière est affichée).
  • <Banner.URL.SecretName> - L'URL du lien du message de la bannière (facultatif).

4.8.3. Propriétés du serveur Repo

Les propriétés suivantes sont disponibles pour configurer le composant serveur Repo :

Expand

Name

Default

Description

Resources

<empty>

Les ressources informatiques du conteneur.

MountSAToken

false

Si le jeton ServiceAccount doit être monté sur le pod repo-server.

ServiceAccount

""

Le nom du site ServiceAccount à utiliser avec le pod repo-server.

VerifyTLS

false

Si l'on veut imposer une vérification TLS stricte à tous les composants lorsqu'ils communiquent avec le serveur repo.

AutoTLS

""

Fournisseur à utiliser pour configurer TLS le certificat gRPC TLS du serveur repo (un de : openshift). Actuellement disponible uniquement pour OpenShift.

Image

argoproj/argocd

L'image du conteneur pour le serveur Argo CD Repo. Elle remplace la variable d'environnement ARGOCD_REPOSERVER_IMAGE.

Version

même que .spec.Version

Le tag à utiliser avec le serveur Argo CD Repo.

LogLevel

info

Le niveau de journalisation utilisé par le serveur Argo CD Repo. Les options valides sont debug, info, error et warn.

LogFormat

text

Le format de journal à utiliser par le serveur Argo CD Repo. Les options valides sont text ou json.

ExecTimeout

180

Délai d'exécution en secondes pour les outils de rendu (par exemple Helm, Kustomize).

Env

<empty>

Environnement à définir pour les charges de travail du serveur de référentiel.

Replicas

<empty>

Le nombre de répliques pour le serveur Argo CD Repo. Doit être supérieur ou égal à 0.

4.8.4. Activation des notifications avec l'instance Argo CD

Pour activer ou désactiver le contrôleur de notifications Argo CD, définissez un paramètre dans la ressource personnalisée Argo CD. Par défaut, les notifications sont désactivées. Pour activer les notifications, définissez le paramètre enabled sur true dans le fichier .yaml:

Procédure

  1. Réglez le paramètre enabled sur true:
apiVersion: argoproj.io/v1alpha1
kind: ArgoCD
metadata:
  name: example-argocd
spec:
  notifications:
    enabled: true
Copy to Clipboard Toggle word wrap

La page Red Hat OpenShift GitOps Environments dans la perspective Developer de la console web OpenShift Container Platform montre une liste des déploiements réussis des environnements d'application, ainsi que des liens vers la révision pour chaque déploiement.

La page Application environments dans la perspective Developer de la console web OpenShift Container Platform affiche l'état de santé des ressources de l'application, telles que les routes, l'état de synchronisation, la configuration du déploiement et l'historique du déploiement.

Les pages des environnements dans la perspective Developer de la console web d'OpenShift Container Platform sont découplées de l'interface de ligne de commande (CLI) de Red Hat OpenShift GitOps Application Manager, kam. Vous n'avez pas besoin d'utiliser kam pour générer des manifestes d'environnement d'application pour que les environnements apparaissent dans la perspective Developer de la console web d'OpenShift Container Platform. Vous pouvez utiliser vos propres manifestes, mais les environnements doivent toujours être représentés par des espaces de noms. En outre, des étiquettes et des annotations spécifiques sont toujours nécessaires.

4.9.1. Vérification des informations sur la santé

L'opérateur Red Hat OpenShift GitOps installera le service backend GitOps dans l'espace de noms openshift-gitops.

Conditions préalables

  • L'opérateur Red Hat OpenShift GitOps est installé à partir de OperatorHub.
  • Assurez-vous que vos applications sont synchronisées par Argo CD.

Procédure

  1. Cliquez sur Environments sous la perspective Developer. La page Environments affiche la liste des applications ainsi que leur Environment status.
  2. Survolez les icônes sous la colonne Environment status pour voir l'état de la synchronisation de tous les environnements.
  3. Cliquez sur le nom de l'application dans la liste pour afficher les détails d'une application spécifique.
  4. Dans la page Application environments, si la section Resources sous l'onglet Overview affiche des icônes, survolez les icônes pour obtenir des détails sur l'état.

    • Un cœur brisé indique que des problèmes de ressources ont dégradé les performances de l'application.
    • Un signe jaune indique que des problèmes de ressources ont retardé les données sur l'état de l'application.
  5. Pour consulter l'historique du déploiement d'une application, cliquez sur l'onglet Deployment History. La page comprend des détails tels que Last deployment, Description (message de validation), Environment, Author et Revision.

4.10. Configuration du SSO pour Argo CD à l'aide de Dex

Après l'installation de Red Hat OpenShift GitOps Operator, Argo CD crée automatiquement un utilisateur avec les permissions admin. Pour gérer plusieurs utilisateurs, les administrateurs de cluster peuvent utiliser Argo CD pour configurer l'authentification unique (SSO).

Important

Le paramètre spec.dex dans la CR ArgoCD est obsolète. Dans une prochaine version de Red Hat OpenShift GitOps v1.9, il est prévu de supprimer la configuration de Dex à l'aide du paramètre spec.dex dans la CR ArgoCD. Pensez à utiliser le paramètre .spec.sso à la place.

4.10.1. Activation du connecteur Dex OpenShift OAuth

Dex utilise les utilisateurs et les groupes définis dans OpenShift en vérifiant le serveur OAuth fourni par la plateforme. L'exemple suivant montre les propriétés de Dex ainsi que des exemples de configuration :

apiVersion: argoproj.io/v1alpha1
kind: ArgoCD
metadata:
  name: example-argocd
  labels:
    example: openshift-oauth
spec:
  dex:
    openShiftOAuth: true 
1

    groups:
2

     - default
  rbac:
3

    defaultPolicy: 'role:readonly'
    policy: |
      g, cluster-admins, role:admin
    scopes: '[groups]'
Copy to Clipboard Toggle word wrap
1
La propriété openShiftOAuth déclenche la configuration automatique par l'Opérateur du serveur intégré OpenShift OAuth lorsque la valeur est définie sur true.
2
La propriété groups permet aux utilisateurs du ou des groupes spécifiés de se connecter.
3
La propriété de la politique RBAC attribue le rôle d'administrateur dans le cluster Argo CD aux utilisateurs du groupe OpenShift cluster-admins.
4.10.1.1. Mapper les utilisateurs à des rôles spécifiques

Argo CD ne peut pas mapper les utilisateurs à des rôles spécifiques s'ils ont un rôle direct ClusterRoleBinding. Vous pouvez changer manuellement le rôle comme role:admin sur SSO via OpenShift.

Procédure

  1. Créer un groupe nommé cluster-admins.

    $ oc adm groups new cluster-admins
    Copy to Clipboard Toggle word wrap
  2. Ajouter l'utilisateur au groupe.

    $ oc adm groups add-users cluster-admins USER
    Copy to Clipboard Toggle word wrap
  3. Appliquer le site cluster-admin ClusterRole au groupe :

    $ oc adm policy add-cluster-role-to-group cluster-admin cluster-admins
    Copy to Clipboard Toggle word wrap

4.10.2. Désactivation de Dex

Dex est installé par défaut pour toutes les instances Argo CD créées par l'Opérateur. Vous pouvez configurer Red Hat OpenShift GitOps pour utiliser Dex comme fournisseur d'authentification SSO en définissant le paramètre .spec.dex.

Important

Dans Red Hat OpenShift GitOps v1.6.0, DISABLE_DEX est déprécié et devrait être supprimé dans Red Hat OpenShift GitOps v1.9.0. Pensez à utiliser le paramètre .spec.sso.dex à la place. Voir "Activer ou désactiver Dex en utilisant .spec.sso".

Procédure

  • Définissez la variable environnementale DISABLE_DEX à true dans la ressource YAML de l'opérateur :

    ...
    spec:
      config:
        env:
        - name: DISABLE_DEX
          value: "true"
    ...
    Copy to Clipboard Toggle word wrap

Vous pouvez configurer Red Hat OpenShift GitOps pour utiliser Dex comme fournisseur d'authentification SSO en définissant le paramètre .spec.sso.

Procédure

  1. Pour activer Dex, définissez le paramètre .spec.sso.provider: dex dans la ressource YAML de l'opérateur :

    ...
    spec:
      sso:
        provider: dex
        dex:
          openShiftOAuth: true
    ...
    Copy to Clipboard Toggle word wrap
  2. Pour désactiver dex, supprimez l'élément spec.sso de la ressource personnalisée Argo CD ou spécifiez un fournisseur SSO différent.

4.11. Configuration du SSO pour Argo CD à l'aide de Keycloak

Après l'installation de Red Hat OpenShift GitOps Operator, Argo CD crée automatiquement un utilisateur avec les permissions admin. Pour gérer plusieurs utilisateurs, les administrateurs de cluster peuvent utiliser Argo CD pour configurer l'authentification unique (SSO).

Conditions préalables

  • Red Hat SSO est installé sur le cluster.
  • Red Hat OpenShift GitOps Operator est installé sur le cluster.
  • Le CD Argo est installé sur le cluster.

4.11.1. Configuration d'un nouveau client dans Keycloak

Dex est installé par défaut pour toutes les instances Argo CD créées par l'Opérateur. Cependant, vous pouvez supprimer la configuration Dex et ajouter Keycloak à la place pour vous connecter à Argo CD en utilisant vos informations d'identification OpenShift. Keycloak agit comme un courtier d'identité entre Argo CD et OpenShift.

Procédure

Pour configurer Keycloak, procédez comme suit :

  1. Supprimer la configuration Dex en supprimant le paramètre .spec.sso.dex de la ressource personnalisée (CR) Argo CD, et enregistrer la CR :

    dex:
        openShiftOAuth: true
        resources:
          limits:
            cpu:
            memory:
          requests:
            cpu:
            memory:
    Copy to Clipboard Toggle word wrap
  2. Réglez la valeur du paramètre provider sur keycloak dans l'Argo CD CR.
  3. Configurez Keycloak en effectuant l'une des étapes suivantes :

    • Pour une connexion sécurisée, définissez la valeur du paramètre rootCA comme indiqué dans l'exemple suivant :

      apiVersion: argoproj.io/v1alpha1
      kind: ArgoCD
      metadata:
        name: example-argocd
        labels:
          example: basic
      spec:
        sso:
          provider: keycloak
          keycloak:
            rootCA: "<PEM-encoded-root-certificate>" 
      1
      
        server:
          route:
            enabled: true
      Copy to Clipboard Toggle word wrap
      1
      Un certificat personnalisé utilisé pour vérifier le certificat TLS du Keycloak.

      L'opérateur rapproche les modifications du paramètre .spec.keycloak.rootCA et met à jour le paramètre oidc.config avec le certificat racine codé PEM dans la carte de configuration argocd-cm.

    • Pour une connexion non sécurisée, laissez la valeur du paramètre rootCA vide et utilisez le paramètre oidc.tls.insecure.skip.verify comme indiqué ci-dessous :

      apiVersion: argoproj.io/v1alpha1
      kind: ArgoCD
      metadata:
        name: example-argocd
        labels:
          example: basic
      spec:
        extraConfig:
          oidc.tls.insecure.skip.verify: "true"
        sso:
          provider: keycloak
          keycloak:
            rootCA: ""
      Copy to Clipboard Toggle word wrap
Note

L'instance de Keycloak s'installe et fonctionne en 2 à 3 minutes.

4.11.2. Se connecter à Keycloak

Connectez-vous à la console Keycloak pour gérer les identités ou les rôles et définir les permissions attribuées aux différents rôles.

Conditions préalables

  • La configuration par défaut de Dex est supprimée.
  • Votre Argo CD CR doit être configuré pour utiliser le fournisseur SSO Keycloak.

Procédure

  1. Obtenir l'URL de la route Keycloak pour la connexion :

    $ oc -n argocd get route keycloak
    
    NAME        HOST/PORT                                                        PATH   SERVICES   PORT    TERMINATION   WILDCARD
    keycloak    keycloak-default.apps.ci-ln-******.origin-ci-int-aws.dev.**.com         keycloak   <all>    reencrypt     None
    Copy to Clipboard Toggle word wrap
  2. Obtenir le nom du pod Keycloak qui stocke le nom d'utilisateur et le mot de passe en tant que variables d'environnement :

    $ oc -n argocd get pods
    
    NAME                      READY   STATUS           RESTARTS   AGE
    keycloak-1-2sjcl           1/1    Running            0        45m
    Copy to Clipboard Toggle word wrap
    1. Obtenir le nom d'utilisateur de Keycloak :

      $ oc -n argocd exec keycloak-1-2sjcl -- "env" | grep SSO_ADMIN_USERNAME
      
      SSO_ADMIN_USERNAME=Cqid54Ih
      Copy to Clipboard Toggle word wrap
    2. Obtenir le mot de passe Keycloak :

      $ oc -n argocd exec keycloak-1-2sjcl -- "env" | grep SSO_ADMIN_PASSWORD
      
      SSO_ADMIN_PASSWORD=GVXxHifH
      Copy to Clipboard Toggle word wrap
  3. Sur la page de connexion, cliquez sur LOG IN VIA KEYCLOAK.

    Note

    L'option LOGIN VIA KEYCLOAK n'apparaît qu'une fois que l'instance de Keycloak est prête.

  4. Cliquez sur Login with OpenShift.

    Note

    La connexion à l'aide de kubeadmin n'est pas prise en charge.

  5. Saisissez les informations d'identification OpenShift pour vous connecter.
  6. Optionnel : Par défaut, tout utilisateur connecté à Argo CD a un accès en lecture seule. Vous pouvez gérer l'accès au niveau de l'utilisateur en mettant à jour la carte de configuration argocd-rbac-cm:

    policy.csv:
    <name>, <email>, role:admin
    Copy to Clipboard Toggle word wrap

4.11.3. Désinstallation de Keycloak

Vous pouvez supprimer les ressources Keycloak et les configurations correspondantes en supprimant le champ SSO du fichier de ressources personnalisées (CR) du CD Argo. Une fois le champ SSO supprimé, les valeurs du fichier ressemblent à ce qui suit :

  apiVersion: argoproj.io/v1alpha1
  kind: ArgoCD
  metadata:
    name: example-argocd
    labels:
      example: basic
  spec:
    server:
      route:
       enabled: true
Copy to Clipboard Toggle word wrap
Note

Une application Keycloak créée à l'aide de cette méthode n'est actuellement pas persistante. Les configurations supplémentaires créées dans le domaine Keycloak d'Argo CD sont supprimées lorsque le serveur redémarre.

4.12. Configuration d'Argo CD RBAC

Par défaut, si vous êtes connecté à Argo CD en utilisant RHSSO, vous êtes un utilisateur en lecture seule. Vous pouvez modifier et gérer l'accès au niveau de l'utilisateur.

4.12.1. Configuration de l'accès au niveau de l'utilisateur

Pour gérer et modifier l'accès au niveau de l'utilisateur, configurez la section RBAC dans la ressource personnalisée d'Argo CD.

Procédure

  • Modifiez la ressource personnalisée argocd:

    $ oc edit argocd [argocd-instance-name] -n [namespace]
    Copy to Clipboard Toggle word wrap

    Sortie

    metadata
    ...
    ...
      rbac:
        policy: 'g, rbacsystem:cluster-admins, role:admin'
        scopes: '[groups]'
    Copy to Clipboard Toggle word wrap

  • Ajoutez la configuration policy à la section rbac et ajoutez les name, email et role de l'utilisateur :

    metadata
    ...
    ...
    rbac:
        policy: <name>, <email>, role:<admin>
        scopes: '[groups]'
    Copy to Clipboard Toggle word wrap
Note

Actuellement, RHSSO ne peut pas lire les informations de groupe des utilisateurs de Red Hat OpenShift GitOps. Par conséquent, configurez le RBAC au niveau de l'utilisateur.

4.12.2. Modifier les demandes/limites de ressources du RHSSO

Par défaut, le conteneur RHSSO est créé avec des demandes de ressources et des limitations. Vous pouvez modifier et gérer les demandes de ressources.

Expand
ResourceRequestsLimits

UNITÉ CENTRALE

500

1000m

Mémoire

512 Mi

1024 Mi

Procédure

Modifier les exigences de ressources par défaut en corrigeant le CD CR Argo :

$ oc -n openshift-gitops patch argocd openshift-gitops --type='json' -p='[{"op": "add", "path": "/spec/sso", "value": {"provider": "keycloak", "resources": {"requests": {"cpu": "512m", "memory": "512Mi"}, "limits": {"cpu": "1024m", "memory": "1024Mi"}} }}]'
Copy to Clipboard Toggle word wrap
Note

RHSSO créé par Red Hat OpenShift GitOps ne conserve que les modifications apportées par l'opérateur. Si le RHSSO redémarre, toute configuration supplémentaire créée par l'administrateur dans le RHSSO est supprimée.

4.13. Configuration des quotas ou des demandes de ressources

Avec la ressource personnalisée Argo CD, vous pouvez créer, mettre à jour et supprimer les demandes et les limites de ressources pour les charges de travail Argo CD.

Vous pouvez créer des charges de travail de ressources personnalisées Argo CD avec des demandes et des limites de ressources. Cela est nécessaire lorsque vous souhaitez déployer l'instance Argo CD dans un espace de noms configuré avec des quotas de ressources.

L'instance Argo CD suivante déploie les charges de travail Argo CD telles que Application Controller, ApplicationSet Controller, Dex, Redis,Repo Server, et Server avec des demandes et des limites de ressources. Vous pouvez également créer d'autres charges de travail avec des exigences de ressources de la même manière.

apiVersion: argoproj.io/v1alpha1
kind: ArgoCD
metadata:
  name: example
spec:
  server:
    resources:
      limits:
        cpu: 500m
        memory: 256Mi
      requests:
        cpu: 125m
        memory: 128Mi
    route:
      enabled: true
  applicationSet:
    resources:
      limits:
        cpu: '2'
        memory: 1Gi
      requests:
        cpu: 250m
        memory: 512Mi
  repo:
    resources:
      limits:
        cpu: '1'
        memory: 512Mi
      requests:
        cpu: 250m
        memory: 256Mi
  dex:
    resources:
      limits:
        cpu: 500m
        memory: 256Mi
      requests:
        cpu: 250m
        memory: 128Mi
  redis:
    resources:
      limits:
        cpu: 500m
        memory: 256Mi
      requests:
        cpu: 250m
        memory: 128Mi
  controller:
    resources:
      limits:
        cpu: '2'
        memory: 2Gi
      requests:
        cpu: 250m
        memory: 1Gi
Copy to Clipboard Toggle word wrap

Vous pouvez mettre à jour les besoins en ressources pour tout ou partie des charges de travail après l'installation.

Procédure

Mettre à jour les demandes de ressources Application Controller d'une instance Argo CD dans l'espace de noms Argo CD.

oc -n argocd patch argocd example --type='json' -p='[{"op": "replace", "path": "/spec/controller/resources/requests/cpu", "value":"1"}]'

oc -n argocd patch argocd example --type='json' -p='[{"op": "replace", "path": "/spec/controller/resources/requests/memory", "value":"512Mi"}]'
Copy to Clipboard Toggle word wrap

4.13.3. Suppression des demandes de ressources

Vous pouvez également supprimer les exigences en matière de ressources pour tout ou partie de vos charges de travail après l'installation.

Procédure

Supprimer les demandes de ressources Application Controller d'une instance Argo CD dans l'espace de noms Argo CD.

oc -n argocd patch argocd example --type='json' -p='[{"op": "remove", "path": "/spec/controller/resources/requests/cpu"}]'

oc -n argocd argocd patch argocd example --type='json' -p='[{"op": "remove", "path": "/spec/controller/resources/requests/memory"}]'
Copy to Clipboard Toggle word wrap

Avec Red Hat OpenShift GitOps, vous pouvez surveiller la disponibilité des charges de travail des ressources personnalisées Argo CD pour des instances Argo CD spécifiques. En surveillant les charges de travail des ressources personnalisées Argo CD, vous disposez des dernières informations sur l'état de vos instances Argo CD en activant des alertes pour elles. Lorsque les pods de charge de travail des composants tels que le contrôleur d'application, le serveur repo ou le serveur de l'instance Argo CD correspondante sont incapables de démarrer pour certaines raisons et qu'il y a une dérive entre le nombre de répliques prêtes et le nombre de répliques souhaitées pendant une certaine période de temps, l'opérateur déclenche alors les alertes.

Vous pouvez activer et désactiver le paramètre de surveillance des charges de travail des ressources personnalisées d'Argo CD.

Conditions préalables
  • Vous avez accès au cluster en tant qu'utilisateur ayant le rôle cluster-admin.
  • Red Hat OpenShift GitOps est installé dans votre cluster.
  • La pile de surveillance est configurée dans votre cluster dans le projet openshift-monitoring. De plus, l'instance Argo CD se trouve dans un espace de noms que vous pouvez surveiller via Prometheus.
  • Le service kube-state-metrics est en cours d'exécution dans votre cluster.
  • Facultatif : Si vous activez la surveillance d'une instance Argo CD déjà présente dans un projet défini par l'utilisateur, assurez-vous que la surveillance est activée pour les projets définis par l'utilisateur dans votre cluster.

    Note

    Si vous souhaitez activer la surveillance d'une instance Argo CD dans un espace de noms qui n'est pas surveillé par la pile par défaut openshift-monitoring, par exemple, tout espace de noms qui ne commence pas par openshift-*, vous devez activer la surveillance de la charge de travail de l'utilisateur dans votre cluster. Cette action permet à la pile de surveillance de récupérer la PrometheusRule créée.

Par défaut, la configuration de la surveillance des charges de travail des ressources personnalisées d'Argo CD est définie sur false.

Avec Red Hat OpenShift GitOps, vous pouvez activer la surveillance de la charge de travail pour des instances Argo CD spécifiques. Par conséquent, l'opérateur crée un objet PrometheusRule qui contient des règles d'alerte pour toutes les charges de travail gérées par les instances Argo CD spécifiques. Ces règles d'alerte déclenchent le déclenchement d'une alerte lorsque le nombre de répliques du composant correspondant s'est écarté de l'état souhaité pendant un certain temps. L'opérateur n'écrase pas les modifications apportées à l'objet PrometheusRule par les utilisateurs.

Procédure

  1. Fixe la valeur du champ .spec.monitoring.enabled à true sur une instance de CD Argo donnée :

    Exemple de ressource personnalisée Argo CD

    apiVersion: argoproj.io/v1alpha1
    kind: ArgoCD
    metadata:
      name: example-argocd
      labels:
        example: repo
    spec:
      ...
      monitoring:
        enabled: true
      ...
    Copy to Clipboard Toggle word wrap

  2. Vérifier si une règle d'alerte est incluse dans la PrometheusRule créée par l'opérateur :

    Exemple de règle d'alerte

    apiVersion: monitoring.coreos.com/v1
    kind: PrometheusRule
    metadata:
      name: argocd-component-status-alert
      namespace: openshift-gitops
    spec:
      groups:
        - name: ArgoCDComponentStatus
          rules:
            ...
            - alert: ApplicationSetControllerNotReady 
    1
    
              annotations:
                message: >-
                  applicationSet controller deployment for Argo CD instance in
                  namespace "default" is not running
              expr: >-
                kube_statefulset_status_replicas{statefulset="openshift-gitops-application-controller statefulset",
                namespace="openshift-gitops"} !=
                kube_statefulset_status_replicas_ready{statefulset="openshift-gitops-application-controller statefulset",
                namespace="openshift-gitops"}
              for: 1m
              labels:
                severity: critical
    Copy to Clipboard Toggle word wrap

    1
    Règle d'alerte dans PrometheusRule qui vérifie si les charges de travail créées par les instances Argo CD s'exécutent comme prévu.

Vous pouvez désactiver la surveillance de la charge de travail pour des instances Argo CD spécifiques. La désactivation de la surveillance de la charge de travail supprime la PrometheusRule créée.

Procédure

  • Fixe la valeur du champ .spec.monitoring.enabled à false sur une instance de CD Argo donnée :

    Exemple de ressource personnalisée Argo CD

    apiVersion: argoproj.io/v1alpha1
    kind: ArgoCD
    metadata:
      name: example-argocd
      labels:
        example: repo
    spec:
      ...
      monitoring:
        enabled: false
      ...
    Copy to Clipboard Toggle word wrap

Vous pouvez utiliser les nœuds d'infrastructure pour éviter des coûts de facturation supplémentaires par rapport au nombre d'abonnements.

Vous pouvez utiliser OpenShift Container Platform pour exécuter certaines charges de travail sur les nœuds d'infrastructure installés par Red Hat OpenShift GitOps Operator. Cela comprend les charges de travail qui sont installées par Red Hat OpenShift GitOps Operator par défaut dans l'espace de noms openshift-gitops, y compris l'instance Argo CD par défaut dans cet espace de noms.

Note

Toutes les autres instances d'Argo CD installées dans les espaces de noms des utilisateurs ne peuvent pas être exécutées sur les nœuds d'infrastructure.

Vous pouvez déplacer les charges de travail par défaut installées par Red Hat OpenShift GitOps vers les nœuds d'infrastructure. Les charges de travail qui peuvent être déplacées sont les suivantes :

  • kam deployment
  • cluster deployment (service d'arrière-plan)
  • openshift-gitops-applicationset-controller deployment
  • openshift-gitops-dex-server deployment
  • openshift-gitops-redis deployment
  • openshift-gitops-redis-ha-haproxy deployment
  • openshift-gitops-repo-sever deployment
  • openshift-gitops-server deployment
  • openshift-gitops-application-controller statefulset
  • openshift-gitops-redis-server statefulset

Procédure

  1. Étiqueter les nœuds existants en tant qu'infrastructure en exécutant la commande suivante :

    $ oc label node <node-name> node-role.kubernetes.io/infra=
    Copy to Clipboard Toggle word wrap
  2. Modifiez la ressource personnalisée (CR) GitOpsService pour ajouter le sélecteur de nœud d'infrastructure :

    $ oc edit gitopsservice -n openshift-gitops
    Copy to Clipboard Toggle word wrap
  3. Dans le fichier CR GitOpsService, ajoutez le champ runOnInfra à la section spec et attribuez-lui la valeur true. Ce champ déplace les charges de travail de l'espace de noms openshift-gitops vers les nœuds d'infrastructure :

    apiVersion: pipelines.openshift.io/v1alpha1
    kind: GitopsService
    metadata:
      name: cluster
    spec:
      runOnInfra: true
    Copy to Clipboard Toggle word wrap
  4. Facultatif : Appliquez des taches et isolez les charges de travail sur les nœuds d'infrastructure et empêchez d'autres charges de travail de se programmer sur ces nœuds.

    $ oc adm taint nodes -l node-role.kubernetes.io/infra
    infra=reserved:NoSchedule infra=reserved:NoExecute
    Copy to Clipboard Toggle word wrap
  5. Facultatif : si vous appliquez des taches aux nœuds, vous pouvez ajouter des tolérances dans le CR GitOpsService:

    spec:
      runOnInfra: true
      tolerations:
      - effect: NoSchedule
        key: infra
        value: reserved
      - effect: NoExecute
        key: infra
        value: reserved
    Copy to Clipboard Toggle word wrap

Pour vérifier que les charges de travail sont planifiées sur les nœuds d'infrastructure dans l'espace de noms Red Hat OpenShift GitOps, cliquez sur n'importe quel nom de pod et assurez-vous que les adresses Node selector et Tolerations ont été ajoutées.

Note

Tout ajout manuel de Node selectors et Tolerations dans le CR Argo CD par défaut sera remplacé par la bascule et les tolérances dans le CR GitOpsService.

4.16. Exigences de dimensionnement pour l'opérateur GitOps

La page des exigences de dimensionnement affiche les exigences de dimensionnement pour l'installation de Red Hat OpenShift GitOps sur OpenShift Container Platform. Elle fournit également les détails de dimensionnement pour l'instance ArgoCD par défaut qui est instanciée par l'opérateur GitOps.

4.16.1. Exigences de dimensionnement pour GitOps

Red Hat OpenShift GitOps est un moyen déclaratif de mettre en œuvre le déploiement continu pour les applications cloud-natives. Grâce à GitOps, vous pouvez définir et configurer les besoins en CPU et en mémoire de votre application.

Chaque fois que vous installez l'Opérateur Red Hat OpenShift GitOps, les ressources de l'espace de noms sont installées dans les limites définies. Si l'installation par défaut ne définit aucune limite ou demande, l'Opérateur échoue dans l'espace de noms avec des quotas. Sans ressources suffisantes, le cluster ne peut pas planifier les pods liés à ArgoCD. Le tableau suivant détaille les demandes de ressources et les limites pour les charges de travail par défaut :

Expand
Charge de travailDemandes de l'unité centraleLimites de l'unité centraleDemandes de mémoireLimites de la mémoire

argocd-application-controller

1

2

1024M

2048M

applicationset-contrôleur

1

2

512M

1024M

serveur argocd

0.125

0.5

128M

256M

serveur argocd-repo

0.5

1

256M

1024M

argocd-redis

0.25

0.5

128M

256M

argocd-dex

0.25

0.5

128M

256M

HAProxy

0.25

0.5

128M

256M

En option, vous pouvez également utiliser la ressource personnalisée ArgoCD avec la commande oc pour voir les détails et les modifier :

oc edit argocd <name of argo cd> -n namespace
Copy to Clipboard Toggle word wrap

4.17. Résolution des problèmes dans Red Hat OpenShift GitOps

Lorsque vous travaillez avec Red Hat OpenShift GitOps, vous pouvez rencontrer des problèmes liés à la performance, à la surveillance, à la configuration et à d'autres aspects. Cette section vous aide à comprendre ces problèmes et fournit des solutions pour les résoudre.

Dans Red Hat OpenShift Container Platform, les nœuds sont mis à jour automatiquement par le biais de Red Hat OpenShift Machine Config Operator (MCO). Un Machine Config Operator (MCO) est une ressource personnalisée utilisée par le cluster pour gérer le cycle de vie complet de ses nœuds.

Lorsqu'une ressource MCO est créée ou mise à jour dans un cluster, le MCO récupère la mise à jour, effectue les changements nécessaires sur les nœuds sélectionnés et redémarre les nœuds de manière gracieuse en cordonant, drainant et redémarrant ces nœuds. Il s'occupe de tout, du noyau au kubelet.

Cependant, les interactions entre le MCO et le workflow GitOps peuvent introduire des problèmes de performance majeurs et d'autres comportements indésirables. Cette section montre comment faire en sorte que le MCO et l'outil d'orchestration Argo CD GitOps fonctionnent bien ensemble.

Lorsque vous utilisez un opérateur de configuration de machine dans le cadre d'un flux de travail GitOps, la séquence suivante peut produire des performances sous-optimales :

  • Argo CD lance un travail de synchronisation automatisé après un commit dans le dépôt Git qui contient les ressources de l'application.
  • Si Argo CD remarque une configuration de machine nouvelle ou mise à jour pendant que l'opération de synchronisation est en cours, MCO prend en compte la modification de la configuration de la machine et commence à redémarrer les nœuds pour appliquer la modification.
  • Si un nœud de redémarrage dans le cluster contient le contrôleur d'application Argo CD, le contrôleur d'application se termine et la synchronisation de l'application est interrompue.

Comme le MCO redémarre les nœuds dans un ordre séquentiel et que les charges de travail du CD Argo peuvent être reprogrammées à chaque redémarrage, la synchronisation peut prendre un certain temps avant d'être terminée. Il en résulte un comportement indéfini jusqu'à ce que le MCO ait redémarré tous les nœuds concernés par les configurations de machines dans le cadre de la synchronisation.

Chapitre 5. Jenkins

5.1. Configuration des images Jenkins

OpenShift Container Platform fournit une image de conteneur pour exécuter Jenkins. Cette image fournit une instance de serveur Jenkins, qui peut être utilisée pour mettre en place un flux de base pour les tests, l'intégration et la livraison en continu.

L'image est basée sur les images de base universelles de Red Hat (UBI).

OpenShift Container Platform suit la version LTS de Jenkins. OpenShift Container Platform fournit une image qui contient Jenkins 2.x.

Les images Jenkins d'OpenShift Container Platform sont disponibles sur Quay.io ou registry.redhat.io.

Par exemple :

$ podman pull registry.redhat.io/ocp-tools-4/jenkins-rhel8:<image_tag>
Copy to Clipboard Toggle word wrap

Pour utiliser ces images, vous pouvez soit y accéder directement à partir de ces registres, soit les pousser dans votre registre d'images de conteneurs OpenShift Container Platform. En outre, vous pouvez créer un flux d'images qui pointe vers l'image, soit dans votre registre d'images de conteneurs, soit à l'emplacement externe. Vos ressources OpenShift Container Platform peuvent alors référencer le flux d'images.

Mais pour des raisons pratiques, OpenShift Container Platform fournit des flux d'images dans l'espace de noms openshift pour l'image de base de Jenkins ainsi que pour les images d'exemple d'agent fournies pour l'intégration d'OpenShift Container Platform avec Jenkins.

5.1.1. Configuration et personnalisation

Vous pouvez gérer l'authentification Jenkins de deux manières :

  • L'authentification OAuth de OpenShift Container Platform fournie par le plugin OpenShift Container Platform Login.
  • Authentification standard fournie par Jenkins.
5.1.1.1. OpenShift Container Platform Authentification OAuth

L'authentification OAuth est activée en configurant les options sur le panneau Configure Global Security dans l'interface utilisateur Jenkins, ou en définissant la variable d'environnement OPENSHIFT_ENABLE_OAUTH sur Jenkins Deployment configuration à une valeur autre que false. Cela active le plugin OpenShift Container Platform Login, qui récupère les informations de configuration à partir des données de pod ou en interagissant avec le serveur API OpenShift Container Platform.

Les informations d'identification valides sont contrôlées par le fournisseur d'identité d'OpenShift Container Platform.

Jenkins prend en charge l'accès par navigateur et hors navigateur.

Les utilisateurs valides sont automatiquement ajoutés à la matrice d'autorisation Jenkins lors de la connexion, où les rôles OpenShift Container Platform dictent les permissions Jenkins spécifiques que les utilisateurs ont. Les rôles utilisés par défaut sont les rôles prédéfinis admin, edit, et view. Le plugin de connexion exécute des requêtes self-SAR contre ces rôles dans le projet ou l'espace de noms dans lequel Jenkins est exécuté.

Les utilisateurs ayant le rôle admin disposent des autorisations traditionnelles des utilisateurs administratifs de Jenkins. Les utilisateurs ayant le rôle edit ou view ont progressivement moins d'autorisations.

Les rôles par défaut de OpenShift Container Platform admin, edit, et view et les permissions Jenkins attribuées à ces rôles dans l'instance Jenkins sont configurables.

Lorsque Jenkins est exécuté dans un pod OpenShift Container Platform, le plugin de connexion recherche une carte de configuration nommée openshift-jenkins-login-plugin-config dans l'espace de noms dans lequel Jenkins est exécuté.

Si ce plugin trouve et peut lire cette carte de configuration, vous pouvez définir le rôle pour les mappages de permissions Jenkins. Spécifiquement :

  • Le plugin de connexion traite les paires de clés et de valeurs dans la carte de configuration comme des mappings de permission Jenkins vers des mappings de rôles OpenShift Container Platform.
  • La clé est l'identifiant court du groupe de permission Jenkins et l'identifiant court de la permission Jenkins, ces deux éléments étant séparés par un trait d'union.
  • Si vous souhaitez ajouter l'autorisation Overall Jenkins Administer à un rôle OpenShift Container Platform, la clé doit être Overall-Administer.
  • Pour avoir une idée des groupes de permissions et des ID de permissions disponibles, allez sur la page d'autorisation de la matrice dans la console Jenkins et les ID des groupes et des permissions individuelles dans le tableau qu'ils fournissent.
  • La valeur de la paire clé/valeur est la liste des rôles OpenShift Container Platform auxquels la permission doit s'appliquer, chaque rôle étant séparé par une virgule.
  • Si vous souhaitez ajouter l'autorisation Overall Jenkins Administer aux rôles par défaut admin et edit, ainsi qu'à un nouveau rôle Jenkins que vous avez créé, la valeur de la clé Overall-Administer sera admin,edit,jenkins.
Note

L'utilisateur admin qui est pré-rempli dans l'image Jenkins d'OpenShift Container Platform avec des privilèges administratifs ne reçoit pas ces privilèges lorsque OpenShift Container Platform OAuth est utilisé. Pour accorder ces permissions, l'administrateur du cluster OpenShift Container Platform doit explicitement définir cet utilisateur dans le fournisseur d'identité OpenShift Container Platform et lui attribuer le rôle admin.

Les autorisations des utilisateurs Jenkins qui sont stockées peuvent être modifiées après la création initiale des utilisateurs. Le plugin OpenShift Container Platform Login interroge le serveur API OpenShift Container Platform pour les permissions et met à jour les permissions stockées dans Jenkins pour chaque utilisateur avec les permissions récupérées d'OpenShift Container Platform. Si l'interface utilisateur Jenkins est utilisée pour mettre à jour les permissions d'un utilisateur Jenkins, les changements de permissions sont écrasés la prochaine fois que le plugin interroge OpenShift Container Platform.

Vous pouvez contrôler la fréquence de l'interrogation à l'aide de la variable d'environnement OPENSHIFT_PERMISSIONS_POLL_INTERVAL. L'intervalle d'interrogation par défaut est de cinq minutes.

La manière la plus simple de créer un nouveau service Jenkins utilisant l'authentification OAuth est d'utiliser un modèle.

5.1.1.2. Authentification Jenkins

L'authentification Jenkins est utilisée par défaut si l'image est exécutée directement, sans utiliser de modèle.

Lors du premier démarrage de Jenkins, la configuration est créée avec l'utilisateur et le mot de passe de l'administrateur. Les informations d'identification de l'utilisateur par défaut sont admin et password. Configurez le mot de passe par défaut en définissant la variable d'environnement JENKINS_PASSWORD lorsque vous utilisez, et uniquement lorsque vous utilisez, l'authentification standard de Jenkins.

Procédure

  • Créez une application Jenkins qui utilise l'authentification Jenkins standard :

    $ oc new-app -e \
        JENKINS_PASSWORD=<password> \
        ocp-tools-4/jenkins-rhel8
    Copy to Clipboard Toggle word wrap

5.1.2. Variables d'environnement Jenkins

Le serveur Jenkins peut être configuré avec les variables d'environnement suivantes :

Expand
VariableDéfinitionExemples de valeurs et de réglages

OPENSHIFT_ENABLE_OAUTH

Détermine si le plugin OpenShift Container Platform Login gère l'authentification lors de la connexion à Jenkins. Pour l'activer, réglez-le à true.

Par défaut : false

JENKINS_PASSWORD

Le mot de passe de l'utilisateur admin lors de l'utilisation de l'authentification standard de Jenkins. Ne s'applique pas lorsque OPENSHIFT_ENABLE_OAUTH est défini sur true.

Par défaut : password

JAVA_MAX_HEAP_PARAM, CONTAINER_HEAP_PERCENT, JENKINS_MAX_HEAP_UPPER_BOUND_MB

Ces valeurs contrôlent la taille maximale du tas de la JVM Jenkins. Si JAVA_MAX_HEAP_PARAM est défini, sa valeur est prioritaire. Sinon, la taille maximale du tas est calculée dynamiquement comme CONTAINER_HEAP_PERCENT de la limite de mémoire du conteneur, éventuellement plafonnée à JENKINS_MAX_HEAP_UPPER_BOUND_MB MiB.

Par défaut, la taille maximale du tas de la JVM Jenkins est fixée à 50 % de la limite de mémoire du conteneur, sans plafond.

JAVA_MAX_HEAP_PARAM exemple de réglage : -Xmx512m

CONTAINER_HEAP_PERCENT valeur par défaut : 0.5, ou 50 %

JENKINS_MAX_HEAP_UPPER_BOUND_MB exemple de réglage : 512 MiB

JAVA_INITIAL_HEAP_PARAM, CONTAINER_INITIAL_PERCENT

Ces valeurs contrôlent la taille initiale du tas de la JVM Jenkins. Si JAVA_INITIAL_HEAP_PARAM est défini, sa valeur est prioritaire. Sinon, la taille initiale du tas est calculée dynamiquement comme CONTAINER_INITIAL_PERCENT de la taille maximale du tas calculée dynamiquement.

Par défaut, la JVM définit la taille initiale du tas.

JAVA_INITIAL_HEAP_PARAM exemple de réglage : -Xms32m

CONTAINER_INITIAL_PERCENT exemple de réglage : 0.1 ou 10%

CONTAINER_CORE_LIMIT

S'il est défini, il spécifie un nombre entier de cœurs utilisés pour dimensionner le nombre de threads internes de la JVM.

Exemple de réglage : 2

JAVA_TOOL_OPTIONS

Spécifie les options à appliquer à toutes les JVM s'exécutant dans ce conteneur. Il n'est pas recommandé de remplacer cette valeur.

Par défaut : -XX: UnlockExperimentalVMOptions -XX: UseCGroupMemoryLimitForHeap -Dsun.zip.disableMemoryMapping=true

JAVA_GC_OPTS

Spécifie les paramètres de collecte des déchets de la JVM Jenkins. Il n'est pas recommandé de remplacer cette valeur.

Par défaut : -XX: UseParallelGC -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90

JENKINS_JAVA_OVERRIDES

Spécifie des options supplémentaires pour la JVM Jenkins. Ces options sont ajoutées à toutes les autres options, y compris les options Java ci-dessus, et peuvent être utilisées pour les remplacer si nécessaire. Séparez chaque option supplémentaire par un espace ; si une option contient des caractères d'espacement, échappez-les avec une barre oblique inverse.

Exemples de paramètres : -Dfoo -Dbar; -Dfoo=first\ value -Dbar=second\ value.

JENKINS_OPTS

Spécifie les arguments pour Jenkins.

 

INSTALL_PLUGINS

Spécifie les plugins Jenkins supplémentaires à installer lors de la première exécution du conteneur ou lorsque OVERRIDE_PV_PLUGINS_WITH_IMAGE_PLUGINS est défini sur true. Les plugins sont spécifiés sous la forme d'une liste de paires nom:version délimitées par des virgules.

Exemple de réglage : git:3.7.0,subversion:2.10.2.

OPENSHIFT_PERMISSIONS_POLL_INTERVAL

Spécifie l'intervalle en millisecondes pendant lequel le plugin OpenShift Container Platform Login interroge OpenShift Container Platform sur les permissions associées à chaque utilisateur défini dans Jenkins.

Valeur par défaut : 300000 - 5 minutes

OVERRIDE_PV_CONFIG_WITH_IMAGE_CONFIG

Lors de l'exécution de cette image avec un volume persistant (PV) OpenShift Container Platform pour le répertoire de configuration Jenkins, le transfert de la configuration de l'image vers le PV n'est effectué que lors du premier démarrage de l'image, car le PV est attribué lors de la création de la réclamation de volume persistant (PVC). Si vous créez une image personnalisée qui étend cette image et met à jour la configuration dans l'image personnalisée après le démarrage initial, la configuration n'est pas copiée à moins que vous ne définissiez cette variable d'environnement à true.

Par défaut : false

OVERRIDE_PV_PLUGINS_WITH_IMAGE_PLUGINS

Lors de l'exécution de cette image avec un PV OpenShift Container Platform pour le répertoire de configuration Jenkins, le transfert des plugins de l'image vers le PV n'est effectué que lors du premier démarrage de l'image car le PV est attribué lors de la création du PVC. Si vous créez une image personnalisée qui étend cette image et met à jour les plugins dans l'image personnalisée après le démarrage initial, les plugins ne sont pas copiés à moins que vous ne définissiez cette variable d'environnement sur true.

Par défaut : false

ENABLE_FATAL_ERROR_LOG_FILE

Lors de l'exécution de cette image avec un PVC OpenShift Container Platform pour le répertoire de configuration Jenkins, cette variable d'environnement permet au fichier journal des erreurs fatales de persister lorsqu'une erreur fatale se produit. Le fichier d'erreurs fatales est enregistré à l'adresse /var/lib/jenkins/logs.

Par défaut : false

AGENT_BASE_IMAGE

La définition de cette valeur remplace l'image utilisée pour le conteneur jnlp dans les modèles de pods du plugin Kubernetes fournis avec cette image. Sinon, c'est l'image du flux d'images jenkins-agent-base-rhel8:latest dans l'espace de noms openshift qui est utilisée.

Par défaut : image-registry.openshift-image-registry.svc:5000/openshift/jenkins-agent-base-rhel8:latest

JAVA_BUILDER_IMAGE

La définition de cette valeur remplace l'image utilisée pour le conteneur java-builder dans les modèles de pods du plugin Kubernetes java-builder fournis avec cette image. Sinon, c'est l'image du flux d'images java:latest dans l'espace de noms openshift qui est utilisée.

Par défaut : image-registry.openshift-image-registry.svc:5000/openshift/java:latest

JAVA_FIPS_OPTIONS

La définition de cette valeur permet de contrôler le fonctionnement de la JVM lorsqu'elle est exécutée sur un nœud FIPS. Pour plus d'informations, voir Configurer OpenJDK 11 en mode FIPS.

Par défaut : -Dcom.redhat.fips=false

5.1.3. Fournir à Jenkins un accès à l'ensemble des projets

Si vous voulez exécuter Jenkins ailleurs que dans votre projet, vous devez fournir un jeton d'accès à Jenkins pour qu'il puisse accéder à votre projet.

Procédure

  1. Identifiez le secret du compte de service qui dispose des autorisations appropriées pour accéder au projet auquel Jenkins doit accéder :

    $ oc describe serviceaccount jenkins
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    Name:       default
    Labels:     <none>
    Secrets:    {  jenkins-token-uyswp    }
                {  jenkins-dockercfg-xcr3d    }
    Tokens:     jenkins-token-izv1u
                jenkins-token-uyswp
    Copy to Clipboard Toggle word wrap

    Dans ce cas, le secret est nommé jenkins-token-uyswp.

  2. Récupérer le jeton du secret :

    $ oc describe secret <nom du secret ci-dessus>
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    Name:       jenkins-token-uyswp
    Labels:     <none>
    Annotations:    kubernetes.io/service-account.name=jenkins,kubernetes.io/service-account.uid=32f5b661-2a8f-11e5-9528-3c970e3bf0b7
    Type:   kubernetes.io/service-account-token
    Data
    ====
    ca.crt: 1066 bytes
    token:  eyJhbGc..<content cut>....wRA
    Copy to Clipboard Toggle word wrap

    Le paramètre token contient la valeur du token dont Jenkins a besoin pour accéder au projet.

5.1.4. Points de montage inter-volumes Jenkins

L'image Jenkins peut être exécutée avec des volumes montés pour permettre un stockage persistant de la configuration :

  • /var/lib/jenkins est le répertoire de données dans lequel Jenkins stocke les fichiers de configuration, y compris les définitions de tâches.

Pour personnaliser l'image Jenkins officielle d'OpenShift Container Platform, vous pouvez utiliser l'image en tant que source-to-image (S2I).

Vous pouvez utiliser S2I pour copier vos définitions de tâches Jenkins personnalisées, ajouter des plugins supplémentaires ou remplacer le fichier config.xml fourni par votre propre configuration.

Pour inclure vos modifications dans l'image Jenkins, vous devez disposer d'un dépôt Git avec la structure de répertoire suivante :

plugins
Ce répertoire contient les plugins binaires Jenkins que vous souhaitez copier dans Jenkins.
plugins.txt
Ce fichier liste les plugins que vous souhaitez installer en utilisant la syntaxe suivante :
pluginId:pluginVersion
Copy to Clipboard Toggle word wrap
configuration/jobs
Ce répertoire contient les définitions des tâches de Jenkins.
configuration/config.xml
Ce fichier contient votre configuration Jenkins personnalisée.

Le contenu du répertoire configuration/ est copié dans le répertoire /var/lib/jenkins/, de sorte que vous pouvez également y inclure des fichiers supplémentaires, tels que credentials.xml.

L'exemple de configuration de construction personnalise l'image Jenkins dans OpenShift Container Platform

apiVersion: build.openshift.io/v1
kind: BuildConfig
metadata:
  name: custom-jenkins-build
spec:
  source:                       
1

    git:
      uri: https://github.com/custom/repository
    type: Git
  strategy:                     
2

    sourceStrategy:
      from:
        kind: ImageStreamTag
        name: jenkins:2
        namespace: openshift
    type: Source
  output:                       
3

    to:
      kind: ImageStreamTag
      name: custom-jenkins:latest
Copy to Clipboard Toggle word wrap

1
Le paramètre source définit le dépôt Git source avec la disposition décrite ci-dessus.
2
Le paramètre strategy définit l'image originale de Jenkins à utiliser comme image source pour la construction.
3
Le paramètre output définit l'image Jenkins personnalisée résultante que vous pouvez utiliser dans les configurations de déploiement à la place de l'image Jenkins officielle.

5.1.6. Configuration du plugin Jenkins Kubernetes

L'image OpenShift Jenkins inclut le plugin Kubernetes préinstallé pour Jenkins afin que les agents Jenkins puissent être provisionnés dynamiquement sur plusieurs hôtes de conteneurs en utilisant Kubernetes et OpenShift Container Platform.

Pour utiliser le plugin Kubernetes, OpenShift Container Platform fournit une image OpenShift Agent Base qui peut être utilisée comme agent Jenkins.

Important

OpenShift Container Platform 4.11 déplace les images OpenShift Jenkins et OpenShift Agent Base vers le dépôt ocp-tools-4 à l'adresse registry.redhat.io afin que Red Hat puisse produire et mettre à jour les images en dehors du cycle de vie d'OpenShift Container Platform. Auparavant, ces images se trouvaient dans la charge utile d'installation d'OpenShift Container Platform et dans le dépôt openshift4 à l'adresse registry.redhat.io.

Les images OpenShift Jenkins Maven et NodeJS Agent ont été supprimées de la charge utile OpenShift Container Platform 4.11. Red Hat ne produit plus ces images et elles ne sont pas disponibles dans le dépôt ocp-tools-4 à l'adresse registry.redhat.io. Red Hat maintient les versions 4.10 et antérieures de ces images pour toutes les corrections de bogues importantes ou les CVE de sécurité, en suivant la politique de cycle de vie d'OpenShift Container Platform.

Pour plus d'informations, voir le lien "Changements importants pour OpenShift Jenkins images" dans la section suivante "Ressources supplémentaires".

Les images des agents Maven et Node.js sont automatiquement configurées en tant qu'images de modèle de pod Kubernetes dans la configuration d'image Jenkins de la plateforme OpenShift Container pour le plugin Kubernetes. Cette configuration comprend des étiquettes pour chaque image que vous pouvez appliquer à tous vos travaux Jenkins sous leur paramètre Restrict where this project can be run. Si le label est appliqué, les travaux s'exécutent sous un pod OpenShift Container Platform exécutant l'image d'agent correspondante.

Important

Dans OpenShift Container Platform 4.10 et plus, le modèle recommandé pour exécuter des agents Jenkins à l'aide du plugin Kubernetes est d'utiliser des modèles de pods avec les conteneurs jnlp et sidecar. Le conteneur jnlp utilise l'image de l'agent Jenkins Base d'OpenShift Container Platform pour faciliter le lancement d'un pod séparé pour votre construction. L'image du conteneur sidecar contient les outils nécessaires pour construire dans une langue particulière au sein du pod séparé qui a été lancé. De nombreuses images de conteneurs du Red Hat Container Catalog sont référencées dans les flux d'images d'exemple dans l'espace de noms openshift. L'image Jenkins d'OpenShift Container Platform possède un modèle de pod nommé java-build avec des conteneurs sidecar qui démontrent cette approche. Ce modèle de pod utilise la dernière version de Java fournie par le flux d'images java dans l'espace de noms openshift.

L'image Jenkins permet également l'auto-découverte et l'auto-configuration d'images d'agents supplémentaires pour le plugin Kubernetes.

Avec le plugin de synchronisation OpenShift Container Platform, au démarrage de Jenkins, l'image Jenkins recherche dans le projet qu'elle exécute, ou dans les projets listés dans la configuration du plugin, les éléments suivants :

  • Flux d'images dont l'étiquette role est définie sur jenkins-agent.
  • Balises de flux d'images avec l'annotation role fixée à jenkins-agent.
  • Config maps with the role label set to jenkins-agent.

Lorsque l'image Jenkins trouve un flux d'images avec l'étiquette appropriée, ou une balise de flux d'images avec l'annotation appropriée, elle génère la configuration du plugin Kubernetes correspondant. De cette façon, vous pouvez affecter vos travaux Jenkins à l'exécution d'un pod utilisant l'image de conteneur fournie par le flux d'images.

Les références de nom et d'image du flux d'images ou de la balise de flux d'images sont mises en correspondance avec les champs de nom et d'image dans le modèle de pod du plugin Kubernetes. Vous pouvez contrôler le champ label du modèle de pod de plugin Kubernetes en définissant une annotation sur l'objet flux d'images ou balise de flux d'images avec la clé agent-label. Sinon, le nom est utilisé comme étiquette.

Note

Ne vous connectez pas à la console Jenkins pour modifier la configuration du modèle de pod. Si vous le faites après la création du modèle de pod, et que le plugin OpenShift Container Platform Sync détecte que l'image associée au flux d'images ou à la balise de flux d'images a changé, il remplace le modèle de pod et écrase ces changements de configuration. Vous ne pouvez pas fusionner une nouvelle configuration avec la configuration existante.

Envisagez l'approche de la carte de configuration si vous avez des besoins de configuration plus complexes.

Lorsqu'elle trouve une carte de configuration avec l'étiquette appropriée, l'image Jenkins suppose que toutes les valeurs de la charge utile de données clé-valeur de la carte de configuration contiennent un langage de balisage extensible (XML) cohérent avec le format de configuration pour Jenkins et les modèles de pods du plugin Kubernetes. L'un des principaux avantages des cartes de configuration par rapport aux flux d'images et aux balises de flux d'images est que vous pouvez contrôler tous les paramètres du modèle de pod plugin Kubernetes.

Exemple de carte de configuration pour jenkins-agent

kind: ConfigMap
apiVersion: v1
metadata:
  name: jenkins-agent
  labels:
    role: jenkins-agent
data:
  template1: |-
    <org.csanchez.jenkins.plugins.kubernetes.PodTemplate>
      <inheritFrom></inheritFrom>
      <name>template1</name>
      <instanceCap>2147483647</instanceCap>
      <idleMinutes>0</idleMinutes>
      <label>template1</label>
      <serviceAccount>jenkins</serviceAccount>
      <nodeSelector></nodeSelector>
      <volumes/>
      <containers>
        <org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate>
          <name>jnlp</name>
          <image>openshift/jenkins-agent-maven-35-centos7:v3.10</image>
          <privileged>false</privileged>
          <alwaysPullImage>true</alwaysPullImage>
          <workingDir>/tmp</workingDir>
          <command></command>
          <args>${computer.jnlpmac} ${computer.name}</args>
          <ttyEnabled>false</ttyEnabled>
          <resourceRequestCpu></resourceRequestCpu>
          <resourceRequestMemory></resourceRequestMemory>
          <resourceLimitCpu></resourceLimitCpu>
          <resourceLimitMemory></resourceLimitMemory>
          <envVars/>
        </org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate>
      </containers>
      <envVars/>
      <annotations/>
      <imagePullSecrets/>
      <nodeProperties/>
    </org.csanchez.jenkins.plugins.kubernetes.PodTemplate>
Copy to Clipboard Toggle word wrap

L'exemple suivant montre deux conteneurs qui référencent des flux d'images dans l'espace de noms openshift. L'un des conteneurs gère le contrat JNLP pour lancer des pods en tant qu'agents Jenkins. L'autre conteneur utilise une image contenant des outils de construction de code dans un langage de codage particulier :

kind: ConfigMap
apiVersion: v1
metadata:
  name: jenkins-agent
  labels:
    role: jenkins-agent
data:
  template2: |-
        <org.csanchez.jenkins.plugins.kubernetes.PodTemplate>
          <inheritFrom></inheritFrom>
          <name>template2</name>
          <instanceCap>2147483647</instanceCap>
          <idleMinutes>0</idleMinutes>
          <label>template2</label>
          <serviceAccount>jenkins</serviceAccount>
          <nodeSelector></nodeSelector>
          <volumes/>
          <containers>
            <org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate>
              <name>jnlp</name>
              <image>image-registry.openshift-image-registry.svc:5000/openshift/jenkins-agent-base-rhel8:latest</image>
              <privileged>false</privileged>
              <alwaysPullImage>true</alwaysPullImage>
              <workingDir>/home/jenkins/agent</workingDir>
              <command></command>
              <args>\$(JENKINS_SECRET) \$(JENKINS_NAME)</args>
              <ttyEnabled>false</ttyEnabled>
              <resourceRequestCpu></resourceRequestCpu>
              <resourceRequestMemory></resourceRequestMemory>
              <resourceLimitCpu></resourceLimitCpu>
              <resourceLimitMemory></resourceLimitMemory>
              <envVars/>
            </org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate>
            <org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate>
              <name>java</name>
              <image>image-registry.openshift-image-registry.svc:5000/openshift/java:latest</image>
              <privileged>false</privileged>
              <alwaysPullImage>true</alwaysPullImage>
              <workingDir>/home/jenkins/agent</workingDir>
              <command>cat</command>
              <args></args>
              <ttyEnabled>true</ttyEnabled>
              <resourceRequestCpu></resourceRequestCpu>
              <resourceRequestMemory></resourceRequestMemory>
              <resourceLimitCpu></resourceLimitCpu>
              <resourceLimitMemory></resourceLimitMemory>
              <envVars/>
            </org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate>
          </containers>
          <envVars/>
          <annotations/>
          <imagePullSecrets/>
          <nodeProperties/>
        </org.csanchez.jenkins.plugins.kubernetes.PodTemplate>
Copy to Clipboard Toggle word wrap
Note

Ne vous connectez pas à la console Jenkins pour modifier la configuration du modèle de pod. Si vous le faites après la création du modèle de pod, et que le plugin OpenShift Container Platform Sync détecte que l'image associée au flux d'images ou à la balise de flux d'images a changé, il remplace le modèle de pod et écrase ces changements de configuration. Vous ne pouvez pas fusionner une nouvelle configuration avec la configuration existante.

Envisagez l'approche de la carte de configuration si vous avez des besoins de configuration plus complexes.

Une fois installé, le plugin OpenShift Container Platform Sync surveille le serveur API d'OpenShift Container Platform pour les mises à jour des flux d'images, des balises de flux d'images et des cartes de configuration et ajuste la configuration du plugin Kubernetes.

Les règles suivantes s'appliquent :

  • La suppression de l'étiquette ou de l'annotation de la carte de configuration, du flux d'images ou de la balise de flux d'images supprime toute PodTemplate existante de la configuration du plugin Kubernetes.
  • Si ces objets sont supprimés, la configuration correspondante est supprimée du plugin Kubernetes.
  • Si vous créez des objets ConfigMap, ImageStream, ou ImageStreamTag correctement étiquetés ou annotés, ou si vous ajoutez des étiquettes après leur création initiale, cela entraîne la création d'un PodTemplate dans la configuration de Kubernetes-plugin.
  • Dans le cas du formulaire PodTemplate by config map, les modifications apportées aux données de la config map pour PodTemplate sont appliquées aux paramètres de PodTemplate dans la configuration du plugin Kubernetes. Les modifications remplacent également toutes les modifications apportées à PodTemplate via l'interface utilisateur Jenkins entre les modifications apportées à la carte de configuration.

Pour utiliser une image de conteneur comme agent Jenkins, l'image doit exécuter l'agent comme point d'entrée. Pour plus de détails, voir la documentation officielle de Jenkins.

5.1.7. Permissions Jenkins

Si, dans la carte de configuration, l'élément <serviceAccount> du modèle XML de pod est le compte de service OpenShift Container Platform utilisé pour le pod résultant, les informations d'identification du compte de service sont montées dans le pod. Les permissions sont associées au compte de service et contrôlent quelles opérations contre le maître OpenShift Container Platform sont autorisées à partir du pod.

Considérons le scénario suivant avec des comptes de service utilisés pour le pod, qui est lancé par le plugin Kubernetes qui s'exécute dans l'image Jenkins d'OpenShift Container Platform.

Si vous utilisez le modèle d'exemple pour Jenkins fourni par OpenShift Container Platform, le compte de service jenkins est défini avec le rôle edit pour le projet dans lequel Jenkins s'exécute, et le pod Jenkins maître a ce compte de service monté.

Les deux modèles de pods Maven et NodeJS par défaut qui sont injectés dans la configuration Jenkins sont également configurés pour utiliser le même compte de service que le maître Jenkins.

  • Tous les modèles de pods qui sont automatiquement découverts par le plugin de synchronisation d'OpenShift Container Platform parce que leurs flux d'images ou leurs balises de flux d'images ont l'étiquette ou les annotations requises sont configurés pour utiliser le compte de service principal Jenkins comme compte de service.
  • Pour les autres façons de fournir une définition de modèle de pod dans Jenkins et le plugin Kubernetes, vous devez spécifier explicitement le compte de service à utiliser. Ces autres moyens incluent la console Jenkins, le pipeline DSL podTemplate fourni par le plugin Kubernetes, ou l'étiquetage d'une carte de configuration dont les données sont la configuration XML d'un modèle de pod.
  • Si vous ne spécifiez pas de valeur pour le compte de service, le compte de service default est utilisé.
  • Assurez-vous que le compte de service utilisé a les permissions, les rôles, etc. nécessaires définis dans OpenShift Container Platform pour manipuler les projets que vous choisissez de manipuler à l'intérieur du pod.

5.1.8. Création d'un service Jenkins à partir d'un modèle

Les modèles fournissent des champs de paramètres pour définir toutes les variables d'environnement avec des valeurs par défaut prédéfinies. OpenShift Container Platform fournit des modèles pour faciliter la création d'un nouveau service Jenkins. Les modèles Jenkins doivent être enregistrés dans le projet par défaut openshift par votre administrateur de cluster lors de la configuration initiale du cluster.

Les deux modèles disponibles définissent tous deux une configuration de déploiement et un service. Les modèles diffèrent par leur stratégie de stockage, qui détermine si le contenu de Jenkins persiste après le redémarrage d'un pod.

Note

Un pod peut être redémarré lorsqu'il est déplacé vers un autre nœud ou lorsqu'une mise à jour de la configuration de déploiement déclenche un redéploiement.

  • jenkins-ephemeral utilise un stockage éphémère. Au redémarrage du pod, toutes les données sont perdues. Ce modèle n'est utile que pour le développement ou les tests.
  • jenkins-persistent utilise un volume persistant (PV). Les données survivent à un redémarrage du pod.

Pour utiliser un magasin PV, l'administrateur du cluster doit définir un pool PV dans le déploiement d'OpenShift Container Platform.

Après avoir sélectionné le modèle que vous souhaitez, vous devez l'instancier pour pouvoir utiliser Jenkins.

Procédure

  1. Créez une nouvelle application Jenkins en utilisant l'une des méthodes suivantes :

    • UN PV :

      $ oc new-app jenkins-persistent
      Copy to Clipboard Toggle word wrap
    • Ou un volume de type emptyDir dont la configuration ne persiste pas lors des redémarrages de pods :

      $ oc new-app jenkins-ephemeral
      Copy to Clipboard Toggle word wrap

Avec les deux modèles, vous pouvez lancer oc describe sur eux pour voir tous les paramètres disponibles pour la surcharge.

Par exemple :

$ oc describe jenkins-ephemeral
Copy to Clipboard Toggle word wrap

5.1.9. Utilisation du plugin Jenkins Kubernetes

Dans l'exemple suivant, l'objet openshift-jee-sample BuildConfig provoque le provisionnement dynamique d'un pod d'agent Maven Jenkins. Le pod clone du code source Java, construit un fichier WAR et provoque l'exécution d'un second BuildConfig, openshift-jee-sample-docker. Le second BuildConfig place le nouveau fichier WAR dans une image de conteneur.

Important

OpenShift Container Platform 4.11 a supprimé les images OpenShift Jenkins Maven et NodeJS Agent de son payload. Red Hat ne produit plus ces images et elles ne sont pas disponibles dans le dépôt ocp-tools-4 à l'adresse registry.redhat.io. Red Hat maintient les versions 4.10 et antérieures de ces images pour toutes les corrections de bogues importantes ou les CVE de sécurité, en suivant la politique de cycle de vie de OpenShift Container Platform.

Pour plus d'informations, voir le lien "Changements importants pour OpenShift Jenkins images" dans la section suivante "Ressources supplémentaires".

Exemple de BuildConfig qui utilise le plugin Jenkins Kubernetes

kind: List
apiVersion: v1
items:
- kind: ImageStream
  apiVersion: image.openshift.io/v1
  metadata:
    name: openshift-jee-sample
- kind: BuildConfig
  apiVersion: build.openshift.io/v1
  metadata:
    name: openshift-jee-sample-docker
  spec:
    strategy:
      type: Docker
    source:
      type: Docker
      dockerfile: |-
        FROM openshift/wildfly-101-centos7:latest
        COPY ROOT.war /wildfly/standalone/deployments/ROOT.war
        CMD $STI_SCRIPTS_PATH/run
      binary:
        asFile: ROOT.war
    output:
      to:
        kind: ImageStreamTag
        name: openshift-jee-sample:latest
- kind: BuildConfig
  apiVersion: build.openshift.io/v1
  metadata:
    name: openshift-jee-sample
  spec:
    strategy:
      type: JenkinsPipeline
      jenkinsPipelineStrategy:
        jenkinsfile: |-
          node("maven") {
            sh "git clone https://github.com/openshift/openshift-jee-sample.git ."
            sh "mvn -B -Popenshift package"
            sh "oc start-build -F openshift-jee-sample-docker --from-file=target/ROOT.war"
          }
    triggers:
    - type: ConfigChange
Copy to Clipboard Toggle word wrap

Il est également possible d'outrepasser la spécification du pod de l'agent Jenkins créé dynamiquement. L'exemple suivant est une modification de l'exemple précédent, qui surcharge la mémoire du conteneur et spécifie une variable d'environnement.

Exemple de BuildConfig qui utilise le plugin Jenkins Kubernetes, en spécifiant la limite de mémoire et la variable d'environnement

kind: BuildConfig
apiVersion: build.openshift.io/v1
metadata:
  name: openshift-jee-sample
spec:
  strategy:
    type: JenkinsPipeline
    jenkinsPipelineStrategy:
      jenkinsfile: |-
        podTemplate(label: "mypod", 
1

                    cloud: "openshift", 
2

                    inheritFrom: "maven", 
3

                    containers: [
            containerTemplate(name: "jnlp", 
4

                              image: "openshift/jenkins-agent-maven-35-centos7:v3.10", 
5

                              resourceRequestMemory: "512Mi", 
6

                              resourceLimitMemory: "512Mi", 
7

                              envVars: [
              envVar(key: "CONTAINER_HEAP_PERCENT", value: "0.25") 
8

            ])
          ]) {
          node("mypod") { 
9

            sh "git clone https://github.com/openshift/openshift-jee-sample.git ."
            sh "mvn -B -Popenshift package"
            sh "oc start-build -F openshift-jee-sample-docker --from-file=target/ROOT.war"
          }
        }
  triggers:
  - type: ConfigChange
Copy to Clipboard Toggle word wrap

1
Un nouveau modèle de pod appelé mypod est défini dynamiquement. Le nom du nouveau modèle de pod est référencé dans la strophe du nœud.
2
La valeur cloud doit être réglée sur openshift.
3
Le nouveau modèle de pod peut hériter sa configuration d'un modèle de pod existant. Dans ce cas, il hérite du modèle de pod Maven qui est prédéfini par OpenShift Container Platform.
4
Cet exemple remplace les valeurs du conteneur préexistant et doit être spécifié par son nom. Toutes les images de l'agent Jenkins livrées avec OpenShift Container Platform utilisent le nom de conteneur jnlp.
5
Spécifiez à nouveau le nom de l'image du conteneur. Il s'agit d'un problème connu.
6
Une demande de mémoire de 512 Mi est spécifiée.
7
Une limite de mémoire de 512 Mi est spécifiée.
8
Une variable d'environnement CONTAINER_HEAP_PERCENT, avec la valeur 0.25, est spécifiée.
9
La strophe de nœud fait référence au nom du modèle de pod défini.

Par défaut, le pod est supprimé lorsque la construction est terminée. Ce comportement peut être modifié avec le plugin ou dans un fichier Jenkins du pipeline.

Upstream Jenkins a récemment introduit un format déclaratif YAML pour définir un DSL de pipeline podTemplate en ligne avec vos pipelines. Un exemple de ce format, utilisant le modèle de pod java-builder défini dans l'image Jenkins de OpenShift Container Platform :

def nodeLabel = 'java-buidler'

pipeline {
  agent {
    kubernetes {
      cloud 'openshift'
      label nodeLabel
      yaml """
apiVersion: v1
kind: Pod
metadata:
  labels:
    worker: ${nodeLabel}
spec:
  containers:
  - name: jnlp
    image: image-registry.openshift-image-registry.svc:5000/openshift/jenkins-agent-base-rhel8:latest
    args: ['\$(JENKINS_SECRET)', '\$(JENKINS_NAME)']
  - name: java
    image: image-registry.openshift-image-registry.svc:5000/openshift/java:latest
    command:
    - cat
    tty: true
"""
    }
  }

  options {
    timeout(time: 20, unit: 'MINUTES')
  }

  stages {
    stage('Build App') {
      steps {
        container("java") {
          sh "mvn --version"
        }
     }
    }
  }
}
Copy to Clipboard Toggle word wrap

5.1.10. Besoins en mémoire de Jenkins

Lorsqu'il est déployé par les modèles Jenkins Ephemeral ou Jenkins Persistent fournis, la limite de mémoire par défaut est de 1 Gi.

Par défaut, tous les autres processus qui s'exécutent dans le conteneur Jenkins ne peuvent pas utiliser plus de 512 MiB de mémoire. S'ils ont besoin de plus de mémoire, le conteneur s'arrête. Il est donc fortement recommandé que les pipelines exécutent des commandes externes dans un conteneur d'agent dans la mesure du possible.

Et si les quotas de Project le permettent, voir les recommandations de la documentation Jenkins sur ce qu'un maître Jenkins devrait avoir du point de vue de la mémoire. Ces recommandations préconisent d'allouer encore plus de mémoire au maître Jenkins.

Il est recommandé de spécifier les valeurs de demande et de limite de mémoire sur les conteneurs d'agents créés par le plugin Jenkins Kubernetes. Les administrateurs peuvent définir des valeurs par défaut pour chaque image d'agent via la configuration de Jenkins. Les paramètres de demande et de limite de mémoire peuvent également être modifiés pour chaque conteneur.

Vous pouvez augmenter la quantité de mémoire disponible pour Jenkins en remplaçant le paramètre MEMORY_LIMIT lors de l'instanciation du modèle Jenkins Ephemeral ou Jenkins Persistent.

5.2. Agent Jenkins

OpenShift Container Platform fournit une image de base à utiliser en tant qu'agent Jenkins.

L'image de base des agents Jenkins présente les caractéristiques suivantes :

  • Il contient à la fois les outils nécessaires, Java sans tête, le client Jenkins JNLP, et les outils utiles, notamment git, tar, zip, et nss, entre autres.
  • Établit l'agent JNLP comme point d'entrée.
  • Inclut l'outil client oc pour invoquer des opérations en ligne de commande à partir des travaux Jenkins.
  • Fournit des fichiers Docker pour les images Red Hat Enterprise Linux (RHEL) et localdev.
Important

Utilisez une version de l'image de l'agent qui est appropriée pour votre version d'OpenShift Container Platform. L'intégration d'une version du client oc qui n'est pas compatible avec la version d'OpenShift Container Platform peut entraîner un comportement inattendu.

L'image Jenkins d'OpenShift Container Platform définit également le modèle de pod java-builder suivant pour illustrer la façon dont vous pouvez utiliser l'image de l'agent avec le plugin Jenkins Kubernetes.

The java-builder pod template employs two containers: * A jnlp container that uses the OpenShift Container Platform Base agent image and handles the JNLP contract for starting and stopping Jenkins agents. * A java container that uses the java OpenShift Container Platform Sample ImageStream, which contains the various Java binaries, including the Maven binary mvn, for building code.

5.2.1. Images de l'agent Jenkins

Les images de l'agent Jenkins d'OpenShift Container Platform sont disponibles sur Quay.io ou registry.redhat.io.

Les images Jenkins sont disponibles via le Red Hat Registry :

$ docker pull registry.redhat.io/ocp-tools-4/jenkins-rhel8:<image_tag>
Copy to Clipboard Toggle word wrap
$ docker pull registry.redhat.io/ocp-tools-4/jenkins-agent-base-rhel8:<image_tag>
Copy to Clipboard Toggle word wrap

Pour utiliser ces images, vous pouvez soit y accéder directement depuis Quay.io ou registry.redhat.io, soit les pousser dans votre registre d'images de conteneurs OpenShift Container Platform.

5.2.2. Variables d'environnement de l'agent Jenkins

Chaque conteneur d'agent Jenkins peut être configuré avec les variables d'environnement suivantes.

Expand
VariableDéfinitionExemples de valeurs et de réglages

JAVA_MAX_HEAP_PARAM, CONTAINER_HEAP_PERCENT, JENKINS_MAX_HEAP_UPPER_BOUND_MB

Ces valeurs contrôlent la taille maximale du tas de la JVM Jenkins. Si JAVA_MAX_HEAP_PARAM est défini, sa valeur est prioritaire. Sinon, la taille maximale du tas est calculée dynamiquement comme CONTAINER_HEAP_PERCENT de la limite de mémoire du conteneur, éventuellement plafonnée à JENKINS_MAX_HEAP_UPPER_BOUND_MB MiB.

Par défaut, la taille maximale du tas de la JVM Jenkins est fixée à 50 % de la limite de mémoire du conteneur, sans plafond.

JAVA_MAX_HEAP_PARAM exemple de réglage : -Xmx512m

CONTAINER_HEAP_PERCENT valeur par défaut : 0.5, ou 50 %

JENKINS_MAX_HEAP_UPPER_BOUND_MB exemple de réglage : 512 MiB

JAVA_INITIAL_HEAP_PARAM, CONTAINER_INITIAL_PERCENT

Ces valeurs contrôlent la taille initiale du tas de la JVM Jenkins. Si JAVA_INITIAL_HEAP_PARAM est défini, sa valeur est prioritaire. Sinon, la taille initiale du tas est calculée dynamiquement comme CONTAINER_INITIAL_PERCENT de la taille maximale du tas calculée dynamiquement.

Par défaut, la JVM définit la taille initiale du tas.

JAVA_INITIAL_HEAP_PARAM exemple de réglage : -Xms32m

CONTAINER_INITIAL_PERCENT exemple de réglage : 0.1 ou 10%

CONTAINER_CORE_LIMIT

S'il est défini, il spécifie un nombre entier de cœurs utilisés pour dimensionner le nombre de threads internes de la JVM.

Exemple de réglage : 2

JAVA_TOOL_OPTIONS

Spécifie les options à appliquer à toutes les JVM s'exécutant dans ce conteneur. Il n'est pas recommandé de remplacer cette valeur.

Par défaut : -XX: UnlockExperimentalVMOptions -XX: UseCGroupMemoryLimitForHeap -Dsun.zip.disableMemoryMapping=true

JAVA_GC_OPTS

Spécifie les paramètres de collecte des déchets de la JVM Jenkins. Il n'est pas recommandé de remplacer cette valeur.

Par défaut : -XX: UseParallelGC -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90

JENKINS_JAVA_OVERRIDES

Spécifie des options supplémentaires pour la JVM Jenkins. Ces options sont ajoutées à toutes les autres options, y compris les options Java ci-dessus, et peuvent être utilisées pour les remplacer, si nécessaire. Séparez chaque option supplémentaire par un espace et si une option contient des caractères d'espacement, échappez-les avec une barre oblique inverse.

Exemple de paramètres : -Dfoo -Dbar; -Dfoo=first\ value -Dbar=second\ value

USE_JAVA_VERSION

Spécifie la version de Java à utiliser pour exécuter l'agent dans son conteneur. Deux versions de Java sont installées dans l'image de base du conteneur : java-11 et java-1.8.0. Si vous étendez l'image de base du conteneur, vous pouvez spécifier une autre version de Java en utilisant le suffixe qui lui est associé.

La valeur par défaut est java-11.

Exemple de réglage : java-1.8.0

5.2.3. Besoins en mémoire de l'agent Jenkins

Une JVM est utilisée dans tous les agents Jenkins pour héberger l'agent Jenkins JNLP ainsi que pour exécuter toutes les applications Java telles que javac, Maven ou Gradle.

Par défaut, la JVM de l'agent JNLP de Jenkins utilise 50% de la limite de mémoire du conteneur pour son tas. Cette valeur peut être modifiée par la variable d'environnement CONTAINER_HEAP_PERCENT. Elle peut également être plafonnée à une limite supérieure ou être entièrement supprimée.

Par défaut, tout autre processus exécuté dans le conteneur de l'agent Jenkins, comme les scripts shell ou les commandes oc exécutées à partir des pipelines, ne peut pas utiliser plus de la limite de mémoire restante de 50 % sans provoquer un kill OOM.

Par défaut, chaque processus JVM supplémentaire qui s'exécute dans un conteneur d'agent Jenkins utilise jusqu'à 25 % de la limite de mémoire du conteneur pour son tas. Il peut être nécessaire d'ajuster cette limite pour de nombreuses charges de travail de construction.

5.2.4. Agent Jenkins Gradle builds

L'hébergement des builds Gradle dans l'agent Jenkins sur OpenShift Container Platform présente des complications supplémentaires car, en plus de l'agent JNLP de Jenkins et des JVM Gradle, Gradle génère une troisième JVM pour exécuter les tests s'ils sont spécifiés.

Les paramètres suivants sont suggérés comme point de départ pour exécuter des builds Gradle dans un agent Jenkins à mémoire limitée sur OpenShift Container Platform. Vous pouvez modifier ces paramètres selon vos besoins.

  • Assurez-vous que le démon Gradle à longue durée de vie est désactivé en ajoutant org.gradle.daemon=false au fichier gradle.properties.
  • Désactivez l'exécution parallèle de la compilation en vous assurant que org.gradle.parallel=true n'est pas défini dans le fichier gradle.properties et que --parallel n'est pas défini en tant qu'argument de ligne de commande.
  • Pour éviter que les compilations Java ne s'exécutent en dehors du processus, définissez java { options.fork = false } dans le fichier build.gradle.
  • Désactiver plusieurs processus de test supplémentaires en s'assurant que test { maxParallelForks = 1 } est défini dans le fichier build.gradle.
  • Remplacer les paramètres de mémoire de la JVM Gradle par les variables d'environnement GRADLE_OPTS, JAVA_OPTS ou JAVA_TOOL_OPTIONS.
  • Définissez la taille maximale du tas et les arguments de la JVM pour n'importe quelle JVM de test Gradle en définissant les paramètres maxHeapSize et jvmArgs dans build.gradle, ou par le biais de l'argument de ligne de commande -Dorg.gradle.jvmargs.

5.2.5. Rétention des pods de l'agent Jenkins

Les pods de l'agent Jenkins sont supprimés par défaut une fois la construction terminée ou arrêtée. Ce comportement peut être modifié par le paramètre de rétention des pods du plugin Kubernetes. La rétention des pods peut être définie pour toutes les constructions Jenkins, avec des dérogations pour chaque modèle de pod. Les comportements suivants sont pris en charge :

  • Always conserve le pod de construction quel que soit le résultat de la construction.
  • Default utilise la valeur du plugin, qui est uniquement le modèle de pod.
  • Never supprime toujours le pod.
  • On Failure conserve le pod s'il échoue pendant la construction.

Vous pouvez modifier la rétention des pods dans le fichier Jenkins du pipeline :

podTemplate(label: "mypod",
  cloud: "openshift",
  inheritFrom: "maven",
  podRetention: onFailure(), 
1

  containers: [
    ...
  ]) {
  node("mypod") {
    ...
  }
}
Copy to Clipboard Toggle word wrap
1
Les valeurs autorisées pour podRetention sont never(), onFailure(), always() et default().
Avertissement

Les pods conservés peuvent continuer à fonctionner et à être comptabilisés dans les quotas de ressources.

5.3. Migration de Jenkins vers OpenShift Pipelines ou Tekton

Vous pouvez migrer vos flux de travail CI/CD de Jenkins vers Red Hat OpenShift Pipelines, une expérience CI/CD cloud-native basée sur le projet Tekton.

Vous pouvez consulter et comparer les termes équivalents suivants utilisés dans Jenkins et OpenShift Pipelines.

5.3.1.1. Terminologie Jenkins

Jenkins propose des pipelines déclaratifs et scénarisés qui sont extensibles à l'aide de bibliothèques partagées et de plugins. Voici quelques termes de base de Jenkins :

  • Pipeline: Automatise l'ensemble du processus de construction, de test et de déploiement des applications en utilisant la syntaxe Groovy.
  • Node: Une machine capable d'orchestrer ou d'exécuter un pipeline scénarisé.
  • Stage: Un sous-ensemble conceptuellement distinct de tâches effectuées dans un pipeline. Les plugins ou les interfaces utilisateurs utilisent souvent ce bloc pour afficher l'état ou la progression des tâches.
  • Step: Une tâche unique qui spécifie l'action exacte à effectuer, soit en utilisant une commande, soit en utilisant un script.
5.3.1.2. Terminologie d'OpenShift Pipelines

OpenShift Pipelines utilise la syntaxe YAML pour les pipelines déclaratifs et se compose de tâches. Voici quelques termes de base dans OpenShift Pipelines :

  • Pipeline: Un ensemble de tâches en série, en parallèle ou les deux.
  • Task: Une séquence d'étapes sous forme de commandes, de binaires ou de scripts.
  • PipelineRun: Exécution d'un pipeline avec une ou plusieurs tâches.
  • TaskRun: Exécution d'une tâche comportant une ou plusieurs étapes.

    Note

    Vous pouvez lancer un PipelineRun ou un TaskRun avec un ensemble d'entrées telles que des paramètres et des espaces de travail, et l'exécution se traduit par un ensemble de sorties et d'artefacts.

  • Workspace: Dans OpenShift Pipelines, les espaces de travail sont des blocs conceptuels qui servent les objectifs suivants :

    • Stockage des données d'entrée, des données de sortie et des éléments de construction.
    • Espace commun pour partager les données entre les tâches.
    • Points de montage pour les informations d'identification contenues dans les secrets, les configurations contenues dans les cartes de configuration et les outils communs partagés par une organisation.
    Note

    Dans Jenkins, il n'y a pas d'équivalent direct des espaces de travail d'OpenShift Pipelines. Vous pouvez considérer le nœud de contrôle comme un espace de travail, car il stocke le référentiel de code cloné, l'historique de construction et les artefacts. Lorsqu'un travail est assigné à un nœud différent, le code cloné et les artefacts générés sont stockés dans ce nœud, mais le nœud de contrôle conserve l'historique de construction.

5.3.1.3. Cartographie des concepts

Les éléments constitutifs de Jenkins et d'OpenShift Pipelines ne sont pas équivalents, et une comparaison spécifique ne fournit pas une correspondance techniquement précise. Les termes et concepts suivants de Jenkins et OpenShift Pipelines sont en corrélation générale :

Expand
Tableau 5.1. Jenkins et OpenShift Pipelines - comparaison de base
JenkinsOpenShift Pipelines

Pipeline

Pipeline et PipelineRun

Stade

Tâche

Étape

Une étape dans une tâche

Vous pouvez utiliser les exemples équivalents suivants pour vous aider à migrer vos pipelines de construction, de test et de déploiement de Jenkins vers OpenShift Pipelines.

5.3.2.1. Pipeline Jenkins

Considérons un pipeline Jenkins écrit en Groovy pour construire, tester et déployer :

pipeline {
   agent any
   stages {
       stage('Build') {
           steps {
               sh 'make'
           }
       }
       stage('Test'){
           steps {
               sh 'make check'
               junit 'reports/**/*.xml'
           }
       }
       stage('Deploy') {
           steps {
               sh 'make publish'
           }
       }
   }
}
Copy to Clipboard Toggle word wrap
5.3.2.2. OpenShift Pipelines pipeline

Pour créer un pipeline dans OpenShift Pipelines équivalent au pipeline Jenkins précédent, vous créez les trois tâches suivantes :

Exemple build fichier de définition YAML de la tâche

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: myproject-build
spec:
  workspaces:
  - name: source
  steps:
  - image: my-ci-image
    command: ["make"]
    workingDir: $(workspaces.source.path)
Copy to Clipboard Toggle word wrap

Exemple test fichier de définition YAML de la tâche

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: myproject-test
spec:
  workspaces:
  - name: source
  steps:
  - image: my-ci-image
    command: ["make check"]
    workingDir: $(workspaces.source.path)
  - image: junit-report-image
    script: |
      #!/usr/bin/env bash
      junit-report reports/**/*.xml
    workingDir: $(workspaces.source.path)
Copy to Clipboard Toggle word wrap

Exemple deploy fichier de définition YAML de la tâche

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: myprojectd-deploy
spec:
  workspaces:
  - name: source
  steps:
  - image: my-deploy-image
    command: ["make deploy"]
    workingDir: $(workspaces.source.path)
Copy to Clipboard Toggle word wrap

Vous pouvez combiner les trois tâches de manière séquentielle pour former un pipeline dans OpenShift Pipelines :

Exemple : Pipelines OpenShift pour la construction, les tests et le déploiement

apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
  name: myproject-pipeline
spec:
  workspaces:
  - name: shared-dir
  tasks:
  - name: build
    taskRef:
      name: myproject-build
    workspaces:
    - name: source
      workspace: shared-dir
  - name: test
    taskRef:
      name: myproject-test
    workspaces:
    - name: source
      workspace: shared-dir
  - name: deploy
    taskRef:
      name: myproject-deploy
    workspaces:
    - name: source
      workspace: shared-dir
Copy to Clipboard Toggle word wrap

Vous pouvez étendre les capacités de Jenkins en utilisant des plugins. Pour obtenir une extensibilité similaire dans OpenShift Pipelines, utilisez l'une des tâches disponibles dans Tekton Hub.

Par exemple, considérons la tâche git-clone dans Tekton Hub, qui correspond au plugin git pour Jenkins.

Exemple : git-clone task from Tekton Hub

apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
 name: demo-pipeline
spec:
 params:
   - name: repo_url
   - name: revision
 workspaces:
   - name: source
 tasks:
   - name: fetch-from-git
     taskRef:
       name: git-clone
     params:
       - name: url
         value: $(params.repo_url)
       - name: revision
         value: $(params.revision)
     workspaces:
     - name: output
       workspace: source
Copy to Clipboard Toggle word wrap

Dans OpenShift Pipelines, si vous ne trouvez pas la bonne tâche dans Tekton Hub, ou si vous avez besoin d'un plus grand contrôle sur les tâches, vous pouvez créer des tâches et des scripts personnalisés pour étendre les capacités d'OpenShift Pipelines.

Exemple : Une tâche personnalisée pour exécuter la commande maven test

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: maven-test
spec:
  workspaces:
  - name: source
  steps:
  - image: my-maven-image
    command: ["mvn test"]
    workingDir: $(workspaces.source.path)
Copy to Clipboard Toggle word wrap

Exemple : Exécuter un script shell personnalisé en indiquant son chemin d'accès

...
steps:
  image: ubuntu
  script: |
      #!/usr/bin/env bash
      /workspace/my-script.sh
...
Copy to Clipboard Toggle word wrap

Exemple : Exécuter un script Python personnalisé en l'écrivant dans le fichier YAML

...
steps:
  image: python
  script: |
      #!/usr/bin/env python3
      print(“hello from python!”)
...
Copy to Clipboard Toggle word wrap

Jenkins et OpenShift Pipelines offrent des fonctions similaires mais sont différents en termes d'architecture et d'exécution.

Expand
Tableau 5.2. Comparaison des modèles d'exécution dans Jenkins et OpenShift Pipelines
JenkinsOpenShift Pipelines

Jenkins dispose d'un nœud contrôleur. Jenkins exécute des pipelines et des étapes de manière centralisée, ou orchestre des tâches exécutées sur d'autres nœuds.

OpenShift Pipelines est sans serveur et distribué, et il n'y a pas de dépendance centrale pour l'exécution.

Les conteneurs sont lancés par le nœud contrôleur de Jenkins via le pipeline.

OpenShift Pipelines adopte une approche "container-first", où chaque étape s'exécute en tant que conteneur dans un pod (équivalent aux nœuds dans Jenkins).

L'extensibilité est obtenue par l'utilisation de plugins.

L'extensibilité est obtenue en utilisant les tâches du Tekton Hub ou en créant des tâches et des scripts personnalisés.

5.3.6. Exemples de cas d'utilisation courants

Jenkins et OpenShift Pipelines offrent tous deux des fonctionnalités pour les cas d'utilisation CI/CD les plus courants, tels que

  • Compilation, construction et déploiement d'images à l'aide d'Apache Maven
  • Extension des capacités de base à l'aide de plugins
  • Réutilisation des bibliothèques partageables et des scripts personnalisés

Vous pouvez utiliser Maven dans les flux de travail Jenkins et OpenShift Pipelines pour compiler, construire et déployer des images. Pour faire correspondre votre flux de travail Jenkins existant à OpenShift Pipelines, considérez les exemples suivants :

Exemple : Compiler et construire une image et la déployer sur OpenShift en utilisant Maven dans Jenkins

#!/usr/bin/groovy
node('maven') {
    stage 'Checkout'
    checkout scm

    stage 'Build'
    sh 'cd helloworld && mvn clean'
    sh 'cd helloworld && mvn compile'

    stage 'Run Unit Tests'
    sh 'cd helloworld && mvn test'

    stage 'Package'
    sh 'cd helloworld && mvn package'

    stage 'Archive artifact'
    sh 'mkdir -p artifacts/deployments && cp helloworld/target/*.war artifacts/deployments'
    archive 'helloworld/target/*.war'

    stage 'Create Image'
    sh 'oc login https://kubernetes.default -u admin -p admin --insecure-skip-tls-verify=true'
    sh 'oc new-project helloworldproject'
    sh 'oc project helloworldproject'
    sh 'oc process -f helloworld/jboss-eap70-binary-build.json | oc create -f -'
    sh 'oc start-build eap-helloworld-app --from-dir=artifacts/'

    stage 'Deploy'
    sh 'oc new-app helloworld/jboss-eap70-deploy.json' }
Copy to Clipboard Toggle word wrap

Exemple : Compiler et construire une image et la déployer sur OpenShift en utilisant Maven dans OpenShift Pipelines.

apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
  name: maven-pipeline
spec:
  workspaces:
    - name: shared-workspace
    - name: maven-settings
    - name: kubeconfig-dir
      optional: true
  params:
    - name: repo-url
    - name: revision
    - name: context-path
  tasks:
    - name: fetch-repo
      taskRef:
        name: git-clone
      workspaces:
        - name: output
          workspace: shared-workspace
      params:
        - name: url
          value: "$(params.repo-url)"
        - name: subdirectory
          value: ""
        - name: deleteExisting
          value: "true"
        - name: revision
          value: $(params.revision)
    - name: mvn-build
      taskRef:
        name: maven
      runAfter:
        - fetch-repo
      workspaces:
        - name: source
          workspace: shared-workspace
        - name: maven-settings
          workspace: maven-settings
      params:
        - name: CONTEXT_DIR
          value: "$(params.context-path)"
        - name: GOALS
          value: ["-DskipTests", "clean", "compile"]
    - name: mvn-tests
      taskRef:
        name: maven
      runAfter:
        - mvn-build
      workspaces:
        - name: source
          workspace: shared-workspace
        - name: maven-settings
          workspace: maven-settings
      params:
        - name: CONTEXT_DIR
          value: "$(params.context-path)"
        - name: GOALS
          value: ["test"]
    - name: mvn-package
      taskRef:
        name: maven
      runAfter:
        - mvn-tests
      workspaces:
        - name: source
          workspace: shared-workspace
        - name: maven-settings
          workspace: maven-settings
      params:
        - name: CONTEXT_DIR
          value: "$(params.context-path)"
        - name: GOALS
          value: ["package"]
    - name: create-image-and-deploy
      taskRef:
        name: openshift-client
      runAfter:
        - mvn-package
      workspaces:
        - name: manifest-dir
          workspace: shared-workspace
        - name: kubeconfig-dir
          workspace: kubeconfig-dir
      params:
        - name: SCRIPT
          value: |
            cd "$(params.context-path)"
            mkdir -p ./artifacts/deployments && cp ./target/*.war ./artifacts/deployments
            oc new-project helloworldproject
            oc project helloworldproject
            oc process -f jboss-eap70-binary-build.json | oc create -f -
            oc start-build eap-helloworld-app --from-dir=artifacts/
            oc new-app jboss-eap70-deploy.json
Copy to Clipboard Toggle word wrap

Jenkins a l'avantage de disposer d'un vaste écosystème composé de nombreux plugins développés au fil des ans par sa vaste base d'utilisateurs. Vous pouvez rechercher et parcourir les plugins dans l'index des plugins Jenkins.

OpenShift Pipelines dispose également de nombreuses tâches développées et contribuées par la communauté et les utilisateurs professionnels. Un catalogue public des tâches réutilisables d'OpenShift Pipelines est disponible dans le Tekton Hub.

En outre, OpenShift Pipelines intègre de nombreux plugins de l'écosystème Jenkins dans ses capacités de base. Par exemple, l'autorisation est une fonction critique à la fois dans Jenkins et dans OpenShift Pipelines. Alors que Jenkins garantit l'autorisation en utilisant le plugin Role-based Authorization Strategy, OpenShift Pipelines utilise le système intégré de contrôle d'accès basé sur les rôles d'OpenShift.

Les bibliothèques partagées Jenkins fournissent du code réutilisable pour certaines parties des pipelines Jenkins. Les bibliothèques sont partagées entre les fichiers Jenkins afin de créer des pipelines hautement modulaires sans répétition de code.

Bien qu'il n'y ait pas d'équivalent direct des bibliothèques partagées de Jenkins dans OpenShift Pipelines, vous pouvez obtenir des flux de travail similaires en utilisant des tâches du Tekton Hub en combinaison avec des tâches et des scripts personnalisés.

5.4. Changements importants dans les images OpenShift Jenkins

OpenShift Container Platform 4.11 déplace les images OpenShift Jenkins et OpenShift Agent Base vers le dépôt ocp-tools-4 à l'adresse registry.redhat.io. Elle supprime également les images OpenShift Jenkins Maven et NodeJS Agent de son payload :

  • OpenShift Container Platform 4.11 déplace les images OpenShift Jenkins et OpenShift Agent Base vers le dépôt ocp-tools-4 à l'adresse registry.redhat.io afin que Red Hat puisse produire et mettre à jour les images en dehors du cycle de vie d'OpenShift Container Platform. Auparavant, ces images se trouvaient dans la charge utile d'installation d'OpenShift Container Platform et dans le dépôt openshift4 à l'adresse registry.redhat.io.
  • OpenShift Container Platform 4.10 a déprécié les images OpenShift Jenkins Maven et NodeJS Agent. OpenShift Container Platform 4.11 supprime ces images de sa charge utile. Red Hat ne produit plus ces images et elles ne sont pas disponibles dans le dépôt ocp-tools-4 à l'adresse registry.redhat.io. Red Hat maintient les versions 4.10 et antérieures de ces images pour toutes les corrections de bogues importantes ou les CVE de sécurité, en suivant la politique de cycle de vie d'OpenShift Container Platform.

Ces changements supportent la recommandation d'OpenShift Container Platform 4.10 d'utiliser plusieurs Pod Templates avec le plugin Jenkins Kubernetes.

5.4.1. Relocalisation des images OpenShift Jenkins

OpenShift Container Platform 4.11 apporte des changements significatifs à l'emplacement et à la disponibilité d'images OpenShift Jenkins spécifiques. En outre, vous pouvez configurer quand et comment mettre à jour ces images.

Qu'est-ce qui reste inchangé dans les images OpenShift Jenkins ?

  • Le Cluster Samples Operator gère les objets ImageStream et Template pour faire fonctionner les images OpenShift Jenkins.
  • Par défaut, l'objet Jenkins DeploymentConfig du modèle de pod Jenkins déclenche un redéploiement lorsque l'image Jenkins change. Par défaut, cette image est référencée par la balise jenkins:2 image stream de Jenkins image stream dans l'espace de noms openshift dans le fichier YAML ImageStream dans la charge utile de l'opérateur Samples.
  • Si vous mettez à jour OpenShift Container Platform 4.10 et antérieures vers 4.11, les modèles de pods dépréciés maven et nodejs sont toujours dans la configuration de l'image par défaut.
  • Si vous mettez à jour OpenShift Container Platform 4.10 et précédentes vers 4.11, les flux d'images jenkins-agent-maven et jenkins-agent-nodejs existent toujours dans votre cluster. Pour maintenir ces flux d'images, consultez la section suivante : " Que se passe-t-il avec les flux d'images jenkins-agent-maven et jenkins-agent-nodejs dans l'espace de noms openshift?

Quels sont les changements dans la matrice de support de l'image OpenShift Jenkins ?

Chaque nouvelle image du dépôt ocp-tools-4 dans le registre registry.redhat.io prend en charge plusieurs versions d'OpenShift Container Platform. Lorsque Red Hat met à jour l'une de ces nouvelles images, elle est simultanément disponible pour toutes les versions. Cette disponibilité est idéale lorsque Red Hat met à jour une image en réponse à un avis de sécurité. Dans un premier temps, ce changement s'applique à OpenShift Container Platform 4.11 et aux versions ultérieures. Il est prévu que ce changement s'applique éventuellement à OpenShift Container Platform 4.9 et aux versions ultérieures.

Auparavant, chaque image Jenkins ne prenait en charge qu'une seule version d'OpenShift Container Platform et Red Hat pouvait mettre à jour ces images de manière séquentielle au fil du temps.

Quels sont les ajouts apportés aux objets ImageStream et ImageStreamTag de OpenShift Jenkins et Jenkins Agent Base ?

En passant d'un flux d'images in-payload à un flux d'images qui fait référence à des images non-payload, OpenShift Container Platform peut définir des balises de flux d'images supplémentaires. Red Hat a créé une série de nouvelles balises de flux d'images pour compléter les balises de flux d'images "value": "jenkins:2" et "value": "image-registry.openshift-image-registry.svc:5000/openshift/jenkins-agent-base-rhel8:latest" existantes dans OpenShift Container Platform 4.10 et les versions antérieures. Ces nouvelles balises de flux d'images répondent à certaines demandes d'amélioration de la gestion des flux d'images liés à Jenkins.

A propos des nouvelles balises de flux d'images :

ocp-upgrade-redeploy
Pour mettre à jour votre image Jenkins lorsque vous mettez à jour OpenShift Container Platform, utilisez cette balise image stream dans votre configuration de déploiement Jenkins. Cette balise de flux d'images correspond à la balise de flux d'images existante 2 du flux d'images jenkins et à la balise de flux d'images latest du flux d'images jenkins-agent-base-rhel8. Elle utilise une balise d'image spécifique à un seul SHA ou résumé d'image. Lorsque l'image ocp-tools-4 change, comme pour les avis de sécurité de Jenkins, Red Hat Engineering met à jour la charge utile Cluster Samples Operator.
user-maintained-upgrade-redeploy
Pour redéployer manuellement Jenkins après avoir mis à jour OpenShift Container Platform, utilisez cette balise de flux d'images dans votre configuration de déploiement Jenkins. Cette balise de flux d'images utilise l'indicateur de version d'image le moins spécifique disponible. Lorsque vous redéployez Jenkins, exécutez la commande suivante : $ oc import-image jenkins:user-maintained-upgrade-redeploy -n openshift. Lorsque vous exécutez cette commande, le contrôleur de la plate-forme OpenShift Container ImageStream accède au registre d'images registry.redhat.io et stocke toutes les images mises à jour dans l'emplacement du registre d'images OpenShift pour cet objet Jenkins ImageStreamTag. Dans le cas contraire, si vous n'exécutez pas cette commande, votre configuration de déploiement Jenkins ne déclenche pas de redéploiement.
scheduled-upgrade-redeploy
Pour redéployer automatiquement la dernière version de l'image Jenkins lorsqu'elle est publiée, utilisez cette balise de flux d'images dans votre configuration de déploiement Jenkins. Cette balise de flux d'images utilise la fonction d'importation périodique des balises de flux d'images du contrôleur de flux d'images d'OpenShift Container Platform, qui vérifie les modifications apportées à l'image de référence. Si l'image change, par exemple en raison d'un récent avis de sécurité Jenkins, OpenShift Container Platform déclenche un redéploiement de votre configuration de déploiement Jenkins. Voir "Configuration de l'importation périodique des balises de flux d'images" dans le document suivant "Ressources supplémentaires"

Que se passe-t-il avec les flux d'images jenkins-agent-maven et jenkins-agent-nodejs dans l'espace de noms openshift?

Les images OpenShift Jenkins Maven et NodeJS Agent pour OpenShift Container Platform ont été dépréciées en 4.10, et sont supprimées du payload d'installation d'OpenShift Container Platform en 4.11. Elles n'ont pas d'alternatives définies dans le référentiel ocp-tools-4. Cependant, vous pouvez contourner ce problème en utilisant le modèle de sidecar décrit dans la rubrique "Jenkins agent" mentionnée dans la section suivante "Ressources supplémentaires".

Cependant, le Cluster Samples Operator ne supprime pas les flux d'images jenkins-agent-maven et jenkins-agent-nodejs créés par des versions antérieures, qui pointent vers les balises des images payantes OpenShift Container Platform respectives sur registry.redhat.io. Par conséquent, vous pouvez extraire les mises à jour de ces images en exécutant les commandes suivantes :

$ oc import-image jenkins-agent-nodejs -n openshift
Copy to Clipboard Toggle word wrap
$ oc import-image jenkins-agent-maven -n openshift
Copy to Clipboard Toggle word wrap

5.4.2. Personnalisation de la balise Jenkins image stream

Pour remplacer le comportement de mise à niveau par défaut et contrôler la manière dont l'image Jenkins est mise à niveau, vous définissez la valeur de la balise de flux d'images que vos configurations de déploiement Jenkins utilisent.

Le comportement de mise à niveau par défaut est celui qui existait lorsque l'image Jenkins faisait partie de la charge utile d'installation. Les noms des balises de flux d'images, 2 et ocp-upgrade-redeploy, dans le fichier de flux d'images jenkins-rhel.json utilisent des références d'images spécifiques à SHA. Par conséquent, lorsque ces balises sont mises à jour avec un nouveau SHA, le contrôleur de changement d'image d'OpenShift Container Platform redéploie automatiquement la configuration de déploiement Jenkins à partir des modèles associés, tels que jenkins-ephemeral.json ou jenkins-persistent.json.

Pour les nouveaux déploiements, afin de remplacer cette valeur par défaut, vous devez modifier la valeur de JENKINS_IMAGE_STREAM_TAG dans le modèle Jenkins jenkins-ephemeral.json. Par exemple, remplacez le 2 dans "value": "jenkins:2" par l'une des balises de flux d'images suivantes :

  • ocp-upgrade-redeployla valeur par défaut, met à jour votre image Jenkins lorsque vous mettez à jour OpenShift Container Platform.
  • user-maintained-upgrade-redeploy vous oblige à redéployer manuellement Jenkins en exécutant $ oc import-image jenkins:user-maintained-upgrade-redeploy -n openshift après la mise à jour d'OpenShift Container Platform.
  • scheduled-upgrade-redeploy vérifie périodiquement que la combinaison <image>:<tag> donnée n'a pas été modifiée et met à jour l'image lorsqu'elle l'est. Le contrôleur de changement d'image extrait l'image modifiée et redéploie la configuration de déploiement Jenkins fournie par les modèles. Pour plus d'informations sur cette politique d'importation planifiée, voir la section "Ajouter des balises aux flux d'images" dans la section suivante "Ressources supplémentaires"
Note

Pour remplacer la valeur de mise à niveau actuelle pour les déploiements existants, modifiez les valeurs des variables d'environnement qui correspondent à ces paramètres de modèle.

Conditions préalables

  • Vous utilisez OpenShift Jenkins sur OpenShift Container Platform 4.12.
  • Vous connaissez l'espace de noms dans lequel OpenShift Jenkins est déployé.

Procédure

  • Définir la valeur de la balise de flux d'images, en remplaçant <namespace> par l'espace de noms où OpenShift Jenkins est déployé et <image_stream_tag> par une balise de flux d'images :

    Exemple

    $ oc patch dc jenkins -p '{"spec":{"triggers" :[{"type":"ImageChange",{"imageChangeParams":{"automatic":true,{"containerNames" :[\N "jenkins"],{"from" :{"kind":\N "ImageStreamTag",\N "namespace":\N"<namespace>",\N "name":\N "jenkins:<image_stream_tag>"}}]}}''
    Copy to Clipboard Toggle word wrap

    Astuce

    Alternativement, pour éditer le YAML de configuration du déploiement de Jenkins, entrez $ oc edit dc/jenkins -n <namespace> et mettez à jour la ligne value: 'jenkins:<image_stream_tag>'.

Legal Notice

Copyright © Red Hat

OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).

Modified versions must remove all Red Hat trademarks.

Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.

Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.

Linux® is the registered trademark of Linus Torvalds in the United States and other countries.

Java® is a registered trademark of Oracle and/or its affiliates.

XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.

MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.

Node.js® is an official trademark of the OpenJS Foundation.

The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.

All other trademarks are the property of their respective owners.

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

© 2026 Red Hat
Retour au début