Pipeline 中使用插件进行Docker镜像构建推送及k8s部署

Pipeline 中使用插件进行Docker镜像构建推送及k8s部署

实现功能

将此前页面配置的方式使用Pipeline实现
1、使用环境变量配置镜像Tag及定义Job 执行对应的NAMESPACE
2、在Pipeline中使用插件进行镜像的打包,推送,推荐这种形式,执行sh的方式需要主机登录私有仓库,有安全风险
3、使用Pipeline实现推送k8s变更

所使用的插件及版本

Jenkins 2.235.3
Docker Pipeline 1.25
docker-build-step 2.5
Kubernetes Continuous Deploy 2.3.0
其他依赖插件及版本Bug修复见 Jenkins构建镜像并发布更新至Kubernetes

以下为完整Pipeline

pipeline{
    agent{
        label "master"
    }
    // tool name: 'Docker19.03.14', type: 'dockerTool'
    tools {
        dockerTool 'Docker19.03.14'
    }
    environment{
      NAMESPACE="example-alpha"
      TAG="alpha${BUILD_NUMBER}"
      // NODENAME='cn-beijing.10.2.0.206'
    }
    stages{
        stage("拉取代码"){
            steps{
                echo "========executing 拉取代码========"
                deleteDir()
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'LocalBranch']], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'jenkins', url: 'git@gitlab.example.com:example/example-parent.git']]])
            }
        }
        stage("MVN打包"){
          steps{
              withMaven(jdk: 'jdk11.0.9', maven: 'maven-3.6.3') {
                // 模块化打包
                sh "mvn clean package -Dmaven.test.skip=true -pl com.example:activity -am"
              }
          }
        }
        stage("Build And Push Images"){
          steps{
            dir('servers/activity/activity-rest/target/classes') {
              script{
                // 配置1
                withDockerRegistry(credentialsId: '885xxxxxxxxxxxxx9db', toolName: 'Docker19.03.14', url: 'https://registry-vpc.cn-beijing.aliyuncs.com') {
                    // 构建并Push镜像
                    // 配置2
                    docker.build("registry-vpc.cn-beijing.aliyuncs.com/example/activity:${TAG}").push()
                }
                // 构建完以后,调用其他job,将本地的镜像删除
                build wait: false, propagate: false, job: 'example-DockerImage-Remove'
              }
            }
          }
        }
        stage("Deploy to Kubernetes"){
          steps{
            dir('servers/activity/activity-rest/target/classes') {
              script {
                // 执行cd流程,将更改应用至k8s
                // 配置3
                echo 'Deploy to Kubernetes'
                kubernetesDeploy configs: 'activity.yaml', kubeConfig: [path: ''], kubeconfigId: 'example-cluster', secretName: '', ssh: [sshCredentialsId: '*', sshServer: ''], textCredentials: [certificateAuthorityData: '', clientCertificateData: '', clientKeyData: '', serverUrl: 'https://']
              }
            }
          }
        }
    }
}

配置1:

系统管理–> 全局工具配置 --> Docker安装
为Docker添加一个配置

配置2:

插件Demo及教程

配置3:

可使用流水线语法生成

1赞