|
@@ -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') {
|
|
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') {
|
|
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'
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|