env in jenkins controller
Jenkins dynamic slave agent
Pod Template in Jenkins UI
Example
from git
pipeline { agent { kubernetes { cloud 'kubernetes' defaultContainer 'maven' instanceCap 1 namespace 'devops' podRetention onFailure() retries 2 yamlFile 'cicd/pod-template.yaml' } } stages { stage('maven & busybox') { steps { container('maven') { sh 'mvn -version' } container('busybox') { sh '/bin/busybox' } } } } }
Inherit from Kubernetes Plugin Template
pipeline { agent { kubernetes { cloud 'kubernetes' defaultContainer 'maven' inheritFrom 'maven' instanceCap 1 namespace 'devops' podRetention onFailure() retries 2 // need to specify command, args yaml ''' spec: containers: - name: maven image: maven:3.8.1-jdk-11 command: - sleep args: - infinity ''' } } stages { stage('maven & golang') { steps { container('maven') { sh 'mvn --version' } sh 'ls -al' } } } }
Multiple Kubernetes Agents
pipeline { agent { kubernetes { cloud 'kubernetes' customWorkspace 'aa/bb' // relative to workingDir, don't use absolute directory, it will lead to java.nio.file.AccessDeniedException defaultContainer 'maven' instanceCap 1 namespace 'devops' podRetention onFailure() retries 2 workingDir '/home/jenkins/agent' yaml ''' apiVersion: v1 kind: Pod metadata: labels: some-label: some-label-value spec: imagePullSecrets: - name: secret-docker-artifactory securityContext: runAsUser: 1000 # default UID of jenkins user in agent image containers: - name: maven image: artifactory.cloud.ingka-system.cn/ccoecn-docker-virtual/aa/maven:3-openjdk-18-slim command: - cat tty: true - name: busybox image: artifactory.cloud.ingka-system.cn/ccoecn-docker-virtual/aa/busybox command: - cat tty: true ''' } } stages { stage('maven & busybox') { steps { sh ''' pwd -P ls -al ''' container(name: 'maven', shell: '/bin/bash') { sh '''#!/bin/sh for v in {0..9};do echo $v; done mvn -version pwd -P ''' } container('busybox') { sh '/bin/busybox' } } } stage('Custom Agent') { agent { kubernetes { defaultContainer 'golang' // ! yaml ''' apiVersion: v1 kind: Pod metadata: labels: some-label: some-label-value spec: imagePullSecrets: - name: secret-docker-artifactory securityContext: runAsUser: 1000 containers: - name: golang image: artifactory.cloud.ingka-system.cn/ccoecn-docker-virtual/aa/golang:latest command: - cat tty: true ''' } } steps { sh '''#!/bin/bash go version ''' } } } }