guizhong пре 6 година
родитељ
комит
9a5be85428
1 измењених фајлова са 85 додато и 67 уклоњено
  1. 85 67
      Jenkinsfile

+ 85 - 67
Jenkinsfile

@@ -1,73 +1,91 @@
-pipeline {
-    agent none
-    environment {
-        // 以下环境变量需要根据实际情况修改dev qa pro
-        JNLP_ENV                = 'op'      // 此处t1表示,你需要将应用部署到k8s的t1命名空间下
-        JNLP_TAG                = 'v1.0.0'  // 镜像版本号,如果是开发自己测试,可以默认;如果默认,每次更新镜像都会覆盖
-        JNLP_CONTAINER_PORT     = '8080'    // 实际服务端口,例如resin,端口就是8080
-        JNLP_WAR                = 'ROOT.war' // 项目编译后生成的包名
-        JNLP_INGRESS            = 'nginx'
-        JNLP_SVC_MODE           = 'http'   // tcp服务填写: tcp; http服务填写: http(默认)
-        // 以下是Kubernetes deploy.yaml部署文件,默认情况下不作修改,保持默认值即可 !!!
-        JNLP_IMAGE              = "${JOB_BASE_NAME}"
-        JNLP_NAMESPACE          = "${JNLP_ENV}"
-        JNLP_SERVICE_HOST       = "${JNLP_ENV}-${JOB_BASE_NAME}${JNLP_DOMAIN}"
-        JNLP_CONTROL_NAME       = "${JOB_BASE_NAME}"
-        JNLP_STORAGE_CLASS      = "${JNLP_ENV}"
-        JNLP_SERVICE_PORT       = "${JNLP_CONTAINER_PORT}"
-        JNLP_HUB                = 'hub.evbj.easou.com'
-        JNLP_DOMAIN             = '.evbj.easou.com'
-        JNLP_CONTROL            = 'StatefulSet'  //StatefulSet
-        JNLP_REPLICAS           = '1'
-        JNLP_STORAGE_CAPACITY   = '20Gi'
-        JNLP_MOUNT_PATH         = '/data/log'
-        // 容器状态健康检查,默认容器启动60秒开始检查,如果检查失败会重启容器
-        // 请根据服务启动时间修改检查时间
-        // 后liveness每隔10秒检查服务是否可用,连续3次不可用,立即重启容器
-        JNLP_LIVENESS_INIT      = '60'  
-        JNLP_LIVENESS_PER       = '10'
-        // 容器服务状态健康检查,默认容器启动60秒开始检查,如果检查失败,则该pod不会被加入负载均衡器参与流量调度
-        // 请根据服务初始化时间修改检查时间
-        // 后续readiness每隔10秒检查服务是否可用,连续3次不可用,立即从负载均衡去移除
-        JNLP_READINESS_INIT     = '60' 
-        JNLP_READINESS_PER      = '10'
-    }
-    stages {
+def label = "jenkins-agent"
+podTemplate(name: label , cloud: 'kubernetes',
+  namespace: 'cicd', 
+  label: label,
+  serviceAccount: 'default', 
+  envVars: [
+      // JNLP_ENV环境变量需要根据实际情况修改,例如:qa pro op 
+      // 此处op表示,你需要将应用部署到k8s的op命名空间下
+      envVar(key: "JNLP_ENV", value: "op"),    
+      // 镜像版本号,如果是开发自己测试,可以默认;如果默认,每次更新镜像都会覆盖     
+      envVar(key: "JNLP_TAG", value: "v1.0.0"),
+      // 实际服务端口,例如resin,端口就是8080
+      envVar(key: "JNLP_CONTAINER_PORT", value: "8080"),
+      // 项目编译后生成的包名  
+      envVar(key: "JNLP_WAR", value: "ums.war"),
+      envVar(key: "JNLP_INGRESS", value: "nginx"),
+      // tcp服务填写: tcp; http服务填写: http(默认)
+      envVar(key: "JNLP_SVC_MODE", value: "http"),
+      // 以下是Kubernetes deploy.yaml部署文件,默认情况下不作修改,保持默认值即可 !!!
+      envVar(key: "JNLP_IMAGE", value: "${JOB_BASE_NAME}"),
+      envVar(key: "JNLP_CONTROL_NAME", value: "${JOB_BASE_NAME}"),
+      envVar(key: "JNLP_STORAGE_CLASS", value: "ceph"),
+      envVar(key: "JNLP_HUB", value: "hub.evbj.easou.com"),
+      envVar(key: "JNLP_DOMAIN", value: ".evbj.easou.com"),
+      envVar(key: "JNLP_CONTROL", value: "StatefulSet"),
+      envVar(key: "JNLP_REPLICAS", value: "1"),
+      envVar(key: "JNLP_STORAGE_CAPACITY", value: "100Gi"),
+      envVar(key: "JNLP_MOUNT_PATH", value: "/data/logs"),
+      // 容器状态健康检查,默认容器启动60秒开始检查,如果检查失败会重启容器
+      // 请根据服务启动时间修改检查时间
+      // 后liveness每隔10秒检查服务是否可用,连续3次不可用,立即重启容器
+      envVar(key: "JNLP_LIVENESS_INIT", value: "60"),
+      envVar(key: "JNLP_LIVENESS_PER", value: "10"),
+      // 容器服务状态健康检查,默认容器启动60秒开始检查,如果检查失败,则该pod不会被加入负载均衡器参与流量调度
+      // 请根据服务初始化时间修改检查时间
+      // 后续readiness每隔10秒检查服务是否可用,连续3次不可用,立即从负载均衡去移除
+      envVar(key: "JNLP_READINESS_INIT", value: "60"),
+      envVar(key: "JNLP_READINESS_PER", value: "10")
+  ],
+  containers: [
+    containerTemplate(
+        name: 'jnlp',
+        image: 'hub.evbj.easou.com/dev/jnlp-slave:v2.0.0',
+        ttyEnabled: true,
+        privileged: true,
+        alwaysPullImage: true), 
+    containerTemplate(
+        name: 'jnlp-slave',
+        image: 'hub.evbj.easou.com/dev/jenkins-slave:v3.0.0',
+        command: 'wrapper.sh /bin/sh',
+        ttyEnabled: true,
+        privileged: true,
+        alwaysPullImage: true),
+    containerTemplate(
+        name: 'kubectl',
+        image: 'hub.evbj.easou.com/dev/kubectl:v3.0.0',
+        command: '/bin/sh',
+        ttyEnabled: true,
+        privileged: true,
+        alwaysPullImage: true)
+    ],
+) {
+  node(label) {
         stage('Build') {
-            agent {
-                docker {
-                    image 'hub.evbj.easou.com/dev/jenkins-slave'
-                    args '-v /root/.m2:/root/.m2  -v /root/.docker:/root/.docker --privileged'
-                }
-            }
-            steps {
-                // sh 'printenv |grep JNLP'
-                sh 'mvn clean package -Dmaven.test.skip=true -U'
-                sh 'curl -X GET "http://10.26.32.40:8848/nacos/v1/cs/configs?dataId=Dockerfile&group=touchrs&tenant=d3f327a1-ef56-4904-b802-4ce4306869bc" > Dockerfile '
-                sh 'curl -X GET "http://10.26.32.40:8848/nacos/v1/cs/configs?dataId=ctl.sh&group=dev" > ctl.sh '
-                sh 'sh ctl.sh Dockerfile'
-                sh 'wrapper.sh "docker build -t ${JNLP_HUB}/${JNLP_ENV}/${JNLP_IMAGE}:${JNLP_TAG} ."'
-                sh 'docker push ${JNLP_HUB}/${JNLP_ENV}/${JNLP_IMAGE}:${JNLP_TAG}'
-                sh 'docker rmi ${JNLP_HUB}/${JNLP_ENV}/${JNLP_IMAGE}:${JNLP_TAG} --force'
-            }
+          container('jnlp-slave') {
+                deleteDir()
+                checkout scm
+                sh 'printenv|grep JNLP'
+                sh 'docker --config /etc/docker build -t ${JNLP_HUB}/${JNLP_ENV}/${JNLP_IMAGE}:${JNLP_TAG} . -f Dockerfile'
+                sh 'docker --config /etc/docker push ${JNLP_HUB}/${JNLP_ENV}/${JNLP_IMAGE}:${JNLP_TAG}'
+                sh 'docker --config /etc/docker rmi ${JNLP_HUB}/${JNLP_ENV}/${JNLP_IMAGE}:${JNLP_TAG} --force'
+          }
+        }
+        stage('Pre Deploy') {
+                input "Are you sure deploy to kubernetes ?"
         }
         stage('Deploy') {
-            agent {
-                docker {
-                    image 'hub.evbj.easou.com/dev/kubectl:v3.0.0'
-                }
-            }
-            steps {
-                sh 'curl -X GET "http://10.26.32.40:8848/nacos/v1/cs/configs?dataId=kubettools&group=touchrs&tenant=d3f327a1-ef56-4904-b802-4ce4306869bc" > ppctl.py'
-                // -b 生成部署时的配置文件
-                sh 'python ppctl.py -b'
-                // -a 部署服务到kubernetes平台
-                sh 'python ppctl.py -a'
-                // -c 检查服务部署状态
-                sh 'python ppctl.py -c'
-                // -d 执行域名解析
-                sh 'python ppctl.py -d'
-            }
+          container('kubectl') {
+              // -b 生成部署时的配置文件
+              sh 'python ppctl.py -b'
+              // -a 部署服务到kubernetes平台
+              sh 'python ppctl.py -a'
+              // -c 检查服务部署状态
+              sh 'python ppctl.py -c'
+              // -d 执行域名解析
+              sh 'python ppctl.py -d'
+          }
         }
     }
 }
+