Jenkins


Red Hat OpenShift Service on AWS 4

Contient des informations sur Jenkins pour Red Hat OpenShift Service sur AWS

Red Hat OpenShift Documentation Team

Résumé

Jenkins pour Red Hat OpenShift Service sur AWS.

Chapitre 1. Configuration des images Jenkins

Le service OpenShift Red Hat sur AWS fournit une image de conteneur pour exécuter Jenkins. Cette image fournit une instance de serveur Jenkins, qui peut être utilisée pour configurer un flux de base pour les tests, l’intégration et la livraison en continu.

L’image est basée sur le Red Hat Universal Base Images (UBI).

Le service Red Hat OpenShift sur AWS suit la version LTS de Jenkins. Le service OpenShift Red Hat sur AWS fournit une image contenant Jenkins 2.x.

Le service OpenShift Red Hat sur les images AWS Jenkins est disponible sur Quay.io ou register.redhat.io.

À titre d’exemple:

$ podman pull registry.redhat.io/ocp-tools-4/jenkins-rhel8:<image_tag>
Copy to Clipboard

Afin d’utiliser ces images, vous pouvez y accéder directement à partir de ces registres ou les pousser dans votre service Red Hat OpenShift sur le registre des images conteneur AWS. En outre, vous pouvez créer un flux d’images qui pointe vers l’image, que ce soit dans votre registre d’images conteneur ou à l’emplacement externe. Le Red Hat OpenShift Service sur les ressources AWS peut ensuite faire référence au flux d’images.

Cependant, pour plus de commodité, Red Hat OpenShift Service sur AWS fournit des flux d’images dans l’espace de noms openshift pour l’image principale de Jenkins ainsi que l’exemple des images Agent fournies pour Red Hat OpenShift Service sur l’intégration AWS avec Jenkins.

1.1. Configuration et personnalisation

Il est possible de gérer l’authentification Jenkins de deux manières:

  • Authentification Red Hat OpenShift sur AWS OAuth fournie par Red Hat OpenShift Service sur AWS Login plugin.
  • Authentification standard fournie par Jenkins.

1.1.1. Authentification Red Hat OpenShift sur AWS OAuth

L’authentification OAuth est activée en configurant des options sur le panneau Configurer la sécurité globale dans l’interface utilisateur de Jenkins, ou en définissant la variable d’environnement OPENSHIFT_ENABLE_OAUTH sur la configuration de déploiement Jenkins à autre chose que fausse. Cela active le Red Hat OpenShift Service sur AWS Login plugin, qui récupère les informations de configuration à partir des données de pod ou en interagissant avec le service Red Hat OpenShift sur le serveur API AWS.

Les informations d’identification valides sont contrôlées par le service Red Hat OpenShift sur le fournisseur d’identité AWS.

Jenkins prend en charge l’accès navigateur et non navigateur.

Les utilisateurs valides sont automatiquement ajoutés à la matrice d’autorisation Jenkins lors de la connexion, où Red Hat OpenShift Service sur les rôles AWS dicte les autorisations spécifiques Jenkins que les utilisateurs ont. Les rôles utilisés par défaut sont l’administrateur, l’édition et la vue prédéfinis. Le plugin de connexion exécute des requêtes auto-SAR contre ces rôles dans le projet ou l’espace de noms dans lesquels Jenkins est en cours d’exécution.

Les utilisateurs ayant le rôle d’administrateur ont les autorisations administratives traditionnelles d’utilisateur Jenkins. Les utilisateurs avec le rôle d’édition ou de vue ont progressivement moins d’autorisations.

Le Red Hat OpenShift Service par défaut sur AWS admin, éditer et afficher les rôles et les autorisations Jenkins que ces rôles sont attribués dans l’instance Jenkins sont configurables.

Lors de l’exécution de Jenkins dans un service OpenShift Red Hat sur AWS pod, 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 en cours d’exécution.

Lorsque ce plugin trouve et peut lire dans cette carte de configuration, vous pouvez définir le rôle à Jenkins Permission mappings. En particulier:

  • Le plugin de connexion traite les paires de clés et de valeur dans la carte de configuration comme l’autorisation Jenkins de Red Hat OpenShift Service sur les cartographies de rôles AWS.
  • La clé est l’ID court du groupe d’autorisations Jenkins et l’ID court d’autorisation Jenkins, les deux étant séparés par un caractère de trait d’union.
  • Dans le cas où vous souhaitez ajouter l’autorisation globale d’administration Jenkins à un service OpenShift Red Hat sur le rôle AWS, la clé devrait être l’administrateur général.
  • Afin d’obtenir une idée des groupes d’autorisation et des identifiants d’autorisation disponibles, accédez à la page d’autorisation de matrice de la console Jenkins et des ID pour les groupes et les autorisations individuelles dans la table qu’ils fournissent.
  • La valeur de la paire clé et valeur est la liste de Red Hat OpenShift Service sur les rôles AWS auxquels l’autorisation devrait s’appliquer, chaque rôle étant séparé par une virgule.
  • Dans le cas où vous souhaitez ajouter l’autorisation d’administration globale Jenkins aux rôles d’administrateur et d’édition par défaut, ainsi qu’à un nouveau rôle Jenkins que vous avez créé, la valeur de la clé Administrateur général serait admin,edit,jenkins.
Note

L’utilisateur admin qui est pré-rempli dans le service Red Hat OpenShift sur l’image AWS Jenkins avec des privilèges administratifs ne reçoit pas ces privilèges lorsque Red Hat OpenShift Service sur AWS OAuth est utilisé. Afin d’accorder ces autorisations, le service Red Hat OpenShift sur l’administrateur du cluster AWS doit définir explicitement cet utilisateur dans le service Red Hat OpenShift sur le fournisseur d’identité AWS et attribuer le rôle d’administrateur à l’utilisateur.

Les autorisations des utilisateurs de Jenkins qui sont stockées peuvent être modifiées après que les utilisateurs ont été initialement établis. Le Red Hat OpenShift Service sur AWS Login plugin sonde le service OpenShift Red Hat sur le serveur de l’API AWS pour les autorisations et met à jour les autorisations stockées dans Jenkins pour chaque utilisateur avec les autorisations récupérées à partir de Red Hat OpenShift Service sur AWS. Lorsque l’interface utilisateur de Jenkins est utilisée pour mettre à jour les autorisations d’un utilisateur Jenkins, les modifications d’autorisation sont annulées la prochaine fois que le plugin sonde Red Hat OpenShift Service sur AWS.

Contrôlez la fréquence à laquelle le sondage se produit avec la variable d’environnement OPENSHIFT_PERMISSIONS_POLL_INTERVAL. L’intervalle de sondage par défaut est de cinq minutes.

La façon la plus simple de créer un nouveau service Jenkins en utilisant l’authentification OAuth est d’utiliser un modèle.

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.

La première fois que Jenkins démarre, la configuration est créée avec l’utilisateur administrateur et le mot de passe. Les identifiants d’utilisateur par défaut sont admin et mot de passe. 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 Jenkins standard.

Procédure

  • Créez une application Jenkins qui utilise l’authentification standard Jenkins en entrant la commande suivante:

    $ oc new-app -e \
        JENKINS_PASSWORD=<password> \
        ocp-tools-4/jenkins-rhel8
    Copy to Clipboard

1.2. Jenkins variables d’environnement

Le serveur Jenkins peut être configuré avec les variables d’environnement suivantes:

La variableDéfinitionExemples de valeurs et de paramètres

L’OPENSHIFT_ENABLE_OAUTH

Détermine si le service Red Hat OpenShift sur AWS Login gère l’authentification lors de la connexion à Jenkins. Activer, définir à true.

Défaut: false

JENKINS_PASSWORD

Le mot de passe pour l’utilisateur admin lorsque vous utilisez l’authentification standard Jenkins. Il n’est pas applicable lorsque OPENSHIFT_ENABLE_OAUTH est défini sur true.

Défaut: mot de passe

JAVA_MAX_HEAP_PARAM, CONTAINER_HEAP_PERCENT, JENKINS_MAX_HEAP_UPPER_BOUND_MB

Ces valeurs contrôlent la taille maximale du tas Jenkins JVM. Lorsque JAVA_MAX_HEAP_PARAM est défini, sa valeur prime. Dans le cas contraire, 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.

La taille maximale du tas de Jenkins JVM est fixée à 50% de la limite de mémoire du conteneur sans capuche.

JAVA_MAX_HEAP_PARAM réglage de l’exemple: -Xmx512m

CONTAINER_HEAP_PERCENT par défaut: 0,5, ou 50%

JENKINS_MAX_HEAP_UPPER_BOUND_MB paramètres d’exemple: 512 MiB

JAVA_INITIAL_HEAP_PARAM, CONTAINER_INITIAL_PERCENT

Ces valeurs contrôlent la taille initiale du tas Jenkins JVM. Lorsque JAVA_INITIAL_HEAP_PARAM est défini, sa valeur prime. Dans le cas contraire, la taille initiale du tas est calculée dynamiquement comme CONTAINER_INITIAL_PERCENT de la taille maximale du tas calculée dynamiquement.

Le JVM définit par défaut la taille initiale du tas.

JAVA_INITIAL_HEAP_PARAM réglage de l’exemple: -Xms32m

Configuration de l’exemple CONTAINER_INITIAL_PERCENT: 0,1, ou 10%

CONTENEUR_CORE_LIMIT

Lorsqu’il est défini, spécifie un nombre entier de cœurs utilisés pour la taille des nombres de threads JVM internes.

Exemple de réglage: 2

JAVA_TOOL_OPTIONS

Indique les options à appliquer à tous les JVM fonctionnant dans ce conteneur. Il n’est pas recommandé de remplacer cette valeur.

Défaut: -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -Dsun.zip.disableMemoryMapping=true

JAVA_GC_OPTS

Indique les paramètres de collecte des ordures Jenkins JVM. Il n’est pas recommandé de remplacer cette valeur.

Défaut: -XX:+UseParallelGC -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90

JENKINS_JAVA_OVERRIDES

Indique les options supplémentaires pour Jenkins JVM. Ces options sont ajoutées à toutes les autres options, y compris les options Java ci-dessus, et peuvent être utilisées pour remplacer l’une d’entre elles si nécessaire. Séparez chaque option supplémentaire avec un espace; si une option contient des caractères d’espace, échappez-les avec un backslash.

Exemples de paramètres: -Dfoo -Dbar; -Dfoo=first\ valeur -Dbar=second\ valeur.

JENKINS_OPTS

Indique les arguments de Jenkins.

 

INSTALL_PLUGINS

Indique les plugins Jenkins supplémentaires à installer lorsque le conteneur est lancé pour la première fois ou lorsque OVERRIDE_PV_PLUGINS_WITH_IMAGE_PLUGINS est défini sur true. Les plugins sont spécifiés comme une liste délimitée par virgule de paires nom:version.

Exemple de réglage: git:3.7.0,subversion:2.10.2.

L’OPENSHIFT_PERMISSIONS_POLL_INTERVAL

Indique l’intervalle en millisecondes que le service Red Hat OpenShift sur AWS Login sonde Red Hat OpenShift Service sur AWS pour les autorisations associées à chaque utilisateur défini dans Jenkins.

Défaut: 300000 - 5 minutes

OVERRIDE_PV_CONFIG_WITH_IMAGE_CONFIG

Lors de l’exécution de cette image avec un service OpenShift Red Hat sur AWS volume persistant (PV) pour le répertoire de configuration Jenkins, le transfert de la configuration de l’image vers le PV n’est effectué que la première fois que l’image démarre parce que le PV est attribué lorsque la revendication de volume persistant (PVC) est créée. Lorsque 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 n’ayez défini cette variable d’environnement sur true.

Défaut: false

OVERRIDE_PV_PLUGINS_WITH_IMAGE_PLUGINS

Lors de l’exécution de cette image avec un service OpenShift Red Hat sur AWS PV pour le répertoire de configuration de Jenkins, le transfert de plugins de l’image vers le PV n’est effectué que la première fois que l’image démarre parce que le PV est assigné lorsque le PVC est créé. Lorsque 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 n’ayez défini cette variable d’environnement sur true.

Défaut: false

ENABLE_FATAL_ERROR_LOG_FILE

Lors de l’exécution de cette image avec un Red Hat OpenShift Service sur AWS PVC pour le répertoire de configuration de Jenkins, cette variable d’environnement permet au fichier journal d’erreur fatal de persister lorsqu’une erreur fatale se produit. Le fichier d’erreur fatale est enregistré dans /var/lib/jenkins/logs.

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 pod de plugins Kubernetes fournis avec cette image. Dans le cas contraire, l’image de la balise de flux d’image jenkins-agent-base-rhel8:dernière dans l’espace de noms openshift est utilisée.

Défaut: image-registry.openshift-image-registry.svc:5000/openshift/jenkins-agent-base-rhel8:plus tard

JAVA_BUILDER_IMAGE

La définition de cette valeur remplace l’image utilisée pour le conteneur java-builder dans l’échantillon de java-builder Kubernetes plugin pod modèles fournis avec cette image. Dans le cas contraire, l’image de la balise de flux d’image java:latest dans l’espace de noms openshift est utilisée.

Défaut: image-registry.openshift-image-registry.svc:5000/openshift/java:dernière

JAVA_FIPS_OPTIONS

La définition de cette valeur contrôle le fonctionnement du JVM lors de l’exécution d’un nœud FIPS. Consultez Configurer Red Hat build of OpenJDK 11 en mode FIPS pour plus d’informations.

Défaut: -Dcom.redhat.fips=false

1.3. Fourniture d’un accès au projet croisé de Jenkins

Jenkins Si vous allez exécuter Jenkins ailleurs que votre même projet, vous devez fournir un jeton d’accès à Jenkins pour 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 en entrant la commande suivante:

    $ oc describe serviceaccount jenkins
    Copy to Clipboard

    Exemple de sortie

    Name:       default
    Labels:     <none>
    Secrets:    {  jenkins-token-uyswp    }
                {  jenkins-dockercfg-xcr3d    }
    Tokens:     jenkins-token-izv1u
                jenkins-token-uyswp
    Copy to Clipboard

    Dans ce cas, le secret s’appelle Jenkins-token-uyswp.

  2. De récupérer le jeton du secret en entrant la commande suivante:

    $ oc describe secret <secret name from above>
    Copy to Clipboard

    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

    Le paramètre jeton contient la valeur de jeton que Jenkins exige d’accéder au projet.

1.4. Jenkins points de montage de volume croisé

L’image Jenkins peut être exécutée avec des volumes montés pour permettre un stockage persistant pour la configuration:

  • /Var/lib/jenkins est le répertoire de données où Jenkins stocke les fichiers de configuration, y compris les définitions de tâches.

1.5. Personnalisation de l’image Jenkins à travers la source à l’image

Afin de personnaliser le service officiel Red Hat OpenShift sur l’image AWS Jenkins, vous pouvez utiliser l’image comme constructeur source-à-image (S2I).

Il est possible d’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 personnalisée.

Afin d’inclure vos modifications dans l’image Jenkins, vous devez disposer d’un référentiel Git avec la structure de répertoire suivante:

les plugins
Ce répertoire contient les plugins Jenkins binaires que vous souhaitez copier dans Jenkins.
plugins.txt
Ce fichier répertorie les plugins que vous souhaitez installer en utilisant la syntaxe suivante:
pluginId:pluginVersion
Copy to Clipboard
configuration/emplois
Ce répertoire contient les définitions de tâches 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 inclure des fichiers supplémentaires, tels que Credentials.xml, là-bas.

Configuration de création d’échantillons pour personnaliser l’image Jenkins dans Red Hat OpenShift Service sur AWS

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

1
Le paramètre source définit le référentiel source Git avec la disposition décrite ci-dessus.
2
Le paramètre de stratégie définit l’image Jenkins originale à utiliser comme image source pour la construction.
3
Le paramètre de sortie définit l’image Jenkins obtenue et personnalisée que vous pouvez utiliser dans les configurations de déploiement au lieu de l’image officielle Jenkins.

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 Red Hat OpenShift Service sur AWS.

Afin d’utiliser le plugin Kubernetes, Red Hat OpenShift Service sur AWS fournit une image OpenShift Agent Base qui convient à l’utilisation comme agent Jenkins.

Important

Le Red Hat OpenShift Service sur AWS 4.11 déplace les images OpenShift Jenkins et OpenShift Agent Base vers le référentiel ocp-tools-4 sur Registry.redhat.io afin que Red Hat puisse produire et mettre à jour les images en dehors du service OpenShift Red Hat sur le cycle de vie AWS. Auparavant, ces images figuraient dans le service Red Hat OpenShift sur AWS installer la charge utile et le référentiel openshift4 sur Registry.redhat.io.

Les images OpenShift Jenkins Maven et NodeJS Agent ont été retirées du Red Hat OpenShift Service sur AWS 4.11. Le Red Hat ne produit plus ces images, et ils ne sont pas disponibles dans le référentiel ocp-tools-4 sur register.redhat.io. Le Red Hat conserve les versions 4.10 et précédentes de ces images pour tout correctif important de bug ou CVE de sécurité, en suivant le Red Hat OpenShift Service sur la stratégie de cycle de vie AWS.

Consultez le lien « Modifications importantes des images OpenShift Jenkins » dans la section suivante « Ressources supplémentaires ».

Les images d’agent Maven et Node.js sont automatiquement configurées comme des images de modèles de pod Kubernetes dans le service OpenShift Red Hat sur AWS Jenkins configuration d’image pour le plugin Kubernetes. Cette configuration comprend des étiquettes pour chaque image que vous pouvez appliquer à l’un de vos travaux Jenkins dans le cadre de leur restriction où ce projet peut être exécuté. Lorsque l’étiquette est appliquée, les tâches exécutées sous un service OpenShift Red Hat sur AWS pod exécutant l’image de l’agent respectif.

Important

Dans Red Hat OpenShift Service sur AWS 4.10 et versions ultérieures, le modèle recommandé pour exécuter les agents Jenkins à l’aide du plugin Kubernetes est d’utiliser des modèles de pod avec des conteneurs jnlp et sidecar. Le conteneur jnlp utilise le Red Hat OpenShift Service sur l’image de l’agent AWS Jenkins Base pour faciliter le lancement d’un pod séparé pour votre construction. L’image du conteneur sidecar a les outils nécessaires pour construire dans un langage particulier dans le pod séparé qui a été lancé. De nombreuses images de conteneur du catalogue de conteneurs Red Hat sont référencées dans les flux d’images d’échantillon dans l’espace de noms openshift. Le Red Hat OpenShift Service sur AWS Jenkins image a 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 Java fournie par le flux d’images java dans l’espace de noms openshift.

L’image Jenkins fournit également la découverte automatique et la configuration automatique d’images d’agent supplémentaires pour le plugin Kubernetes.

Avec le Red Hat OpenShift Service sur AWS synchro plugin, sur le démarrage de Jenkins, les recherches d’image Jenkins dans le projet qu’il est en cours d’exécution, ou les projets listés dans la configuration du plugin, pour les éléments suivants:

  • L’image coule avec l’étiquette de rôle définie sur jenkins-agent.
  • Balises de flux d’images avec l’annotation de rôle définie sur jenkins-agent.
  • Configurez les cartes avec l’étiquette de rôle définie sur jenkins-agent.

Lorsque l’image Jenkins trouve un flux d’image avec l’étiquette appropriée, ou une balise de flux d’image avec l’annotation appropriée, elle génère la configuration correspondante du plugin Kubernetes. De cette façon, vous pouvez assigner vos tâches Jenkins à exécuter dans un pod exécutant l’image conteneur fournie par le flux d’images.

Le nom et les références d’image du flux d’image, ou balise de flux d’images, sont mappés aux champs nom et image du modèle de pod de plugin Kubernetes. Il est possible de contrôler le champ d’étiquette du modèle de pod de plugin Kubernetes en définissant une annotation sur le flux d’image, ou l’objet de balise de flux d’images, avec le label d’agent clé. Dans le cas contraire, le nom est utilisé comme étiquette.

Note

Il ne faut pas se connecter à la console Jenkins et modifier la configuration du modèle de pod. Lorsque vous le faites après la création du modèle de pod, et que le service OpenShift Red Hat sur AWS 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 modifications de configuration. Il est impossible de fusionner une nouvelle configuration avec la configuration existante.

Considérez l’approche config map si vous avez des besoins de configuration plus complexes.

Lorsqu’il trouve une carte de configuration avec l’étiquette appropriée, l’image Jenkins suppose que toutes les valeurs de la charge utile des données clés de la carte de configuration contiennent un langage de balisage extensible (XML) conforme au format de configuration pour Jenkins et les modèles de pod de plugin Kubernetes. L’un des principaux avantages de la configuration des cartes sur les flux d’images et les balises de flux d’images est que vous pouvez contrôler tous les paramètres du modèle de module de 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

L’exemple suivant montre deux conteneurs qui référencent des flux d’images dans l’espace de noms openshift. Il s’agit d’un conteneur qui gère le contrat JNLP pour le lancement de Pods en tant qu’agents Jenkins. L’autre conteneur utilise une image avec des outils pour le code de construction 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
Note

Il ne faut pas se connecter à la console Jenkins et modifier la configuration du modèle de pod. Lorsque vous le faites après la création du modèle de pod, et que le service OpenShift Red Hat sur AWS 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 modifications de configuration. Il est impossible de fusionner une nouvelle configuration avec la configuration existante.

Considérez l’approche config map si vous avez des besoins de configuration plus complexes.

Après avoir été installé, le Red Hat OpenShift Service sur AWS Sync surveille le serveur API de Red Hat OpenShift Service sur AWS pour les mises à jour des flux d’images, les balises de flux d’images et la configuration des cartes 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 tout PodTemplate existant de la configuration du plugin Kubernetes.
  • Lorsque ces objets sont supprimés, la configuration correspondante est supprimée du plugin Kubernetes.
  • Lorsque vous créez des objets ConfigMap, ImageStream, ImageStream ou ImageStreamTag correctement étiquetés ou annotés, ou si vous ajoutez des étiquettes après leur création initiale, cela se traduit par la création d’un PodTemplate dans la configuration Kubernetes-plugin.
  • Dans le cas du PodTemplate par config map form, les modifications aux données de la carte de configuration pour le PodTemplate sont appliquées aux paramètres PodTemplate dans la configuration du plugin Kubernetes. Les modifications remplacent également les modifications apportées au PodTemplate via l’interface utilisateur de Jenkins entre les modifications apportées à la carte de configuration.

Afin d’utiliser une image conteneur comme agent Jenkins, l’image doit exécuter l’agent comme point d’entrée. Consultez la documentation officielle de Jenkins pour plus de détails.

1.7. Autorisations de Jenkins

Dans la carte de configuration, l’élément &lt;serviceAccount&gt; du modèle de pod XML est le service OpenShift Red Hat sur le compte de service AWS utilisé pour la pod résultante, les identifiants de compte de service sont montés dans le pod. Les autorisations sont associées au compte de service et contrôlent quelles opérations contre le service OpenShift Red Hat sur AWS Master sont autorisées à partir du pod.

Considérez le scénario suivant avec les comptes de service utilisés pour le pod, qui est lancé par le plugin Kubernetes qui fonctionne dans le Red Hat OpenShift Service sur l’image AWS Jenkins.

Lorsque vous utilisez le modèle d’exemple pour Jenkins fourni par Red Hat OpenShift Service sur AWS, le compte de service jenkins est défini avec le rôle d’édition du projet Jenkins s’exécute, et le maître Jenkins pod a ce compte de service monté.

Les deux modèles de pod 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.

  • Les modèles de pod qui sont automatiquement découverts par le service Red Hat OpenShift sur le plugin de synchronisation AWS parce que leurs flux d’images ou 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.
  • Dans le cas des 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 podTemplate pipeline DSL fourni par le plugin Kubernetes, ou l’étiquetage d’une carte de configuration dont les données sont la configuration XML pour un modèle de pod.
  • Lorsque vous ne spécifiez pas de valeur pour le compte de service, le compte de service par défaut est utilisé.
  • Assurez-vous que tout compte de service utilisé a les autorisations nécessaires, les rôles, et ainsi de suite défini dans Red Hat OpenShift Service sur AWS pour manipuler les projets que vous choisissez de manipuler à partir de l’intérieur de la pod.

1.8. Créer 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. Le service Red Hat OpenShift sur AWS 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 openshift par défaut par l’administrateur de votre cluster lors de la configuration initiale du cluster.

Les deux modèles disponibles définissent à la fois la configuration de déploiement et un service. Les modèles diffèrent dans leur stratégie de stockage, ce qui affecte si le contenu de Jenkins persiste à travers le redémarrage du pod.

Note

Le 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-éphémère utilise le stockage éphémère. Lors du redémarrage du pod, toutes les données sont perdues. Ce modèle n’est utile que pour le développement ou le test.
  • Jenkins-persistant utilise un magasin de volume persistant (PV). Les données survivent au redémarrage d’un pod.

Afin d’utiliser un magasin PV, l’administrateur du cluster doit définir un pool PV dans le Red Hat OpenShift Service sur le déploiement AWS.

Après avoir sélectionné le modèle que vous voulez, vous devez instancier le modèle pour pouvoir utiliser Jenkins.

Procédure

  • Créez une nouvelle application Jenkins en utilisant l’une des méthodes suivantes:

    • A PV:

      $ oc new-app jenkins-persistent
      Copy to Clipboard
    • D’un volume de type videDir où la configuration ne persiste pas à travers les redémarrages:

      $ oc new-app jenkins-ephemeral
      Copy to Clipboard

Avec les deux modèles, vous pouvez exécuter oc décrire sur eux pour voir tous les paramètres disponibles pour l’écrasement.

À titre d’exemple:

$ oc describe jenkins-ephemeral
Copy to Clipboard

1.9. En utilisant le plugin Jenkins Kubernetes

Dans l’exemple suivant, l’objet BuildConfig d’openshift-jee-sample provoque la mise à disposition dynamique d’un pod d’agent Jenkins Maven. Le pod clone un certain code source Java, construit un fichier WAR et provoque un second BuildConfig, openshift-jee-sample-docker à exécuter. Le second BuildConfig couche le nouveau fichier WAR dans une image de conteneur.

Important

Le service OpenShift Red Hat sur AWS 4.11 a supprimé les images OpenShift Jenkins Maven et NodeJS Agent de sa charge utile. Le Red Hat ne produit plus ces images, et ils ne sont pas disponibles dans le référentiel ocp-tools-4 sur register.redhat.io. Le Red Hat conserve les versions 4.10 et précédentes de ces images pour tout correctif important de bug ou CVE de sécurité, en suivant le Red Hat OpenShift Service sur la stratégie de cycle de vie AWS.

Consultez le lien « Modifications importantes des images OpenShift Jenkins » dans la section suivante « Ressources supplémentaires ».

Exemple 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

Il est également possible de remplacer la spécification du pod d’agent Jenkins créé dynamiquement. Ce qui suit est une modification de l’exemple précédent, qui remplace la mémoire du conteneur et spécifie une variable d’environnement.

Exemple BuildConfig qui utilise le plugin Jenkins Kubernetes, 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

1
Le nouveau modèle de pod appelé mypod est défini de manière dynamique. Le nouveau nom de modèle de pod est référencé dans la strophe du nœud.
2
La valeur cloud doit être définie sur openshift.
3
Le nouveau modèle de pod peut hériter de sa configuration à partir d’un modèle de pod existant. Dans ce cas, hérité du modèle Maven pod prédéfini par Red Hat OpenShift Service sur AWS.
4
Cet exemple remplace les valeurs dans le conteneur préexistant et doit être spécifié par son nom. Les images de l’agent Jenkins expédiées avec Red Hat OpenShift Service sur AWS utilisent le nom du conteneur jnlp.
5
Indiquez à nouveau le nom de l’image du conteneur. C’est un problème connu.
6
La requête mémoire de 512 Mi est spécifiée.
7
La limite de mémoire de 512 Mi est spécifiée.
8
La variable d’environnement CONTAINER_HEAP_PERCENT, avec la valeur 0.25, est spécifiée.
9
Le nœud stanza fait référence au nom du modèle de pod défini.

Le pod est supprimé par défaut lorsque la construction est terminée. Ce comportement peut être modifié avec le plugin ou dans un pipeline Jenkinsfile.

En amont Jenkins a récemment introduit un format déclaratif YAML pour définir un pipeline podTemplate DSL en ligne avec vos pipelines. Exemple de ce format, en utilisant l’échantillon java-builder pod modèle qui est défini dans le Red Hat OpenShift Service sur l’image AWS Jenkins:

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

1.10. Exigences de mémoire 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. En cas de 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 du projet le permettent, consultez 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 proscrivent d’allouer encore plus de mémoire au maître Jenkins.

Il est recommandé de spécifier la requête de mémoire et les valeurs limites sur les conteneurs d’agent créés par le plugin Jenkins Kubernetes. Les utilisateurs admin peuvent définir des valeurs par défaut sur une base d’image par agent via la configuration Jenkins. Les paramètres de requête et de limite de mémoire peuvent également être annulés sur une base par conteneur.

Il est possible d’augmenter la quantité de mémoire disponible pour Jenkins en surmontant le paramètre MEMORY_LIMIT lors de l’instanciation du modèle Jenkins Ephemeral ou Jenkins Persistent.

Chapitre 2. Agent de Jenkins

Le service OpenShift Red Hat sur AWS fournit une image de base pour une utilisation en tant qu’agent Jenkins.

L’image de base pour les agents de Jenkins fait ce qui suit:

  • Il tire à la fois les outils requis, Java sans tête, le client Jenkins JNLP, et les outils utiles, y compris git, goudron, zip et nss, entre autres.
  • Établit l’agent JNLP comme point d’entrée.
  • Inclut l’outil client oc pour invoquer des opérations de ligne de commande à partir des tâches Jenkins.
  • Fournit Dockerfiles pour les images Red Hat Enterprise Linux (RHEL) et localdev.
Important

Utilisez une version de l’image de l’agent qui convient à votre Red Hat OpenShift Service sur la version de sortie AWS. L’intégration d’une version client oc qui n’est pas compatible avec le service OpenShift Red Hat sur AWS peut entraîner un comportement inattendu.

Le Red Hat OpenShift Service sur AWS Jenkins image définit également l’échantillon suivant java-builder pod modèle pour illustrer comment vous pouvez utiliser l’image de l’agent avec le plugin Jenkins Kubernetes.

Le modèle de pod java-builder emploie deux conteneurs:

  • Conteneur jnlp qui utilise le service OpenShift Red Hat sur l’image de l’agent AWS Base et gère le contrat JNLP pour démarrer et arrêter les agents Jenkins.
  • Conteneur java qui utilise le service java Red Hat OpenShift sur AWS Sample ImageStream, qui contient les différents binaires Java, y compris le mvn binaire Maven, pour le code de construction.

2.1. Jenkins Agent images

Les images de l’agent de Red Hat OpenShift sur AWS Jenkins sont disponibles sur Quay.io ou Registry.redhat.io.

Les images de Jenkins sont disponibles via le Registre Red Hat:

$ docker pull registry.redhat.io/ocp-tools-4/jenkins-rhel8:<image_tag>
Copy to Clipboard
$ docker pull registry.redhat.io/ocp-tools-4/jenkins-agent-base-rhel8:<image_tag>
Copy to Clipboard

Afin d’utiliser ces images, vous pouvez y accéder directement à partir de Quay.io ou Register.redhat.io ou les pousser dans votre service Red Hat OpenShift sur le registre des images conteneur AWS.

2.2. Jenkins Agent variables d’environnement

Chaque conteneur d’agent Jenkins peut être configuré avec les variables d’environnement suivantes.

La variableDéfinitionExemples de valeurs et de paramètres

JAVA_MAX_HEAP_PARAM, CONTAINER_HEAP_PERCENT, JENKINS_MAX_HEAP_UPPER_BOUND_MB

Ces valeurs contrôlent la taille maximale du tas Jenkins JVM. Lorsque JAVA_MAX_HEAP_PARAM est défini, sa valeur prime. Dans le cas contraire, 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.

La taille maximale du tas de Jenkins JVM est fixée à 50% de la limite de mémoire du conteneur sans capuche.

JAVA_MAX_HEAP_PARAM réglage de l’exemple: -Xmx512m

CONTAINER_HEAP_PERCENT par défaut: 0,5, ou 50%

JENKINS_MAX_HEAP_UPPER_BOUND_MB paramètres d’exemple: 512 MiB

JAVA_INITIAL_HEAP_PARAM, CONTAINER_INITIAL_PERCENT

Ces valeurs contrôlent la taille initiale du tas Jenkins JVM. Lorsque JAVA_INITIAL_HEAP_PARAM est défini, sa valeur prime. Dans le cas contraire, la taille initiale du tas est calculée dynamiquement comme CONTAINER_INITIAL_PERCENT de la taille maximale du tas calculée dynamiquement.

Le JVM définit par défaut la taille initiale du tas.

JAVA_INITIAL_HEAP_PARAM réglage de l’exemple: -Xms32m

Configuration de l’exemple CONTAINER_INITIAL_PERCENT: 0,1, ou 10%

CONTENEUR_CORE_LIMIT

Lorsqu’il est défini, spécifie un nombre entier de cœurs utilisés pour la taille des nombres de threads JVM internes.

Exemple de réglage: 2

JAVA_TOOL_OPTIONS

Indique les options à appliquer à tous les JVM fonctionnant dans ce conteneur. Il n’est pas recommandé de remplacer cette valeur.

Défaut: -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -Dsun.zip.disableMemoryMapping=true

JAVA_GC_OPTS

Indique les paramètres de collecte des ordures Jenkins JVM. Il n’est pas recommandé de remplacer cette valeur.

Défaut: -XX:+UseParallelGC -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90

JENKINS_JAVA_OVERRIDES

Indique les options supplémentaires pour Jenkins JVM. Ces options sont ajoutées à toutes les autres options, y compris les options Java ci-dessus, et peuvent être utilisées pour remplacer l’une d’entre elles, si nécessaire. Séparez chaque option supplémentaire avec un espace et si une option contient des caractères d’espace, échappez-les avec un backslash.

Exemples de paramètres: -Dfoo -Dbar; -Dfoo=first\ valeur -Dbar=second\ valeur

À UTILISER_JAVA_VERSION

Indique la version de Java à utiliser pour exécuter l’agent dans son conteneur. L’image de base du conteneur a deux versions de java installées: java-11 et java-1.8.0. Lorsque vous étendez l’image de base du conteneur, vous pouvez spécifier n’importe quelle version alternative de Java en utilisant son suffixe associé.

La valeur par défaut est java-11.

Exemple de réglage: java-1.8.0

2.3. Exigences de mémoire de l’agent Jenkins

JVM est utilisé 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.

Le Jenkins JNLP agent JVM 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. Il peut également être plafonné à une limite supérieure ou dépassé entièrement.

Par défaut, tous les autres processus exécutés dans le conteneur d’agent Jenkins, tels que les scripts shell ou les commandes oc exécutées à partir de pipelines, ne peuvent pas utiliser plus de la limite de mémoire de 50% restante sans provoquer une destruction OOM.

Chaque autre processus JVM 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 pourrait être nécessaire d’ajuster cette limite pour de nombreuses charges de travail de construction.

2.4. L’agent Jenkins Gradle construit

Hébergement Gradle construit dans l’agent Jenkins sur Red Hat OpenShift Service sur AWS présente des complications supplémentaires car en plus de l’agent Jenkins JNLP et Gradle JVM, Gradle génère un troisième JVM pour exécuter des tests s’ils sont spécifiés.

Les paramètres suivants sont suggérés comme point de départ pour exécuter Gradle builds dans un agent Jenkins limité à la mémoire sur Red Hat OpenShift Service sur AWS. Ces paramètres peuvent être modifiés au besoin.

  • Assurez-vous que le démon Gradle de longue durée est désactivé en ajoutant org.gradle.daemon=false au fichier gradle.properties.
  • Désactiver l’exécution de build parallèle en s’assurant que org.gradle.parallel=true n’est pas défini dans le fichier gradle.properties et que --parallel n’est pas défini comme argument de ligne de commande.
  • Afin d’empêcher l’exécution des compilations Java, définissez java { options.fork = false } dans le fichier build.gradle.
  • Désactivez plusieurs processus de test supplémentaires en s’assurant que le test {maxParallelForks = 1 } est défini dans le fichier build.gradle.
  • Remplacez les paramètres de mémoire Gradle JVM par les variables d’environnement GRADLE_OPTS, JAVA_OPTS ou JAVA_TOOL_OPTIONS.
  • Définissez la taille maximale du tas et les arguments JVM pour n’importe quel JVM test Gradle en définissant les paramètres maxHeapSize et jvmArgs dans build.gradle, ou via l’argument de ligne de commande -Dorg.gradle.jvmargs.

2.5. Jenkins agent pod rétention

Les pods d’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 de la pod du plugin Kubernetes. La rétention de pod peut être définie pour toutes les constructions Jenkins, avec des dépassements pour chaque modèle de pod. Les comportements suivants sont pris en charge:

  • Conserve toujours la gousse de construction quel que soit le résultat de construction.
  • La valeur par défaut utilise la valeur du plugin, qui est le modèle de pod uniquement.
  • Jamais toujours supprimer la gousse.
  • En cas d’échec, la gousse conserve la gousse si elle échoue pendant la construction.

Il est possible de remplacer la rétention des pods dans le pipeline Jenkinsfile:

podTemplate(label: "mypod",
  cloud: "openshift",
  inheritFrom: "maven",
  podRetention: onFailure(), 
1

  containers: [
    ...
  ]) {
  node("mypod") {
    ...
  }
}
Copy to Clipboard
1
Les valeurs autorisées pour podRetention sont jamais(), onFailure(), always() et default().
Avertissement

Les pods qui sont conservés pourraient continuer à fonctionner et à compter sur les quotas de ressources.

Chapitre 3. La migration de Jenkins vers OpenShift Pipelines ou Tekton

Il est possible de migrer vos flux de travail CI/CD de Jenkins vers Red Hat OpenShift Pipelines, une expérience CI/CD native basée sur le projet Tekton.

3.1. Comparaison des concepts de Jenkins et OpenShift Pipelines

Consultez et comparez les termes équivalents suivants utilisés dans Jenkins et OpenShift Pipelines.

3.1.1. Jenkins terminologie

Jenkins propose des pipelines déclaratifs et scriptés qui sont extensibles à l’aide de bibliothèques et de plugins partagés. Certains termes de base dans Jenkins sont les suivants:

  • Automatise l’ensemble du processus de construction, de test et de déploiement d’applications à l’aide de la syntaxe Groovy.
  • Nœud : une machine capable d’orchestrer ou d’exécuter un pipeline scénarisé.
  • Étape : Un sous-ensemble conceptuellement distinct de tâches exécutées dans un pipeline. Les plugins ou interfaces utilisateur utilisent souvent ce bloc pour afficher l’état ou la progression des tâches.
  • Étape : Une seule tâche qui spécifie l’action exacte à effectuer, soit à l’aide d’une commande ou d’un script.

3.1.2. Terminologie d’OpenShift Pipelines

Les pipelines OpenShift utilisent la syntaxe YAML pour les pipelines déclaratifs et se composent de tâches. Certains termes de base dans les pipelines OpenShift sont les suivants:

  • Pipeline: Un ensemble de tâches dans une série, en parallèle, ou les deux.
  • La tâche : Une séquence d’étapes en tant que commandes, binaires ou scripts.
  • Exécution d’un pipeline avec une ou plusieurs tâches.
  • Exécution d’une tâche avec une ou plusieurs étapes.

    Note

    Il est possible d’initier 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’artéfacts.

  • Espace de travail: Dans les pipelines OpenShift, les espaces de travail sont des blocs conceptuels qui servent les objectifs suivants:

    • Le stockage d’entrées, de sorties et de construction d’artefacts.
    • Espace commun pour partager des données entre les tâches.
    • Des points de montage pour les informations d’identification détenues dans des secrets, des configurations détenues dans des cartes de configuration et des outils communs partagés par une organisation.
    Note

    Dans Jenkins, il n’y a pas d’équivalent direct des espaces de travail OpenShift Pipelines. Le nœud de contrôle peut être considéré comme un espace de travail, car il stocke le référentiel de code cloné, l’historique de construction et les artefacts. Lorsqu’une tâche est assignée à 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 maintient l’historique de construction.

3.1.3. Cartographie des concepts

Les blocs de construction des pipelines Jenkins et OpenShift ne sont pas équivalents, et une comparaison spécifique ne fournit pas une cartographie techniquement précise. Les termes et concepts suivants dans Jenkins et OpenShift Pipelines sont corrélés en général:

Tableau 3.1. Jenkins et OpenShift Pipelines - comparaison de base
JenkinsLignes de conduite OpenShift

Gazoduc

Gazoduc et pipelineRun

L’étape

La tâche

Étape

Étape dans une tâche

3.2. La migration d’un pipeline d’échantillons de Jenkins vers les pipelines OpenShift

Les exemples équivalents suivants vous permettent de migrer vos pipelines de construction, de tester et de déployer des pipelines de Jenkins vers OpenShift Pipelines.

3.2.1. Jenkins pipeline

Envisagez un pipeline Jenkins écrit à Groovy pour la construction, l’essai et le déploiement:

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

3.2.2. Pipeline OpenShift Pipelines

Afin de créer un pipeline dans les pipelines OpenShift équivalent au pipeline Jenkins précédent, vous créez les trois tâches suivantes:

Exemple de fichier de définition de la tâche YAML

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

Exemple de tâche de test YAML fichier de définition

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

Exemple Déployez le fichier de définition de la tâche YAML

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

Il est possible de combiner les trois tâches de manière séquentielle pour former un pipeline dans les pipelines OpenShift:

Exemple: pipeline OpenShift Pipelines pour la construction, les essais 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

3.3. La migration des plugins Jenkins vers Tekton Hub tâches

Il est possible d’étendre la capacité de Jenkins en utilisant des plugins. Afin d’obtenir une extensibilité similaire dans les pipelines OpenShift, utilisez l’une des tâches disponibles sur Tekton Hub.

À titre d’exemple, considérez la tâche git-clone dans Tekton Hub, qui correspond au plugin git pour Jenkins.

Exemple: tâche git-clone de 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

3.4. Extension des capacités OpenShift Pipelines à l’aide de tâches et de scripts personnalisés

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 de test maven

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

Exemple: Exécuter un script shell personnalisé en fournissant son chemin

...
steps:
  image: ubuntu
  script: |
      #!/usr/bin/env bash
      /workspace/my-script.sh
...
Copy to Clipboard

Exemple : Exécuter un script Python personnalisé en l’inscrivant dans le fichier YAML

...
steps:
  image: python
  script: |
      #!/usr/bin/env python3
      print(“hello from python!”)
...
Copy to Clipboard

3.5. Comparaison des modèles d’exécution de Jenkins et OpenShift Pipelines

Jenkins et OpenShift Pipelines offrent des fonctions similaires, mais sont différentes en architecture et en exécution.

Tableau 3.2. Comparaison des modèles d’exécution dans les pipelines Jenkins et OpenShift
JenkinsLignes de conduite OpenShift

Jenkins a un nœud de contrôleur. Jenkins exploite des pipelines et des marches centralement, ou orchestre des emplois en cours d’exécution dans d’autres nœuds.

Les pipelines OpenShift sont sans serveur et distribués, 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 Jenkins à travers le pipeline.

Les pipelines OpenShift adoptent une approche «conteneur d’abord», où chaque étape fonctionne comme un conteneur dans un pod (équivalent aux nœuds dans Jenkins).

L’extensibilité est obtenue en utilisant des plugins.

L’extensibilité est obtenue en utilisant des tâches dans Tekton Hub ou en créant des tâches et des scripts personnalisés.

3.6. Exemples de cas d’utilisation courante

Jenkins et OpenShift Pipelines offrent des capacités pour les cas communs d’utilisation CI/CD, tels que:

  • Compiler, construire et déployer des images à l’aide d’Apache Maven
  • Étendre les capacités de base en utilisant des plugins
  • La réutilisation des bibliothèques partageables et des scripts personnalisés

3.6.1. Exploitation d’un pipeline Maven à Jenkins et OpenShift Pipelines

Il est possible d’utiliser Maven dans les flux de travail Jenkins et OpenShift Pipelines pour compiler, construire et déployer des images. Afin de cartographier votre flux de travail Jenkins existant avec OpenShift Pipelines, considérez les exemples suivants:

Exemple : Compilez et construisez une image et déployez-la dans 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

Exemple : Compilez et construisez une image et déployez-la dans 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

3.6.2. Étendre les capacités de base de Jenkins et OpenShift Pipelines en utilisant des plugins

Jenkins a l’avantage d’un vaste écosystème de nombreux plugins développés au fil des ans par sa vaste base d’utilisateurs. Il est possible de rechercher et de parcourir les plugins dans l’indice Jenkins Plugin.

Les pipelines OpenShift ont également de nombreuses tâches développées et mises en œuvre par les utilisateurs de la communauté et de l’entreprise. Le hub Tekton offre un catalogue de tâches de pipelines OpenShift réutilisables disponibles au public.

En outre, OpenShift Pipelines intègre de nombreux plugins de l’écosystème Jenkins dans ses capacités de base. L’autorisation est par exemple une fonction critique dans les pipelines Jenkins et OpenShift. Alors que Jenkins assure l’autorisation à l’aide du plugin Stratégie d’autorisation basée sur les rôles, OpenShift Pipelines utilise le système intégré de contrôle d’accès basé sur le rôle d’OpenShift.

3.6.3. Code réutilisable dans Jenkins et OpenShift Pipelines

Les bibliothèques partagées Jenkins fournissent un code réutilisable pour certaines parties des pipelines Jenkins. Les bibliothèques sont partagées entre Jenkinsfiles pour 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 Jenkins dans OpenShift Pipelines, vous pouvez réaliser des flux de travail similaires en utilisant des tâches du hub Tekton en combinaison avec des tâches et des scripts personnalisés.

Chapitre 4. Changements importants aux images OpenShift Jenkins

Le Red Hat OpenShift Service sur AWS 4.11 déplace les images OpenShift Jenkins et OpenShift Agent Base vers le référentiel ocp-tools-4 sur register.redhat.io. Il supprime également les images OpenShift Jenkins Maven et NodeJS Agent de sa charge utile:

  • Le Red Hat OpenShift Service sur AWS 4.11 déplace les images OpenShift Jenkins et OpenShift Agent Base vers le référentiel ocp-tools-4 sur Registry.redhat.io afin que Red Hat puisse produire et mettre à jour les images en dehors du service OpenShift Red Hat sur le cycle de vie AWS. Auparavant, ces images figuraient dans le service Red Hat OpenShift sur AWS installer la charge utile et le référentiel openshift4 sur Registry.redhat.io.
  • Le service OpenShift Red Hat sur AWS 4.10 a effacé les images OpenShift Jenkins Maven et NodeJS Agent. Le service Red Hat OpenShift sur AWS 4.11 supprime ces images de sa charge utile. Le Red Hat ne produit plus ces images, et ils ne sont pas disponibles dans le référentiel ocp-tools-4 sur register.redhat.io. Le Red Hat conserve les versions 4.10 et précédentes de ces images pour tout correctif important de bug ou CVE de sécurité, en suivant le Red Hat OpenShift Service sur la stratégie de cycle de vie AWS.

Ces modifications prennent en charge la recommandation de Red Hat OpenShift sur AWS 4.10 d’utiliser plusieurs modèles de Pod de conteneur avec le plugin Jenkins Kubernetes.

4.1. Délocalisation des images OpenShift Jenkins

Le service Red Hat OpenShift sur AWS 4.11 apporte des changements importants à l’emplacement et à la disponibilité d’images spécifiques d’OpenShift Jenkins. De plus, vous pouvez configurer quand et comment mettre à jour ces images.

Ce qui reste le même avec les images OpenShift Jenkins?

  • L’opérateur d’échantillons de cluster gère les objets ImageStream et Template pour l’exploitation des images OpenShift Jenkins.
  • Par défaut, l’objet Jenkins DeploymentConfig à partir du modèle de pod Jenkins déclenche un redéploiement lorsque l’image Jenkins change. Cette image est référencée par défaut par la balise jenkins:2 du flux d’images Jenkins dans l’espace de noms openshift dans le fichier ImageStream YAML dans la charge utile de l’opérateur d’échantillons.
  • Lorsque vous effectuez une mise à niveau à partir de Red Hat OpenShift Service sur AWS 4.10 et plus tôt vers 4.11, les modèles maven et nodejs pod dépréciés sont toujours dans la configuration de l’image par défaut.
  • Lorsque vous effectuez une mise à niveau depuis Red Hat OpenShift Service sur AWS 4.10 et plus tôt vers 4.11, les flux d’images jenkins-agent-maven et jenkins-agent-nodejs existent toujours dans votre cluster. Afin de maintenir ces flux d’images, voir la section suivante, « Que se passe-t-il avec les flux d’images jenkins-agent-agent-nodejs dans l’espace de noms openshift ? »

Comment modifier la matrice de support de l’image OpenShift Jenkins?

Chaque nouvelle image dans le référentiel ocp-tools-4 du registre Registry.redhat.io prend en charge plusieurs versions de Red Hat OpenShift Service sur AWS. Lorsque Red Hat met à jour l’une de ces nouvelles images, il 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é. Initialement, ce changement s’applique à Red Hat OpenShift Service sur AWS 4.11 et plus tard. Il est prévu que ce changement s’applique éventuellement à Red Hat OpenShift Service sur AWS 4.9 et plus tard.

Auparavant, chaque image de Jenkins ne supportait qu’une seule version de Red Hat OpenShift Service sur AWS et Red Hat pouvait mettre à jour ces images de manière séquentielle au fil du temps.

Comment ajouter les objets OpenShift Jenkins et Jenkins Agent Base ImageStream et ImageStreamTag?

En passant d’un flux d’images in-payload à un flux d’images qui fait référence à des images non-payées, Red Hat OpenShift Service sur AWS peut définir des balises de flux d’images supplémentaires. Le Red Hat a créé une série de nouvelles balises de flux d’images pour aller avec les "valeur" existantes: "jenkins:2" et "value": "image-registry.openshift-image-registry.svc:5000/openshift/jenkins-agent-base-rhel8:dernières" balises de flux d’images présentes dans Red Hat OpenShift Service sur AWS 4.10 et antérieures. Ces nouvelles balises de flux d’images répondent à certaines demandes visant à améliorer la façon dont les flux d’images liés à Jenkins sont maintenus.

À propos des nouvelles balises de flux d’images:

déploiement OCP-upgrade-reploy
Afin de mettre à jour votre image Jenkins lorsque vous mettez à niveau Red Hat OpenShift Service sur AWS, utilisez cette balise de flux d’images dans votre configuration de déploiement Jenkins. Cette balise de flux d’images correspond à la balise de flux d’image existante de 2 images du flux d’image jenkins et à la dernière balise de flux d’images du flux d’images jenkins-agent-base-rhel8. Il utilise une balise d’image spécifique à un seul SHA ou un digest 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 de l’opérateur d’échantillons de cluster.
déploiement maintenu par l’utilisateur
Afin de redéployer manuellement Jenkins après avoir mis à jour Red Hat OpenShift Service sur AWS, 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-maintened-upgrade-reploy -n openshift. Lorsque vous émettez cette commande, le service Red Hat OpenShift sur le contrôleur AWS ImageStream accède au registre d’images Registry.redhat.io et stocke toutes les images mises à jour dans la fente du registre d’images OpenShift pour cet objet Jenkins ImageStreamTag. Autrement, si vous n’exécutez pas cette commande, votre configuration de déploiement Jenkins ne déclenche pas un redéploiement.
déploiement prévu de la mise à niveau
Afin de redéployer automatiquement la dernière version de l’image Jenkins lors de sa sortie, utilisez cette balise de flux d’images dans votre configuration de déploiement Jenkins. Cette balise de flux d’images utilise l’importation périodique des balises de flux d’images du service OpenShift Red Hat sur le contrôleur de flux d’images AWS, qui vérifie les changements dans l’image de support. Lorsque l’image change, par exemple, en raison d’un récent avis de sécurité Jenkins, Red Hat OpenShift Service sur AWS déclenche un redéploiement de votre configuration de déploiement Jenkins. Consultez "Configurer l’importation périodique des balises de flux d’images" dans "Ressources supplémentaires".

Ce qui se passe 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 Red Hat OpenShift Service sur AWS ont été dépréciées en 4.10 et sont retirées du service Red Hat OpenShift sur AWS installer la charge utile dans 4.11. Ils n’ont pas d’alternatives définies dans le référentiel ocp-tools-4. Cependant, vous pouvez travailler autour de cela en utilisant le modèle de sidecar décrit dans le sujet "agent Jenkins" mentionné dans la section "Ressources supplémentaires" suivante.

Cependant, l’opérateur d’échantillons de cluster 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 du service OpenShift Red Hat respectif sur les images de charge utile AWS sur register.redhat.io. Ainsi, vous pouvez tirer les mises à jour de ces images en exécutant les commandes suivantes:

$ oc import-image jenkins-agent-nodejs -n openshift
Copy to Clipboard
$ oc import-image jenkins-agent-maven -n openshift
Copy to Clipboard

4.2. Personnalisation de la balise de flux d’images Jenkins

Afin de remplacer le comportement de mise à niveau par défaut et de contrôler la mise à niveau de l’image Jenkins, vous définissez la valeur de balise de flux d’image que vos configurations de déploiement Jenkins utilisent.

Le comportement de mise à niveau par défaut est le comportement qui existait lorsque l’image Jenkins faisait partie de la charge utile d’installation. Les noms de 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’image spécifiques à SHA. Ainsi, lorsque ces balises sont mises à jour avec un nouveau SHA, le Red Hat OpenShift Service sur le contrôleur de changement d’image AWS redéploie automatiquement la configuration de déploiement de Jenkins à partir des modèles associés, tels que jenkins-ephemeral.json ou jenkins-persistent.json.

Dans le cas de nouveaux déploiements, pour remplacer cette valeur par défaut, vous modifiez la valeur du modèle JENKINS_IMAGE_STREAM_TAG dans le modèle jenkins-ephemeral.json Jenkins. À titre d’exemple, remplacer le 2 dans "valeur": "jenkins:2" par l’une des balises de flux d’images suivantes:

  • le déploiement OCP-upgrade, la valeur par défaut, met à jour votre image Jenkins lorsque vous mettez à jour Red Hat OpenShift Service sur AWS.
  • le déploiement de Jenkins vous oblige à redéployer manuellement Jenkins en exécutant $ oc import-image jenkins:user-maintened-upgrade-reploy -n openshift après la mise à niveau Red Hat OpenShift Service sur AWS.
  • le déploiement programmé vérifie périodiquement la combinaison &lt;image&gt;:&lt;tag&gt; pour les modifications et met à niveau l’image lorsqu’elle change. Le contrôleur de changement d’image tire l’image modifiée et redéploie la configuration de déploiement Jenkins fournie par les modèles. Cliquez ici pour plus d’informations sur cette politique d’importation programmée, voir "Ajouter des balises aux flux d’images" dans les "Ressources supplémentaires".
Note

Afin de 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

  • Le service OpenShift Jenkins sur Red Hat OpenShift est disponible sur AWS 4.
  • L’espace de noms où OpenShift Jenkins est déployé.

Procédure

  • Définissez la valeur de balise de flux d’image, remplaçant &lt;namespace&gt; par namespace où OpenShift Jenkins est déployé et &lt;image_stream_tag&gt; par une balise de flux d’image:

    Exemple :

    $ oc patch dc jenkins -p '{"spec":{"triggers":[{"type":"ImageChange","imageChangeParams":{"automatic":true,"containerNames":["jenkins"],"from":{"kind":"ImageStreamTag","namespace":"<namespace>","name":"jenkins:<image_stream_tag>"}}}]}}'
    Copy to Clipboard

    Astuce

    Alternativement, pour modifier la configuration de déploiement Jenkins YAML, entrez $ oc edit dc/jenkins -n &lt;namespace&gt; et mettez à jour la valeur: 'jenkins:&lt;image_stream_tag&gt;' ligne.

Legal Notice

Copyright © 2025 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 Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.

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.

Retour au début
Red Hat logoGithubredditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

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

Rendre l’open source plus inclusif

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

À propos de Red Hat

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

Theme

© 2025 Red Hat