Jenkinsfile

在gitlab所要发布的项目根目录中添加如下文件,当然也可以放到gitlab的其它位置(需在Pipeline script from SCM更改git拉取的位置):

jenkinsfile内容
pipeline {
    agent {
        node {
            label 'Jenkins_slave'
        }
    }
    environment {
        HARBOR_CREDS = credentials('b6f01792-9a2e-4eea-b91a-cb8f75fb59b1')
        K8S_CONFIG = credentials('d6be60b7-9b6a-462c-99bc-65a67a6b04a6')
        GIT_TAG = sh(returnStdout: true,script: 'git describe --tags --abbrev=0').trim()
    }
    parameters {
        gitParameter(name: 'BRANCH_TAG',type: 'PT_BRANCH_TAG',branchFilter: 'origin/(.*)', defaultValue: 'master', description: 'Select your branch')
        string(name: 'HARBOR_HOST', defaultValue: 'harbor.dev.uboxol.com', description: 'harbor仓库地址')
        string(name: 'DOCKER_IMAGE', defaultValue: 'dev/contract', description: 'docker镜像名')
        string(name: 'APP_NAME', defaultValue: 'contract', description: 'k8s中标签名')
        string(name: 'K8S_NAMESPACE', defaultValue: 'devops', description: 'k8s的namespace名称')
    }
    stages {

    stage('Git Source') {
        steps{
            script{
                dir("${env.WORKSPACE}"){  
                    git branch: "${params.BRANCH_TAG}", credentialsId: 'ec3ecaa3-3cdf-4add-b6f5-9d672ba78263',url: 'ssh://git@git.uboxol.com:8855/service/contract.git'
                    sh "cp app/Config/app_local.php  app/Config/app.php"
                    sh "cp app/Config/Cons_dev.php  app/Config/Cons.php"
                    sh "cp app/Config/database_dev.php  app/Config/database.php"
                    sh "cp app/Controller/Resource_dev.php  app/Controller/Resource.php"
                }  
            }   
        }
    }

    stage('Docker Build') {
        steps {
            script {
                container('docker') {
                    sh "docker login -u ${HARBOR_CREDS_USR} -p ${HARBOR_CREDS_PSW} ${params.HARBOR_HOST}"
                    sh "sed -i 's#{APP_NAME}#${params.APP_NAME}#g' Dockerfile"
                    sh "docker build -t ${params.HARBOR_HOST}/${params.DOCKER_IMAGE}:${GIT_TAG} ."
                    sh "docker push ${params.HARBOR_HOST}/${params.DOCKER_IMAGE}:${GIT_TAG}"
                    sh "docker rmi ${params.HARBOR_HOST}/${params.DOCKER_IMAGE}:${GIT_TAG}"
                }
            }
        }
    }
    stage('K8s Deploy') {
        steps {
            script {
                container('kubectl') {
                    sh "sed -e 's#{IMAGE_URL}#${params.HARBOR_HOST}/${params.DOCKER_IMAGE}#g;s#{IMAGE_TAG}#${GIT_TAG}#g;s#{APP_NAME}#${params.APP_NAME}#g;s#{SPRING_PROFILE}#master#g' ubox-ht-deployment.tpl > ubox-ht-deployment.yml"
                    sh "sed -e 's#{APP_NAME}#${params.APP_NAME}#g' ubox-ht-svc.tpl > ubox-ht-svc.yml"
                try{
                    sh "kubectl delete rs -l app=${params.APP_NAME} --namespace=${params.K8S_NAMESPACE}"     
                }catch (Exception e) {
                    println e
                }
                try{
                    sh "kubectl delete svc -l name=${params.APP_NAME} --namespace=${params.K8S_NAMESPACE}"    
                }catch (Exception e) {
                    println e
                }
                    sh "kubectl apply -f ubox-ht-deployment.yml --namespace=" + K8S_NAMESPACE
                    sh "kubectl apply -f ubox-ht-svc.yml --namespace=" + K8S_NAMESPACE
                }
            }
        }
    }
}
}

创建Pipeline,并使用SCM

点击New Item

输入item name,并点击流水线,最后点OK

在Pipeline里面选择Pipeline script from SCM,并选择自己存放jenkinsfile的git位置,并点击保存

当然,你也可以直接选择pipeline script:

运行Pipeline

点击自己创建的项目,选择Buiild with Parameters:

输入内容(jenkinsfile中已有默认值),点击build

如果Pipeline使用的g不是scm,而是pipeline script,有一些差别,脚本如下:

pipeline {
    agent {
        node {
            label 'Jenkins_slave'
        }
    }
    environment {
        HARBOR_CREDS = credentials('b6f01792-9a2e-4eea-b91a-cb8f75fb59b1')
        K8S_CONFIG = credentials('d6be60b7-9b6a-462c-99bc-65a67a6b04a6')
    }
    parameters {
        gitParameter(name: 'BRANCH_TAG',type: 'PT_BRANCH_TAG',branchFilter: 'origin/(.*)', defaultValue: 'master', description: 'Select your branch')
        string(name: 'HARBOR_HOST', defaultValue: 'harbor.dev.uboxol.com', description: 'harbor仓库地址')
        string(name: 'DOCKER_IMAGE', defaultValue: 'dev/contract', description: 'docker镜像名')
        string(name: 'APP_NAME', defaultValue: 'contract', description: 'k8s中标签名')
        string(name: 'K8S_NAMESPACE', defaultValue: 'devops', description: 'k8s的namespace名称')
    }
    stages {

    stage('Git Source') {
        steps{
            script{
                dir("${env.WORKSPACE}"){  
                    git branch: "${params.BRANCH_TAG}", credentialsId: 'ec3ecaa3-3cdf-4add-b6f5-9d672ba78263',url: 'ssh://git@git.uboxol.com:8855/service/contract.git'
                    sh "cp app/Config/app_local.php  app/Config/app.php"
                    sh "cp app/Config/Cons_dev.php  app/Config/Cons.php"
                    sh "cp app/Config/database_dev.php  app/Config/database.php"
                    sh "cp app/Controller/Resource_dev.php  app/Controller/Resource.php"
                }  
            }   
        }
    }

    stage('Docker Build') {
        environment {
        GIT_TAG = sh(returnStdout: true,script: 'git describe --tags --abbrev=0').trim()
        }
        steps {
            script {
                container('docker') {
                    sh "docker login -u ${HARBOR_CREDS_USR} -p ${HARBOR_CREDS_PSW} ${params.HARBOR_HOST}"
                    sh "sed -i 's#{APP_NAME}#${params.APP_NAME}#g' Dockerfile"
                    sh "docker build -t ${params.HARBOR_HOST}/${params.DOCKER_IMAGE}:${GIT_TAG} ."
                    sh "docker push ${params.HARBOR_HOST}/${params.DOCKER_IMAGE}:${GIT_TAG}"
                    sh "docker rmi ${params.HARBOR_HOST}/${params.DOCKER_IMAGE}:${GIT_TAG}"
                }
            }
        }
    }
    stage('K8s Deploy') {
        environment {
        GIT_TAG = sh(returnStdout: true,script: 'git describe --tags --abbrev=0').trim()
        }
        steps {
            script {
                container('kubectl') {
                    sh "sed -e 's#{IMAGE_URL}#${params.HARBOR_HOST}/${params.DOCKER_IMAGE}#g;s#{IMAGE_TAG}#${GIT_TAG}#g;s#{APP_NAME}#${params.APP_NAME}#g;s#{SPRING_PROFILE}#master#g' ubox-ht-deployment.tpl > ubox-ht-deployment.yml"
                    sh "sed -e 's#{APP_NAME}#${params.APP_NAME}#g' ubox-ht-svc.tpl > ubox-ht-svc.yml"
                try{
                    sh "kubectl delete rs -l app=${params.APP_NAME} --namespace=${params.K8S_NAMESPACE}"     
                }catch (Exception e) {
                    println e
                }
                try{
                    sh "kubectl delete svc -l name=${params.APP_NAME} --namespace=${params.K8S_NAMESPACE}"    
                }catch (Exception e) {
                    println e
                }
                    sh "kubectl apply -f ubox-ht-deployment.yml --namespace=" + K8S_NAMESPACE
                    sh "kubectl apply -f ubox-ht-svc.yml --namespace=" + K8S_NAMESPACE
                }
            }
        }
    }
}
}
文档更新时间: 2020-07-24 17:10   作者:子木