Chapitre 5. Jenkins
5.1. Configuration des images Jenkins Copier lienLien copié sur presse-papiers!
OpenShift Container Platform fournit une image de conteneur pour exécuter Jenkins. Cette image fournit une instance de serveur Jenkins, qui peut être utilisée pour mettre en place un flux de base pour les tests, l'intégration et la livraison en continu.
L'image est basée sur les images de base universelles de Red Hat (UBI).
OpenShift Container Platform suit la version LTS de Jenkins. OpenShift Container Platform fournit une image qui contient Jenkins 2.x.
Les images Jenkins d'OpenShift Container Platform sont disponibles sur Quay.io ou registry.redhat.io.
Par exemple :
podman pull registry.redhat.io/ocp-tools-4/jenkins-rhel8:<image_tag>
$ podman pull registry.redhat.io/ocp-tools-4/jenkins-rhel8:<image_tag>
Pour utiliser ces images, vous pouvez soit y accéder directement à partir de ces registres, soit les pousser dans votre registre d'images de conteneurs OpenShift Container Platform. En outre, vous pouvez créer un flux d'images qui pointe vers l'image, soit dans votre registre d'images de conteneurs, soit à l'emplacement externe. Vos ressources OpenShift Container Platform peuvent alors référencer le flux d'images.
Mais pour des raisons pratiques, OpenShift Container Platform fournit des flux d'images dans l'espace de noms openshift
pour l'image de base de Jenkins ainsi que pour les images d'exemple d'agent fournies pour l'intégration d'OpenShift Container Platform avec Jenkins.
5.1.1. Configuration et personnalisation Copier lienLien copié sur presse-papiers!
Vous pouvez gérer l'authentification Jenkins de deux manières :
- L'authentification OAuth de OpenShift Container Platform fournie par le plugin OpenShift Container Platform Login.
- Authentification standard fournie par Jenkins.
5.1.1.1. OpenShift Container Platform Authentification OAuth Copier lienLien copié sur presse-papiers!
L'authentification OAuth est activée en configurant les options sur le panneau Configure Global Security dans l'interface utilisateur Jenkins, ou en définissant la variable d'environnement OPENSHIFT_ENABLE_OAUTH
sur Jenkins Deployment configuration à une valeur autre que false
. Cela active le plugin OpenShift Container Platform Login, qui récupère les informations de configuration à partir des données de pod ou en interagissant avec le serveur API OpenShift Container Platform.
Les informations d'identification valides sont contrôlées par le fournisseur d'identité d'OpenShift Container Platform.
Jenkins prend en charge l'accès par navigateur et hors navigateur.
Les utilisateurs valides sont automatiquement ajoutés à la matrice d'autorisation Jenkins lors de la connexion, où les rôles OpenShift Container Platform dictent les permissions Jenkins spécifiques que les utilisateurs ont. Les rôles utilisés par défaut sont les rôles prédéfinis admin
, edit
, et view
. Le plugin de connexion exécute des requêtes self-SAR contre ces rôles dans le projet ou l'espace de noms dans lequel Jenkins est exécuté.
Les utilisateurs ayant le rôle admin
disposent des autorisations traditionnelles des utilisateurs administratifs de Jenkins. Les utilisateurs ayant le rôle edit
ou view
ont progressivement moins d'autorisations.
Les rôles par défaut de OpenShift Container Platform admin
, edit
, et view
et les permissions Jenkins attribuées à ces rôles dans l'instance Jenkins sont configurables.
Lorsque Jenkins est exécuté dans un pod OpenShift Container Platform, le plugin de connexion recherche une carte de configuration nommée openshift-jenkins-login-plugin-config
dans l'espace de noms dans lequel Jenkins est exécuté.
Si ce plugin trouve et peut lire cette carte de configuration, vous pouvez définir le rôle pour les mappages de permissions Jenkins. Spécifiquement :
- Le plugin de connexion traite les paires de clés et de valeurs dans la carte de configuration comme des mappings de permission Jenkins vers des mappings de rôles OpenShift Container Platform.
- La clé est l'identifiant court du groupe de permission Jenkins et l'identifiant court de la permission Jenkins, ces deux éléments étant séparés par un trait d'union.
-
Si vous souhaitez ajouter l'autorisation
Overall Jenkins Administer
à un rôle OpenShift Container Platform, la clé doit êtreOverall-Administer
. - Pour avoir une idée des groupes de permissions et des ID de permissions disponibles, allez sur la page d'autorisation de la matrice dans la console Jenkins et les ID des groupes et des permissions individuelles dans le tableau qu'ils fournissent.
- La valeur de la paire clé/valeur est la liste des rôles OpenShift Container Platform auxquels la permission doit s'appliquer, chaque rôle étant séparé par une virgule.
-
Si vous souhaitez ajouter l'autorisation
Overall Jenkins Administer
aux rôles par défautadmin
etedit
, ainsi qu'à un nouveau rôle Jenkins que vous avez créé, la valeur de la cléOverall-Administer
seraadmin,edit,jenkins
.
L'utilisateur admin
qui est pré-rempli dans l'image Jenkins d'OpenShift Container Platform avec des privilèges administratifs ne reçoit pas ces privilèges lorsque OpenShift Container Platform OAuth est utilisé. Pour accorder ces permissions, l'administrateur du cluster OpenShift Container Platform doit explicitement définir cet utilisateur dans le fournisseur d'identité OpenShift Container Platform et lui attribuer le rôle admin
.
Les autorisations des utilisateurs Jenkins qui sont stockées peuvent être modifiées après la création initiale des utilisateurs. Le plugin OpenShift Container Platform Login interroge le serveur API OpenShift Container Platform pour les permissions et met à jour les permissions stockées dans Jenkins pour chaque utilisateur avec les permissions récupérées d'OpenShift Container Platform. Si l'interface utilisateur Jenkins est utilisée pour mettre à jour les permissions d'un utilisateur Jenkins, les changements de permissions sont écrasés la prochaine fois que le plugin interroge OpenShift Container Platform.
Vous pouvez contrôler la fréquence de l'interrogation à l'aide de la variable d'environnement OPENSHIFT_PERMISSIONS_POLL_INTERVAL
. L'intervalle d'interrogation par défaut est de cinq minutes.
La manière la plus simple de créer un nouveau service Jenkins utilisant l'authentification OAuth est d'utiliser un modèle.
5.1.1.2. Authentification Jenkins Copier lienLien copié sur presse-papiers!
L'authentification Jenkins est utilisée par défaut si l'image est exécutée directement, sans utiliser de modèle.
Lors du premier démarrage de Jenkins, la configuration est créée avec l'utilisateur et le mot de passe de l'administrateur. Les informations d'identification de l'utilisateur par défaut sont admin
et password
. Configurez le mot de passe par défaut en définissant la variable d'environnement JENKINS_PASSWORD
lorsque vous utilisez, et uniquement lorsque vous utilisez, l'authentification standard de Jenkins.
Procédure
Créez une application Jenkins qui utilise l'authentification Jenkins standard :
oc new-app -e \ JENKINS_PASSWORD=<password> \ ocp-tools-4/jenkins-rhel8
$ oc new-app -e \ JENKINS_PASSWORD=<password> \ ocp-tools-4/jenkins-rhel8
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.2. Variables d'environnement Jenkins Copier lienLien copié sur presse-papiers!
Le serveur Jenkins peut être configuré avec les variables d'environnement suivantes :
Variable | Définition | Exemples de valeurs et de réglages |
---|---|---|
|
Détermine si le plugin OpenShift Container Platform Login gère l'authentification lors de la connexion à Jenkins. Pour l'activer, réglez-le à |
Par défaut : |
|
Le mot de passe de l'utilisateur |
Par défaut : |
|
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 ; si une option contient des caractères d'espacement, échappez-les avec une barre oblique inverse. |
Exemples de paramètres : |
| Spécifie les arguments pour Jenkins. | |
|
Spécifie les plugins Jenkins supplémentaires à installer lors de la première exécution du conteneur ou lorsque |
Exemple de réglage : |
| Spécifie l'intervalle en millisecondes pendant lequel le plugin OpenShift Container Platform Login interroge OpenShift Container Platform sur les permissions associées à chaque utilisateur défini dans Jenkins. |
Valeur par défaut : |
|
Lors de l'exécution de cette image avec un volume persistant (PV) OpenShift Container Platform pour le répertoire de configuration Jenkins, le transfert de la configuration de l'image vers le PV n'est effectué que lors du premier démarrage de l'image, car le PV est attribué lors de la création de la réclamation de volume persistant (PVC). Si vous créez une image personnalisée qui étend cette image et met à jour la configuration dans l'image personnalisée après le démarrage initial, la configuration n'est pas copiée à moins que vous ne définissiez cette variable d'environnement à |
Par défaut : |
|
Lors de l'exécution de cette image avec un PV OpenShift Container Platform pour le répertoire de configuration Jenkins, le transfert des plugins de l'image vers le PV n'est effectué que lors du premier démarrage de l'image car le PV est attribué lors de la création du PVC. Si vous créez une image personnalisée qui étend cette image et met à jour les plugins dans l'image personnalisée après le démarrage initial, les plugins ne sont pas copiés à moins que vous ne définissiez cette variable d'environnement sur |
Par défaut : |
|
Lors de l'exécution de cette image avec un PVC OpenShift Container Platform pour le répertoire de configuration Jenkins, cette variable d'environnement permet au fichier journal des erreurs fatales de persister lorsqu'une erreur fatale se produit. Le fichier d'erreurs fatales est enregistré à l'adresse |
Par défaut : |
|
La définition de cette valeur remplace l'image utilisée pour le conteneur |
Par défaut : |
|
La définition de cette valeur remplace l'image utilisée pour le conteneur |
Par défaut : |
| La définition de cette valeur permet de contrôler le fonctionnement de la JVM lorsqu'elle est exécutée sur un nœud FIPS. Pour plus d'informations, voir Configurer OpenJDK 11 en mode FIPS. |
Par défaut : |
5.1.3. Fournir à Jenkins un accès à l'ensemble des projets Copier lienLien copié sur presse-papiers!
Si vous voulez exécuter Jenkins ailleurs que dans votre projet, vous devez fournir un jeton d'accès à Jenkins pour qu'il puisse accéder à votre projet.
Procédure
Identifiez le secret du compte de service qui dispose des autorisations appropriées pour accéder au projet auquel Jenkins doit accéder :
oc describe serviceaccount jenkins
$ oc describe serviceaccount jenkins
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Dans ce cas, le secret est nommé
jenkins-token-uyswp
.Récupérer le jeton du secret :
oc describe secret <nom du secret ci-dessus>
$ oc describe secret <nom du secret ci-dessus>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Le paramètre token contient la valeur du token dont Jenkins a besoin pour accéder au projet.
5.1.4. Points de montage inter-volumes Jenkins Copier lienLien copié sur presse-papiers!
L'image Jenkins peut être exécutée avec des volumes montés pour permettre un stockage persistant de la configuration :
-
/var/lib/jenkins
est le répertoire de données dans lequel Jenkins stocke les fichiers de configuration, y compris les définitions de tâches.
5.1.5. Personnalisation de l'image Jenkins grâce à la méthode "source-to-image Copier lienLien copié sur presse-papiers!
Pour personnaliser l'image Jenkins officielle d'OpenShift Container Platform, vous pouvez utiliser l'image en tant que source-to-image (S2I).
Vous pouvez utiliser S2I pour copier vos définitions de tâches Jenkins personnalisées, ajouter des plugins supplémentaires ou remplacer le fichier config.xml
fourni par votre propre configuration.
Pour inclure vos modifications dans l'image Jenkins, vous devez disposer d'un dépôt Git avec la structure de répertoire suivante :
plugins
- Ce répertoire contient les plugins binaires Jenkins que vous souhaitez copier dans Jenkins.
plugins.txt
- Ce fichier liste les plugins que vous souhaitez installer en utilisant la syntaxe suivante :
pluginId:pluginVersion
pluginId:pluginVersion
configuration/jobs
- Ce répertoire contient les définitions des tâches de Jenkins.
configuration/config.xml
- Ce fichier contient votre configuration Jenkins personnalisée.
Le contenu du répertoire configuration/
est copié dans le répertoire /var/lib/jenkins/
, de sorte que vous pouvez également y inclure des fichiers supplémentaires, tels que credentials.xml
.
L'exemple de configuration de construction personnalise l'image Jenkins dans OpenShift Container Platform
- 1
- Le paramètre
source
définit le dépôt Git source avec la disposition décrite ci-dessus. - 2
- Le paramètre
strategy
définit l'image originale de Jenkins à utiliser comme image source pour la construction. - 3
- Le paramètre
output
définit l'image Jenkins personnalisée résultante que vous pouvez utiliser dans les configurations de déploiement à la place de l'image Jenkins officielle.
5.1.6. Configuration du plugin Jenkins Kubernetes Copier lienLien copié sur presse-papiers!
L'image OpenShift Jenkins inclut le plugin Kubernetes préinstallé pour Jenkins afin que les agents Jenkins puissent être provisionnés dynamiquement sur plusieurs hôtes de conteneurs en utilisant Kubernetes et OpenShift Container Platform.
Pour utiliser le plugin Kubernetes, OpenShift Container Platform fournit une image OpenShift Agent Base qui peut être utilisée comme agent Jenkins.
OpenShift Container Platform 4.11 déplace les images OpenShift Jenkins et OpenShift Agent Base vers le dépôt ocp-tools-4
à l'adresse registry.redhat.io
afin que Red Hat puisse produire et mettre à jour les images en dehors du cycle de vie d'OpenShift Container Platform. Auparavant, ces images se trouvaient dans la charge utile d'installation d'OpenShift Container Platform et dans le dépôt openshift4
à l'adresse registry.redhat.io
.
Les images OpenShift Jenkins Maven et NodeJS Agent ont été supprimées de la charge utile OpenShift Container Platform 4.11. Red Hat ne produit plus ces images et elles ne sont pas disponibles dans le dépôt ocp-tools-4
à l'adresse registry.redhat.io
. Red Hat maintient les versions 4.10 et antérieures de ces images pour toutes les corrections de bogues importantes ou les CVE de sécurité, en suivant la politique de cycle de vie d'OpenShift Container Platform.
Pour plus d'informations, voir le lien "Changements importants pour OpenShift Jenkins images" dans la section suivante "Ressources supplémentaires".
Les images des agents Maven et Node.js sont automatiquement configurées en tant qu'images de modèle de pod Kubernetes dans la configuration d'image Jenkins de la plateforme OpenShift Container pour le plugin Kubernetes. Cette configuration comprend des étiquettes pour chaque image que vous pouvez appliquer à tous vos travaux Jenkins sous leur paramètre Restrict where this project can be run
. Si le label est appliqué, les travaux s'exécutent sous un pod OpenShift Container Platform exécutant l'image d'agent correspondante.
Dans OpenShift Container Platform 4.10 et plus, le modèle recommandé pour exécuter des agents Jenkins à l'aide du plugin Kubernetes est d'utiliser des modèles de pods avec les conteneurs jnlp
et sidecar
. Le conteneur jnlp
utilise l'image de l'agent Jenkins Base d'OpenShift Container Platform pour faciliter le lancement d'un pod séparé pour votre construction. L'image du conteneur sidecar
contient les outils nécessaires pour construire dans une langue particulière au sein du pod séparé qui a été lancé. De nombreuses images de conteneurs du Red Hat Container Catalog sont référencées dans les flux d'images d'exemple dans l'espace de noms openshift
. L'image Jenkins d'OpenShift Container Platform possède un modèle de pod nommé java-build
avec des conteneurs sidecar qui démontrent cette approche. Ce modèle de pod utilise la dernière version de Java fournie par le flux d'images java
dans l'espace de noms openshift
.
L'image Jenkins permet également l'auto-découverte et l'auto-configuration d'images d'agents supplémentaires pour le plugin Kubernetes.
Avec le plugin de synchronisation OpenShift Container Platform, au démarrage de Jenkins, l'image Jenkins recherche dans le projet qu'elle exécute, ou dans les projets listés dans la configuration du plugin, les éléments suivants :
-
Flux d'images dont l'étiquette
role
est définie surjenkins-agent
. -
Balises de flux d'images avec l'annotation
role
fixée àjenkins-agent
. -
Config maps with the
role
label set tojenkins-agent
.
Lorsque l'image Jenkins trouve un flux d'images avec l'étiquette appropriée, ou une balise de flux d'images avec l'annotation appropriée, elle génère la configuration du plugin Kubernetes correspondant. De cette façon, vous pouvez affecter vos travaux Jenkins à l'exécution d'un pod utilisant l'image de conteneur fournie par le flux d'images.
Les références de nom et d'image du flux d'images ou de la balise de flux d'images sont mises en correspondance avec les champs de nom et d'image dans le modèle de pod du plugin Kubernetes. Vous pouvez contrôler le champ label du modèle de pod de plugin Kubernetes en définissant une annotation sur l'objet flux d'images ou balise de flux d'images avec la clé agent-label
. Sinon, le nom est utilisé comme étiquette.
Ne vous connectez pas à la console Jenkins pour modifier la configuration du modèle de pod. Si vous le faites après la création du modèle de pod, et que le plugin OpenShift Container Platform Sync détecte que l'image associée au flux d'images ou à la balise de flux d'images a changé, il remplace le modèle de pod et écrase ces changements de configuration. Vous ne pouvez pas fusionner une nouvelle configuration avec la configuration existante.
Envisagez l'approche de la carte de configuration si vous avez des besoins de configuration plus complexes.
Lorsqu'elle trouve une carte de configuration avec l'étiquette appropriée, l'image Jenkins suppose que toutes les valeurs de la charge utile de données clé-valeur de la carte de configuration contiennent un langage de balisage extensible (XML) cohérent avec le format de configuration pour Jenkins et les modèles de pods du plugin Kubernetes. L'un des principaux avantages des cartes de configuration par rapport aux flux d'images et aux balises de flux d'images est que vous pouvez contrôler tous les paramètres du modèle de pod plugin Kubernetes.
Exemple de carte de configuration pour jenkins-agent
L'exemple suivant montre deux conteneurs qui référencent des flux d'images dans l'espace de noms openshift
. L'un des conteneurs gère le contrat JNLP pour lancer des pods en tant qu'agents Jenkins. L'autre conteneur utilise une image contenant des outils de construction de code dans un langage de codage particulier :
Ne vous connectez pas à la console Jenkins pour modifier la configuration du modèle de pod. Si vous le faites après la création du modèle de pod, et que le plugin OpenShift Container Platform Sync détecte que l'image associée au flux d'images ou à la balise de flux d'images a changé, il remplace le modèle de pod et écrase ces changements de configuration. Vous ne pouvez pas fusionner une nouvelle configuration avec la configuration existante.
Envisagez l'approche de la carte de configuration si vous avez des besoins de configuration plus complexes.
Une fois installé, le plugin OpenShift Container Platform Sync surveille le serveur API d'OpenShift Container Platform pour les mises à jour des flux d'images, des balises de flux d'images et des cartes de configuration et ajuste la configuration du plugin Kubernetes.
Les règles suivantes s'appliquent :
-
La suppression de l'étiquette ou de l'annotation de la carte de configuration, du flux d'images ou de la balise de flux d'images supprime toute
PodTemplate
existante de la configuration du plugin Kubernetes. - Si ces objets sont supprimés, la configuration correspondante est supprimée du plugin Kubernetes.
-
Si vous créez des objets
ConfigMap
,ImageStream
, ouImageStreamTag
correctement étiquetés ou annotés, ou si vous ajoutez des étiquettes après leur création initiale, cela entraîne la création d'unPodTemplate
dans la configuration de Kubernetes-plugin. -
Dans le cas du formulaire
PodTemplate
by config map, les modifications apportées aux données de la config map pourPodTemplate
sont appliquées aux paramètres dePodTemplate
dans la configuration du plugin Kubernetes. Les modifications remplacent également toutes les modifications apportées àPodTemplate
via l'interface utilisateur Jenkins entre les modifications apportées à la carte de configuration.
Pour utiliser une image de conteneur comme agent Jenkins, l'image doit exécuter l'agent comme point d'entrée. Pour plus de détails, voir la documentation officielle de Jenkins.
Ressources complémentaires
5.1.7. Permissions Jenkins Copier lienLien copié sur presse-papiers!
Si, dans la carte de configuration, l'élément <serviceAccount>
du modèle XML de pod est le compte de service OpenShift Container Platform utilisé pour le pod résultant, les informations d'identification du compte de service sont montées dans le pod. Les permissions sont associées au compte de service et contrôlent quelles opérations contre le maître OpenShift Container Platform sont autorisées à partir du pod.
Considérons le scénario suivant avec des comptes de service utilisés pour le pod, qui est lancé par le plugin Kubernetes qui s'exécute dans l'image Jenkins d'OpenShift Container Platform.
Si vous utilisez le modèle d'exemple pour Jenkins fourni par OpenShift Container Platform, le compte de service jenkins
est défini avec le rôle edit
pour le projet dans lequel Jenkins s'exécute, et le pod Jenkins maître a ce compte de service monté.
Les deux modèles de pods Maven et NodeJS par défaut qui sont injectés dans la configuration Jenkins sont également configurés pour utiliser le même compte de service que le maître Jenkins.
- Tous les modèles de pods qui sont automatiquement découverts par le plugin de synchronisation d'OpenShift Container Platform parce que leurs flux d'images ou leurs balises de flux d'images ont l'étiquette ou les annotations requises sont configurés pour utiliser le compte de service principal Jenkins comme compte de service.
-
Pour les autres façons de fournir une définition de modèle de pod dans Jenkins et le plugin Kubernetes, vous devez spécifier explicitement le compte de service à utiliser. Ces autres moyens incluent la console Jenkins, le pipeline DSL
podTemplate
fourni par le plugin Kubernetes, ou l'étiquetage d'une carte de configuration dont les données sont la configuration XML d'un modèle de pod. -
Si vous ne spécifiez pas de valeur pour le compte de service, le compte de service
default
est utilisé. - Assurez-vous que le compte de service utilisé a les permissions, les rôles, etc. nécessaires définis dans OpenShift Container Platform pour manipuler les projets que vous choisissez de manipuler à l'intérieur du pod.
5.1.8. Création d'un service Jenkins à partir d'un modèle Copier lienLien copié sur presse-papiers!
Les modèles fournissent des champs de paramètres pour définir toutes les variables d'environnement avec des valeurs par défaut prédéfinies. OpenShift Container Platform fournit des modèles pour faciliter la création d'un nouveau service Jenkins. Les modèles Jenkins doivent être enregistrés dans le projet par défaut openshift
par votre administrateur de cluster lors de la configuration initiale du cluster.
Les deux modèles disponibles définissent tous deux une configuration de déploiement et un service. Les modèles diffèrent par leur stratégie de stockage, qui détermine si le contenu de Jenkins persiste après le redémarrage d'un pod.
Un pod peut être redémarré lorsqu'il est déplacé vers un autre nœud ou lorsqu'une mise à jour de la configuration de déploiement déclenche un redéploiement.
-
jenkins-ephemeral
utilise un stockage éphémère. Au redémarrage du pod, toutes les données sont perdues. Ce modèle n'est utile que pour le développement ou les tests. -
jenkins-persistent
utilise un volume persistant (PV). Les données survivent à un redémarrage du pod.
Pour utiliser un magasin PV, l'administrateur du cluster doit définir un pool PV dans le déploiement d'OpenShift Container Platform.
Après avoir sélectionné le modèle que vous souhaitez, vous devez l'instancier pour pouvoir utiliser Jenkins.
Procédure
Créez une nouvelle application Jenkins en utilisant l'une des méthodes suivantes :
UN PV :
oc new-app jenkins-persistent
$ oc new-app jenkins-persistent
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ou un volume de type
emptyDir
dont la configuration ne persiste pas lors des redémarrages de pods :oc new-app jenkins-ephemeral
$ oc new-app jenkins-ephemeral
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Avec les deux modèles, vous pouvez lancer oc describe
sur eux pour voir tous les paramètres disponibles pour la surcharge.
Par exemple :
oc describe jenkins-ephemeral
$ oc describe jenkins-ephemeral
5.1.9. Utilisation du plugin Jenkins Kubernetes Copier lienLien copié sur presse-papiers!
Dans l'exemple suivant, l'objet openshift-jee-sample
BuildConfig
provoque le provisionnement dynamique d'un pod d'agent Maven Jenkins. Le pod clone du code source Java, construit un fichier WAR et provoque l'exécution d'un second BuildConfig
, openshift-jee-sample-docker
. Le second BuildConfig
place le nouveau fichier WAR dans une image de conteneur.
OpenShift Container Platform 4.11 a supprimé les images OpenShift Jenkins Maven et NodeJS Agent de son payload. Red Hat ne produit plus ces images et elles ne sont pas disponibles dans le dépôt ocp-tools-4
à l'adresse registry.redhat.io
. Red Hat maintient les versions 4.10 et antérieures de ces images pour toutes les corrections de bogues importantes ou les CVE de sécurité, en suivant la politique de cycle de vie de OpenShift Container Platform.
Pour plus d'informations, voir le lien "Changements importants pour OpenShift Jenkins images" dans la section suivante "Ressources supplémentaires".
Exemple de BuildConfig
qui utilise le plugin Jenkins Kubernetes
Il est également possible d'outrepasser la spécification du pod de l'agent Jenkins créé dynamiquement. L'exemple suivant est une modification de l'exemple précédent, qui surcharge la mémoire du conteneur et spécifie une variable d'environnement.
Exemple de BuildConfig
qui utilise le plugin Jenkins Kubernetes, en spécifiant la limite de mémoire et la variable d'environnement
- 1
- Un nouveau modèle de pod appelé
mypod
est défini dynamiquement. Le nom du nouveau modèle de pod est référencé dans la strophe du nœud. - 2
- La valeur
cloud
doit être réglée suropenshift
. - 3
- Le nouveau modèle de pod peut hériter sa configuration d'un modèle de pod existant. Dans ce cas, il hérite du modèle de pod Maven qui est prédéfini par OpenShift Container Platform.
- 4
- Cet exemple remplace les valeurs du conteneur préexistant et doit être spécifié par son nom. Toutes les images de l'agent Jenkins livrées avec OpenShift Container Platform utilisent le nom de conteneur
jnlp
. - 5
- Spécifiez à nouveau le nom de l'image du conteneur. Il s'agit d'un problème connu.
- 6
- Une demande de mémoire de
512 Mi
est spécifiée. - 7
- Une limite de mémoire de
512 Mi
est spécifiée. - 8
- Une variable d'environnement
CONTAINER_HEAP_PERCENT
, avec la valeur0.25
, est spécifiée. - 9
- La strophe de nœud fait référence au nom du modèle de pod défini.
Par défaut, le pod est supprimé lorsque la construction est terminée. Ce comportement peut être modifié avec le plugin ou dans un fichier Jenkins du pipeline.
Upstream Jenkins a récemment introduit un format déclaratif YAML pour définir un DSL de pipeline podTemplate
en ligne avec vos pipelines. Un exemple de ce format, utilisant le modèle de pod java-builder
défini dans l'image Jenkins de OpenShift Container Platform :
Ressources complémentaires
5.1.10. Besoins en mémoire de Jenkins Copier lienLien copié sur presse-papiers!
Lorsqu'il est déployé par les modèles Jenkins Ephemeral ou Jenkins Persistent fournis, la limite de mémoire par défaut est de 1 Gi
.
Par défaut, tous les autres processus qui s'exécutent dans le conteneur Jenkins ne peuvent pas utiliser plus de 512 MiB
de mémoire. S'ils ont besoin de plus de mémoire, le conteneur s'arrête. Il est donc fortement recommandé que les pipelines exécutent des commandes externes dans un conteneur d'agent dans la mesure du possible.
Et si les quotas de Project
le permettent, voir les recommandations de la documentation Jenkins sur ce qu'un maître Jenkins devrait avoir du point de vue de la mémoire. Ces recommandations préconisent d'allouer encore plus de mémoire au maître Jenkins.
Il est recommandé de spécifier les valeurs de demande et de limite de mémoire sur les conteneurs d'agents créés par le plugin Jenkins Kubernetes. Les administrateurs peuvent définir des valeurs par défaut pour chaque image d'agent via la configuration de Jenkins. Les paramètres de demande et de limite de mémoire peuvent également être modifiés pour chaque conteneur.
Vous pouvez augmenter la quantité de mémoire disponible pour Jenkins en remplaçant le paramètre MEMORY_LIMIT
lors de l'instanciation du modèle Jenkins Ephemeral ou Jenkins Persistent.