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

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 maintient les versions 4.10 et précédentes de ces images pour tous les correctifs de bogues importants ou les CVE de sécurité, conformément à la politique de cycle de vie dédié OpenShift.

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 Toggle word wrap

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 Toggle word wrap

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 de pod Maven qui est prédéfini par OpenShift Dedicated.
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 OpenShift Dedicated 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 l’image OpenShift Dedicated 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 Toggle word wrap
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