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.

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