Jenkins: Kubernetes Plugin

发布时间 2023-04-15 21:56:19作者: ascertain

 

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