Jenkins动态Salve调度其他集群Docker in Docker

集群使用containerd 作为运行时

调度到test k8s集群构建


test k8s 集群必须要存在这个devops命名空间

docker in docker 模版

pods 模版

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
spec:
  volumes:
  - name: certs-ca
    emptyDir: {}
  - name: certs-client
    emptyDir: {}
  - name: mvn-cache
    persistentVolumeClaim:
      claimName: mvn-cache-pvc
  containers:
  - name: dind
    image: docker:24.0-dind
    securityContext:
      privileged: true
    env:
    - name: DOCKER_TLS_CERTDIR
      value: /certs
    volumeMounts:
    - name: certs-ca
      mountPath: /certs/ca
    - name: certs-client
      mountPath: /certs/client
    tty: true
  - name: docker
    image: docker:24.0
    command:
    - cat
    tty: true
    env:
    - name: DOCKER_TLS_CERTDIR
      value: /certs
    - name: DOCKER_HOST
      value: tcp://localhost:2376
    - name: DOCKER_TLS_VERIFY
      value: "1"
    - name: DOCKER_CERT_PATH
      value: /certs/client
    volumeMounts:
    - name: certs-client
      mountPath: /certs/client
      readOnly: true

最后写jenkinsfile进行构建

c 复制代码
pipeline {
options{
    timestamps ()
    disableConcurrentBuilds()
    buildDiscarder(logRotator(numToKeepStr: '10'))
}

    environment {
    image ="docker.com/xxx/$JOB_NAME:$BUILD_ID"
    }
        agent { 
     kubernetes {
       cloud 'test-k8s'
       inheritFrom 'test'
     	 }
   			 } 
   parameters {
   string(name: 'BRANCH', defaultValue: 'v10.1.3', description: 'Enter the branch name')
 }


   stages {
      stage('Get Code ') {
         steps {
               script {
             def branch = params.BRANCH
          sh("ls -al ${env.WORKSPACE}")
          deleteDir()
          sh("ls -al ${env.WORKSPACE}")

         checkout scmGit(branches: [[name: '*/${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: 'git', url: 'http://dockert-boot.git']])

            
         }
      }
}
stage ('Maven Buid') {
  steps {
       container('mvn') { 
           sh 'mvn clean install -DskipTests'
         }
             }
                 }
                     
                     
        stage('Docker Build and Push') {
            steps {
                container('docker') {  
                    withDockerRegistry(credentialsId: 'hub', url: 'https://hub.docker.com') {
                        script {
                           def builtImage = docker.build("${image}", ".")
                            builtImage.push()
                            sh "docker rmi ${image}"
                           
                        }
                    }
                }
            }
        }
                     
        stage('Connect K8s and TEST') {
            steps {
            container('kubectl') { 
                withKubeConfig(credentialsId: 'test-k8s') {
                   sh 'kubectl -n XX set image deployment/boot  boot=${image}'
                    
                }
                 }
            }
        }                     
    }
}

注意

模版也是

关键点否则无法调度test 集群,jenkins添加多集群管理不在讲了,之前有讲过

js 复制代码
    environment {
    image ="docker.com/xxx/$JOB_NAME:$BUILD_ID"
    }
        agent { 
     kubernetes {
       cloud 'test-k8s'
       inheritFrom 'test'
     	 }
   			 } 
相关推荐
在角落发呆7 小时前
工具配置备份步骤:从手动备份到自动化方案
运维·windows·自动化
百度一下吧8 小时前
Nginx 使用手册:从安装配置到实战部署
运维·nginx
JeJe同学8 小时前
Docker镜像导入、容器启动
linux·运维·docker
回眸&啤酒鸭8 小时前
【回眸】自动化白盒测试落地实战指南
运维·自动化·log4j
闲云野鹤在人间9 小时前
MySQL|从理论、安装、备份到主从复制、MHA高可用详解
linux·运维·数据库·mysql·云计算
资料库0110 小时前
Linux 8个常见运维故障排查
java·linux·运维
机核研创社11 小时前
睡裤明橡筋自动化选型指南与落地四步走
运维·自动化
志栋智能11 小时前
超自动化运维,告别复杂系统的新范式
运维·自动化
零基础12311 小时前
Ubuntu 常用命令汇总
linux·运维·开发语言
Android系统攻城狮11 小时前
Linux Gstreamer深度解析之gst_audio_sink_get_type调用流程与实战(六十五)
linux·运维·服务器·音视频·gstreamer音视频·音视频进阶·gstreamer音视频进阶