jenkins-k8s-Pipeline 流水线模板

pipeline {
   agent {label 'local-slave'}

   environment { 
        def imageName = "${project_name}/${single_project_name}"
        def build_tag = "${registry_url}/${group_id}/${single_project_name}:${BUILD_NUMBER}"
    }
    parameters {
    string(name:'project_name', defaultValue: 'wukong-esthesia', description: '项目project名称')
    string(name:'group_id', defaultValue: 'product', description: '项目groupId')
    string(name:'registry_url', defaultValue: 'hub.xxxapp.com', description: '镜像仓库地址')
    }

    tools {
       maven "maven-3.6.3"
   }
    //git代码拉取
   stages {
      //stage('check out') {
        // steps {
          // checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: 'git@gitlab.xxxapp.com:product/xxx.git']]])
         //}
      //}
      stage("Checkout") {
            steps {
                    checkout([$class: 'GitSCM',
                        branches: [
                            [name: '**']
                        ],
                        doGenerateSubmoduleConfigurations: false,
                        extensions: [[$class: 'LocalBranch', localBranch: "**"]],
                        submoduleCfg: [],
                        userRemoteConfigs: [[ url: 'git@gitlab.xxxapp.com:product/xxx.git']]
                    ])
                }
            }
        stage("Branch To Build") {
            steps {
                    script {
                        def gitBranches = sh(returnStdout: true, script: 'git rev-parse --abbrev-ref --all | sed s:origin/:: | sort -u')
                        env.BRANCH_TO_BUILD = input message: 'Please select a branch', ok: 'Continue',
                            parameters: [choice(name: 'BRANCH_TO_BUILD', choices: gitBranches, description: 'Select the branch to build?')]
                    }
                    git branch: "${env.BRANCH_TO_BUILD}", url: 'git@gitlab.xxxapp.com:product/xxx.git'
                }
            }
            
        //本地镜像删除(如果存在)、生成新镜像
      stage('building dependency ') {
         steps {
            sh '''
                containerStr=`docker ps -a | grep -w ${imageName} | awk '{print $1}'`
                imageStr=`docker images | grep -w $imageName  | awk '{print $3}'`
                echo "container id:$containerStr"
                echo "image id:$imageStr"
                    
                if [ "$imageStr" !=  "" ] ; then
                    if [ "$containerStr" !=  "" ] ; then
                        #停掉容器
                        docker stop `docker ps -a | grep -w ${imageName}  | awk '{print $1}'`
                        
                        #删除容器
                        docker rm `docker ps -a | grep -w ${imageName}  | awk '{print $1}'`
                        
                        #删除镜像
                        docker rmi --force ${imageName}
                    else
                            #删除镜像
                        docker rmi --force ${imageName}
                        
                    fi
                fi
                
        source   /etc/profile
                mvn clean install -Dautoconfig.skip=true -Dmaven.test.skip=false -Dmaven.test.failure.ignore=true -U
                mvn -f  ${single_project_name} clean install dockerfile:build -Dautoconfig.skip=true -Dmaven.test.skip=false -Dmaven.test.failure.ignore=true
            '''
         }
      }
        //删除仓库老镜像、重命名镜像、上传重命名新镜像
        stage('upload image') {
            steps {
               
                script {
                    sh '''
                        #(1)判断本地是否已存在该项目的镜像,存在则先删除
                        regName=${registry_url}/$imageName
                        imageStr=`docker images | grep -w $regName | awk '{print $3}'`
                        if [ "$imageStr" !=  "" ] ; then
                            #将仓库中的镜像名称删除
                            docker rmi ${registry_url}/${group_id}/${single_project_name}:${BUILD_NUMBER}
                        fi

                        #(2)必须要先将镜像的名称给变成  域名或ip/镜像名
                        docker tag  ${imageName}  ${registry_url}/${group_id}/${single_project_name}:${BUILD_NUMBER}

                        #(3)推送到远端仓库
                        docker push  ${registry_url}/${group_id}/${single_project_name}:${BUILD_NUMBER}
                        
                        #(4)删除本地镜像
                        docker rmi $imageName
                        
                        #(5)删除本地镜像
                        docker rmi ${registry_url}/${group_id}/${single_project_name}:${BUILD_NUMBER}
                    '''    
                }
            }
        }
        stage('update yaml'){
            steps{
                sh "sed -i 's/<GROUP_ID>/${group_id}/' k8s.yaml"
                sh "sed -i 's/<PROJECT_NAME>/${single_project_name}/' k8s.yaml"
                sh "sed -i 's/<BUILD_TAG>/${BUILD_NUMBER}/' k8s.yaml"
                sh "sed -i 's/<BRANCH_NAME>/${single_project_name}/' k8s.yaml"
            }        
        }
        // 实际部署的机器上运行,从镜像仓库下载新镜像、运行、启动新镜像
        stage('publish new images') {
            steps {
                echo "6. Deploy Stage"
                
                sh "kubectl apply -f k8s.yaml"
            }
        }
   }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值