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