Showing
2 changed files
with
236 additions
and
0 deletions
Docker-Build-Project/Jenkinsfile
0 → 100644
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 | + |
Docker-Deploy-Project/Jenkinsfile
0 → 100644
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 | + |
-
Please register or login to post a comment