Authored by jimi

add deploy

  1 +#!groovy
  2 +
  3 +// 此文件适用于的打包对象:
  4 +// 1、需要打包编译的
  5 +// 项目根目录下存在docker.sh与Dockerfile的,其中docker.sh用于打包,Dockerfile用于镜像的制作。
  6 +// 2、不需要编译的项目,直接制作镜像
  7 +// 比如NGINX之类的服务
  8 +
  9 +pipeline {
  10 + agent { label 'master' }
  11 +
  12 + parameters {
  13 + string(name:'projectName', defaultValue: 'qmc', description: 'GITLAB应用名称')
  14 + string(name:'projectGitGroup', defaultValue: 'test', description: 'GITLAB所在的组')
  15 + string(name:'deployName', defaultValue: 'yoho-ops-qmc', description: '应用名称')
  16 + string(name:'imageSource', defaultValue: 'yoho-ops', description: '镜像存储的仓库')
  17 + string(name:'imageVersion', defaultValue: '20190823001', description: '镜像的版本')
  18 + string(name:'branch', defaultValue: 'master', description: 'git分支名称')
  19 + }
  20 +
  21 +
  22 + //常量参数,初始确定后一般不需更改
  23 + environment{
  24 + QA_EMAIL='jimi.ji@yoho.cn'
  25 + NODE_ENV='production'
  26 + KUBERNETES_DEPLOY_YAML='git@git.yoho.cn:docker/k8s-deploy-yaml.git'
  27 + }
  28 +
  29 + options {
  30 + //保持构建的最大个数
  31 + buildDiscarder(logRotator(numToKeepStr: '20'))
  32 + }
  33 +
  34 + stages {
  35 + stage('init env') {
  36 + steps {
  37 + script {
  38 + if(params.projectName==''){
  39 + error "no project ${params.projectName}"
  40 + }
  41 + def IMAGEVERSION = params.imageVersion
  42 + PROJECT_WORK_DIR="${env.WORKSPACE}/${params.projectName}"
  43 + QCLOUD_IMAGE_STORE="ccr.ccs.tencentyun.com/${params.imageSource}/${params.deployName}:${IMAGEVERSION}"
  44 + if(fileExists("${PROJECT_WORK_DIR}/")){
  45 + echo "starting delete the dir ${PROJECT_WORK_DIR}"
  46 + sh "rm -rf ${PROJECT_WORK_DIR}"
  47 + }
  48 + }
  49 + echo "PRINT THE PARA projectName ${params.projectName}......"
  50 + echo "PRINT THE PARA projectGitGroup ${params.projectGitGroup}......"
  51 + echo "PRINT THE PARA deployName ${params.deployName}......"
  52 + echo "PRINT THE PARA imageSource ${params.imageSource}......"
  53 + echo "PRINT THE PARA clusterId ${params.clusterId}......"
  54 + echo "PRINT THE PARA branch ${params.branch}......"
  55 + echo "PRINT THE PARA PROJECT_WORK_DIR ${PROJECT_WORK_DIR}......"
  56 + echo "PRINT THE PARA QCLOUD_IMAGE_STORE ${QCLOUD_IMAGE_STORE}......"
  57 + }
  58 + }
  59 +
  60 + stage('clone code') {
  61 + steps {
  62 + script {
  63 + echo "begin clone the project code"
  64 + sh "git clone -b ${params.branch} git@git.yoho.cn:${params.projectGitGroup}/${params.projectName}.git ${PROJECT_WORK_DIR}"
  65 + echo "starting check the project ${PROJECT_WORK_DIR}"
  66 + if(!fileExists("${PROJECT_WORK_DIR}/Dockerfile")){
  67 + echo "you need Dockerfile file in project ${params.projectName}"
  68 + error "you need Dockerfile file in project ${params.projectName}"
  69 + }
  70 + }
  71 + }
  72 + }
  73 +
  74 + stage('clean package project') {
  75 + steps {
  76 + script {
  77 + if(fileExists("${PROJECT_WORK_DIR}/docker.sh")){
  78 + sh "sh ${PROJECT_WORK_DIR}/docker.sh ${PROJECT_WORK_DIR}"
  79 + }
  80 + }
  81 + }
  82 + }
  83 +
  84 + stage('build push images') {
  85 + steps {
  86 + script {
  87 + sh "docker build -t ${QCLOUD_IMAGE_STORE} ${PROJECT_WORK_DIR}"
  88 + sh "docker push ${QCLOUD_IMAGE_STORE}"
  89 + }
  90 + }
  91 + }
  92 + }
  93 +
  94 + post {
  95 + always {
  96 + script {
  97 + echo "Pipeline is done,begin send mail"
  98 + deleteDir()
  99 + }
  100 + }
  101 + failure {
  102 + script {
  103 + echo 'print all build and delploy info ---'
  104 + echo 'list the package result '
  105 + sh "tree ${PROJECT_WORK_DIR}"
  106 + }
  107 + }
  108 + }
  109 +}
  110 +
  111 +
  112 +
  1 +#!groovy
  2 +pipeline {
  3 + agent { label 'master' }
  4 +
  5 + parameters {
  6 + choice(name:'clusterId',choices:'yoho-ops\nyoho-web-gray\naws\nyoho-web\nyoho-media\nyoho-java\n', description: '集群的信息')
  7 + string(name:'deployName', defaultValue: 'yoho-ops-qmc', description: '应用名称')
  8 + string(name:'imageSource', defaultValue: 'yoho-ops', description: '镜像存储的仓库')
  9 + string(name:'imageVersion', defaultValue: '20190823001', description: '镜像的版本')
  10 + }
  11 +
  12 +
  13 + //常量参数,初始确定后一般不需更改
  14 + environment{
  15 + QA_EMAIL='jimi.ji@yoho.cn'
  16 +
  17 + }
  18 +
  19 + options {
  20 + //保持构建的最大个数
  21 + buildDiscarder(logRotator(numToKeepStr: '20'))
  22 + }
  23 +
  24 + stages {
  25 + stage('init env') {
  26 + steps {
  27 + script {
  28 + if(params.projectName==''){
  29 + error "no project ${params.projectName}"
  30 + }
  31 + def IMAGEVERSION = params.imageVersion
  32 + QCLOUD_IMAGE_STORE="ccr.ccs.tencentyun.com/${params.imageSource}/${params.deployName}:${IMAGEVERSION}"
  33 + DEPLOY_YAML_WORK_DIR="${env.WORKSPACE}/k8s-deploy-yaml"
  34 + if(fileExists("${DEPLOY_YAML_WORK_DIR}/")){
  35 + echo "starting delete the deploy yaml : ${DEPLOY_YAML_WORK_DIR}"
  36 + sh "rm -rf ${DEPLOY_YAML_WORK_DIR}"
  37 + }
  38 + }
  39 + echo "PRINT THE PARA projectName ${params.projectName}......"
  40 + echo "PRINT THE PARA projectGitGroup ${params.projectGitGroup}......"
  41 + echo "PRINT THE PARA deployName ${params.deployName}......"
  42 + echo "PRINT THE PARA imageSource ${params.imageSource}......"
  43 + echo "PRINT THE PARA clusterId ${params.clusterId}......"
  44 + echo "PRINT THE PARA branch ${params.branch}......"
  45 + echo "PRINT THE PARA QCLOUD_IMAGE_STORE ${QCLOUD_IMAGE_STORE}......"
  46 + }
  47 + }
  48 +
  49 + stage('clone code') {
  50 + steps {
  51 + script {
  52 + echo "begin clone the project code"
  53 + sh "git clone ${env.KUBERNETES_DEPLOY_YAML} ${DEPLOY_YAML_WORK_DIR}"
  54 + }
  55 + }
  56 + }
  57 +
  58 + stage('bake deploy yaml') {
  59 + steps {
  60 + script {
  61 + sh "sed -i 's?REPLACE_QCLOUD_IMAGE_STORE?$QCLOUD_IMAGE_STORE?g' ${env.WORKSPACE}/k8s-deploy-yaml/${params.clusterId}/${params.deployName}.yaml"
  62 + }
  63 + }
  64 + }
  65 +
  66 + stage('kubectldeploy project') {
  67 + steps {
  68 + script {
  69 + def DEPLOYYAML = "${env.WORKSPACE}/k8s-deploy-yaml/${params.clusterId}/${params.deployName}.yaml"
  70 + def KUBECONFIG = "${env.WORKSPACE}/k8s-deploy-yaml/${params.clusterId}/kube-config"
  71 + sh "/usr/local/bin/kubectl apply -f $DEPLOYYAML --kubeconfig=$KUBECONFIG"
  72 + }
  73 + }
  74 + }
  75 +
  76 + stage('check service done') {
  77 + steps {
  78 + script {
  79 + sleep(30)
  80 + def KUBECONFIG = "${env.WORKSPACE}/k8s-deploy-yaml/${params.clusterId}/kube-config"
  81 + def CHECKKUBE= "/usr/local/bin/kubectl get deployment --all-namespaces --kubeconfig=$KUBECONFIG |grep ${params.deployName}-deployment | awk '{print \$3,\$4,\$5,\$6}'"
  82 + def SHOWPODINFO= "/usr/local/bin/kubectl get pods --all-namespaces --kubeconfig=$KUBECONFIG |grep ${params.deployName}"
  83 + for(int i = 0;i<=60;i++) {
  84 + def result = sh returnStdout: true ,script: "$CHECKKUBE"
  85 + result = result.trim()
  86 + print "request time is : "+i+"and the result is : "+result
  87 + if(result==''){
  88 + error 'the is no date,please check the result'
  89 + }
  90 + def compare = result.split(" ")
  91 + if(compare[3]==compare[0]&&compare[3]==compare[1]&&compare[3]==compare[2]){
  92 + print "----show the pods info ----"
  93 + sh "$SHOWPODINFO"
  94 + break
  95 + }
  96 + if(i==60){
  97 + error 'TEN MIN OVER,THE DEPLOY FAILURE ,PLEASES CHECK THE LOG'
  98 + }
  99 + sleep(10)
  100 + }
  101 + }
  102 + }
  103 + }
  104 + }
  105 +
  106 + post {
  107 + always {
  108 + script {
  109 + echo "Pipeline is done"
  110 + deleteDir()
  111 + }
  112 + }
  113 + failure {
  114 + script {
  115 + echo 'print all build and delploy info ---'
  116 + echo 'list the deploy yaml '
  117 + sh "cat ${env.WORKSPACE}/k8s-deploy-yaml/${params.clusterId}/${params.deployName}.yaml"
  118 + }
  119 + }
  120 + }
  121 +}
  122 +
  123 +
  124 +