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'
     	 }
   			 } 
相关推荐
Jack N5 分钟前
【Strapi 系列之八】二次开发 + 生产部署,Docker + PostgreSQL + Nginx 一把梭
nginx·docker·postgresql·strapi
你看我名字9 分钟前
Kafka 架构、消息可靠性与生产运维:从分区模型到故障治理
运维·架构·kafka
研发小能12 分钟前
DevOps 工具链怎么选?已有工具的企业,先评估整合能力
运维·devops
路由侠内网穿透.13 分钟前
本地部署开源 WSGI HTTP 服务器 Gunicorn 并实现外部访问
运维·服务器·网络·网络协议·http·开源
刚入门的大一新生17 分钟前
Linux-线程控制
linux·运维·服务器
Decay__22 分钟前
03_MySQL 存储引擎与存储管理 —— InnoDB 深入、表空间/ibd、binlog/redo/undo 与双写缓冲
运维·数据库·sql·mysql·架构
Z21-X26 分钟前
云原生运维笔记:打通OpenStack的任督二脉——从Neutron网络踩坑到Swift与Heat硬核实战
运维·笔记·学习·云原生
广州灵眸科技有限公司9 小时前
4G 模组开机自连 systemd 服务方案:基于灵眸科技EAI1106--Core-T
运维·服务器·科技
天远数科10 小时前
零信任架构实战:基于天远企业股权变更构建自动化商业银行对公授信存续期股权异动与资产抽逃预警网关
运维·人工智能·架构·自动化
qq_4017004110 小时前
Linux设备树详解
linux·运维·服务器