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
, etnss
, 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
.
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 Copier lienLien copié sur presse-papiers!
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>
$ docker pull registry.redhat.io/ocp-tools-4/jenkins-rhel8:<image_tag>
docker pull registry.redhat.io/ocp-tools-4/jenkins-agent-base-rhel8:<image_tag>
$ docker pull registry.redhat.io/ocp-tools-4/jenkins-agent-base-rhel8:<image_tag>
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 Copier lienLien copié sur presse-papiers!
Chaque conteneur d'agent Jenkins peut être configuré avec les variables d'environnement suivantes.
Variable | Définition | Exemples de valeurs et de réglages |
---|---|---|
|
Ces valeurs contrôlent la taille maximale du tas de la JVM Jenkins. Si 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. |
|
|
Ces valeurs contrôlent la taille initiale du tas de la JVM Jenkins. Si Par défaut, la JVM définit la taille initiale du tas. |
|
| 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 : |
| 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 : |
| 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 : |
| 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 : |
|
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 : |
La valeur par défaut est
Exemple de réglage : |
5.2.3. Besoins en mémoire de l'agent Jenkins Copier lienLien copié sur presse-papiers!
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 Copier lienLien copié sur presse-papiers!
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 fichiergradle.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 fichiergradle.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 fichierbuild.gradle
. -
Désactiver plusieurs processus de test supplémentaires en s'assurant que
test { maxParallelForks = 1 }
est défini dans le fichierbuild.gradle
. -
Remplacer les paramètres de mémoire de la JVM Gradle par les variables d'environnement
GRADLE_OPTS
,JAVA_OPTS
ouJAVA_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
etjvmArgs
dansbuild.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 Copier lienLien copié sur presse-papiers!
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 :
- 1
- Les valeurs autorisées pour
podRetention
sontnever()
,onFailure()
,always()
etdefault()
.
Les pods conservés peuvent continuer à fonctionner et à être comptabilisés dans les quotas de ressources.