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