跳至主要內容
Jenkins agent镜像构建
FROM jenkins/inbound-agent:latest-jdk11

ARG MAVEN_VERSION=3.6.3
ARG KUBECTL_VERSION=v1.22.1

USER root

# tool

RUN sed -i "s/deb.debian.org/mirrors.aliyun.com/g" /etc/apt/sources.list
RUN sed -i "s/security.debian.org/mirrors.aliyun.com\/debian-security/g" /etc/apt/sources.list


RUN apt-get update && \
  apt-get install -y curl vim git && \
  apt-get clean

# maven
RUN curl -OL https://archive.apache.org/dist/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz && \
  tar -zxf ./apache-maven-${MAVEN_VERSION}-bin.tar.gz && \
  mv apache-maven-${MAVEN_VERSION} /usr/local && \
  rm -f apache-maven-${MAVEN_VERSION}-bin.tar.gz && \
  ln -s /usr/local/apache-maven-${MAVEN_VERSION}/bin/mvn /usr/bin/mvn && \
  ln -s /usr/local/apache-maven-${MAVEN_VERSION} /usr/local/apache-maven && \
  mkdir -p /home/jenkins/.m2  && \
  chown -R jenkins:jenkins  /home/jenkins/.m2

# kubectl
RUN curl -OL https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl && \
  chmod +x ./kubectl && \
  mv ./kubectl /usr/local/bin/kubectl && \
  ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
  echo $TZ > /etc/timezone

VOLUME [ "/home/jenkins/.m2" ]

# USER jenkins

ENTRYPOINT ["/usr/local/bin/jenkins-agent"]

# docker build --build-arg KUBECTL_VERSION=v1.22.3 --build-arg MAVEN_VERSION=3.6.3 -t "yhma/kubectl-maven-agent" .
# docker push yhma/kubectl-maven-agent


yhma小于 1 分钟Jenkins
Jenkins pipeline示例
def label = "slave-${UUID.randomUUID().toString()}"
 
podTemplate(label: label, containers: [
  containerTemplate(name: 'maven', image: 'maven:latest', command: 'cat', ttyEnabled: true),
  containerTemplate(name: 'docker', image: 'docker:latest', command: 'cat', ttyEnabled: true),
  containerTemplate(name: 'kubectl', image: 'kubesphere/kubectl', command: 'cat', ttyEnabled: true)
], serviceAccount: 'jenkins', volumes: [
  hostPathVolume(mountPath: '/root/.m2', hostPath: '/root/.m2'),
  hostPathVolume(mountPath: '/root/.kube', hostPath: '/root/.kube'),
  hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock')
]) {
  node(label) {
 
    stage('单元测试') {
      echo "测试阶段"
    }
    stage('代码编译打包') {
      container('maven') {
          
        //   git 'https://github.com/mybatis/spring-boot-starter.git'
          
          withCredentials([file(credentialsId: 'maven-settings', variable: 'SETTINGS')]) {
              echo "查看 K8S 集群 Pod 列表"
              sh "mkdir -p ~/.m2 && cp ${SETTINGS} ~/.m2/settings.xml"
            //   sh 'mvn clean compile -DskipTests -T10'
            }

      }
    }
    stage('构建 Docker 镜像') {
      container('docker') {
        echo "构建 Docker 镜像阶段"
        sh 'docker ps'
      }
    }
    stage('运行 Kubectl') {
      container('kubectl') {
        echo "查看 K8S 集群 Pod 列表"
        // sh 'echo $USER'
        sh "kubectl get pods"
      }
    }
  }
}

yhma小于 1 分钟Jenkins