缠丝猫 发表于 2023-3-9 08:28:46

轻量级CI/CD发布部署环境搭建及使用_07_jenkins配置pipeline

轻量级CI/CD发布部署环境搭建及使用_07_jenkins配置pipeline
尽自己的绵薄之力,为开源技术分享添砖加瓦
1,设置pipelinehttps://img2023.cnblogs.com/blog/3030104/202303/3030104-20230308101201578-739619062.png 
 2,设置git仓库地址、用户名、密码
https://img2023.cnblogs.com/blog/3030104/202303/3030104-20230308101318210-705019420.png
 
3,生成流水线脚本
https://img2023.cnblogs.com/blog/3030104/202303/3030104-20230308101525574-388088734.png
 
 4,编写pipeline_配置发布服务器、harbor、jar包目录等
 https://img2023.cnblogs.com/blog/3030104/202303/3030104-20230308101759221-1208082348.png
 
5,编写pipeline_配置dockerfile、docker编译命令等
https://img2023.cnblogs.com/blog/3030104/202303/3030104-20230308101925944-1814879038.png
 6,编写pipeline_配置连接部署服务器、docker启动、删除容器命令等https://img2023.cnblogs.com/blog/3030104/202303/3030104-20230308102333400-711596997.png
============================部署后端pieplie范例脚本============================
相关变量都以xxx代替,请自行替换
1 pipeline{
2   agent any
3   environment {
4         HARBOR_HOST = "192.168.xxx.xxx:xxx"
5         HARBOR_USER = "xxx"
6         HARBOR_PASSWORD = "xxx"
7         HARBOR_PROJECT = "xxx"
8         PROJECT_NAME = "xxx"
9         DEPLOY_ENV = "test"
10         DEPLOY_PORT = "xxx"
11         PACKAGE_PATH = "./xxx/xxx/xxx.jar"
12         BUILD_VERSION = createVersion()
13         CLEAR_NONE_SSH = "n=`docker images | grep'<none>' | wc -l`; if [ \$n -gt 0 ]; then docker rmi `docker images | grep'<none>' | awk '{print \$3}'`; fi"
14         DEPLOY_REMOTE_01 = "192.168.100.xxx"
15         DEPLOY_REMOTE_02 = "192.168.100.xxx"
16   }
17   tools{
18         // 添加环境,名称为Jenkins全局配置中自己定义的别名
19         jdk 'jdk1.8.0_11'
20         maven 'apache-maven-3.6.2'
21   }
22   stages{
23         stage("拉取代码"){
24             //check CODE
25             steps {
26               checkout([$class: 'GitSCM', branches: [], extensions: [], userRemoteConfigs: []])
27             }
28         }
29         stage("maven构建"){
30             steps {
31               sh "mvn clean package -P ${DEPLOY_ENV} -P jdk8 -Dmaven.test.skip=true"
32             }
33         }
34         stage("构建docker镜像,并push到harbor当中"){
35             //docker push
36             steps {
37               sh '''cat << EOF > Dockerfile
38               FROM openjdk:8-jre
39               MAINTAINER hawksoft hawksoft@qq.com
40               RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone
41               COPY ${PACKAGE_PATH} /app.jar
42               ENTRYPOINT ["java", "-Xmx512m", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]
43               CMD ["--spring.profiles.active=${DEPLOY_ENV}"]
44               '''
45               sh 'cat Dockerfile'
46               sh 'ls -l'
47               sh "docker build -t ${HARBOR_HOST}/${HARBOR_PROJECT}/${PROJECT_NAME}:$BUILD_VERSION ."
48               sh "docker login -u ${HARBOR_USER} -p '${HARBOR_PASSWORD}'" + " ${HARBOR_HOST}"
49               sh "docker push ${HARBOR_HOST}/${HARBOR_PROJECT}/${PROJECT_NAME}:$BUILD_VERSION"
50               sh "docker rmi ${HARBOR_HOST}/${HARBOR_PROJECT}/${PROJECT_NAME}:$BUILD_VERSION"
51             }
52         }
53         stage("拉取docker镜像,并部署发布"){
54             steps {
55               deployAndRun("${DEPLOY_REMOTE_01}")
56               deployAndRun("${DEPLOY_REMOTE_02}")
57             }
58         }
59   }
60 }
61
62 // 定义一个版本号作为当次构建的版本,输出结果 20221209248576_103
63 def createVersion() {
64   return new Date().format('yyyyMMddHHmmss') + "_${env.BUILD_ID}"
65 }
66
67 // 声明一个方法,其中 withCredentials 是 Jenkins 凭据管理中添加过的凭据
68 def conRemote(ip){
69   def remote = [:]
70   remote.name = "test--->>>${PROJECT_NAME}------>>>>>>>${ip}"
71   remote.host = ip
72   remote.port = xxx
73   remote.allowAnyHosts = true
74   withCredentials() {
75         remote.user = "${userName}"
76         remote.password = "${password}"
77   }
78   return remote
79 }
80
81 // 部署运行
82 def deployAndRun(ip){
83   // 登录harbor
84   sshCommand remote: conRemote(ip), command: "docker login -u ${HARBOR_USER} -p '${HARBOR_PASSWORD}'" + " ${HARBOR_HOST}"
85   // 更新或下载镜像
86   sshCommand remote: conRemote(ip), command: "docker pull ${HARBOR_HOST}/${HARBOR_PROJECT}/${PROJECT_NAME}:$BUILD_VERSION"
87   // 打印所有镜像
88   sshCommand remote: conRemote(ip), command: "docker images"
89   try{
90         // 停止指定名称容器
91         sshCommand remote: conRemote(ip), command: "docker stop ${PROJECT_NAME}"
92         // 删除指定名称容器
93         sshCommand remote: conRemote(ip), command: "docker rm ${PROJECT_NAME}"
94         // 启动容器
95         sshCommand remote: conRemote(ip), command: "docker run -idt --name ${PROJECT_NAME} --restart=always -p ${DEPLOY_PORT}:xxx -v /home/docker/${PROJECT_NAME}/logs:/logs ${HARBOR_HOST}/${HARBOR_PROJECT}/${PROJECT_NAME}:$BUILD_VERSION"
96         // 删除未使用到的镜像
97         sshCommand remote: conRemote(ip), command: "docker image prune -a -f"
98         // 清理none镜像
99         sshCommand remote: conRemote(ip), command: "${CLEAR_NONE_SSH}"
100   }
101   catch (e){
102         // 启动容器
103         sshCommand remote: conRemote(ip), command: "docker run -idt --name ${PROJECT_NAME} --restart=always -p ${DEPLOY_PORT}:xxx -v /home/docker/${PROJECT_NAME}/logs:/logs ${HARBOR_HOST}/${HARBOR_PROJECT}/${PROJECT_NAME}:$BUILD_VERSION"
104         // 删除未使用到的镜像
105         sshCommand remote: conRemote(ip), command: "docker image prune -a -f"
106         // 清理none镜像
107         sshCommand remote: conRemote(ip), command: "${CLEAR_NONE_SSH}"
108   }
109 }============================部署前端pieplie范例脚本============================
相关变量都以xxx代替,请自行替换
1 pipeline{
2   agent any
3   environment {
4         HARBOR_HOST = "192.168.100.xxx:xxx"
5         HARBOR_USER = "xxx"
6         HARBOR_PASSWORD = "xxx"
7         HARBOR_PROJECT = "xxx"
8         PROJECT_NAME = "xxx"
9         DEPLOY_ENV = "test"
10         PACKAGE_PATH = "./dist"
11         BUILD_VERSION = createVersion()
12         CLEAR_NONE_SSH = "n=`docker images | grep'<none>' | wc -l`; if [ \$n -gt 0 ]; then docker rmi `docker images | grep'<none>' | awk '{print \$3}'`; fi"
13         DEPLOY_REMOTE_01 = "192.168.xxx.xxx"
14         DEPLOY_PORT = "xxx"
15   }
16   tools{
17         // 添加环境,名称为Jenkins全局配置中自己定义的别名
18         nodejs 'node-v14.17.6'
19   }
20   stages{
21         stage("拉取代码"){
22             //check CODE
23             steps {
24               checkout([$class: 'GitSCM', branches: [], extensions: [], userRemoteConfigs: []])
25             }
26         }
27         stage("build构建"){
28             steps {
29               sh '''
30                     cnpm install
31                     cnpm run build:${DEPLOY_ENV}
32               '''
33             }
34         }
35         stage("构建docker镜像,并push到harbor当中"){
36             //docker push
37             steps {
38               sh 'pwd'
39               sh '''cat << EOF > Dockerfile
40                     # 设置基础镜像
41                     FROM nginx:latest
42                     # 将dist文件中的内容复制到 /usr/share/nginx/html/ 这个目录下面
43                     COPY ${PACKAGE_PATH}/usr/share/nginx/html/
44                     EXPOSE 80
45                     CMD ["nginx", "-g", "daemon off;"]
46               '''
47               sh 'cat Dockerfile'
48               sh 'ls -l'
49               sh "docker build -t ${HARBOR_HOST}/${HARBOR_PROJECT}/${PROJECT_NAME}:$BUILD_VERSION ."
50               sh "docker login -u ${HARBOR_USER} -p '${HARBOR_PASSWORD}'" + " ${HARBOR_HOST}"
51               sh "docker push ${HARBOR_HOST}/${HARBOR_PROJECT}/${PROJECT_NAME}:$BUILD_VERSION"
52               sh "docker rmi ${HARBOR_HOST}/${HARBOR_PROJECT}/${PROJECT_NAME}:$BUILD_VERSION"
53             }
54         }
55         stage("拉取docker镜像,并部署发布"){
56             steps {
57               deployAndRun("${DEPLOY_REMOTE_01}")
58             }
59         }
60   }
61 }
62
63 // 定义一个版本号作为当次构建的版本,输出结果 20211029532456_17
64 def createVersion() {
65   return new Date().format('yyyyMMddHHmmss') + "_${env.BUILD_ID}"
66 }
67
68 // 声明一个方法,其中 withCredentials 是 Jenkins 凭据管理中添加过的凭据
69 def conRemote(ip){
70   def remote = [:]
71   remote.name = "dev-${PROJECT_NAME}------>>>>>>>${ip}"
72   remote.host = ip
73   remote.port = xxx
74   remote.allowAnyHosts = true
75   withCredentials() {
76         remote.user = "${userName}"
77         remote.password = "${password}"
78   }
79   return remote
80 }
81
82 // 部署运行
83 def deployAndRun(ip){
84   // 登录harbor
85   sshCommand remote: conRemote(ip), command: "docker login -u ${HARBOR_USER} -p '${HARBOR_PASSWORD}'" + " ${HARBOR_HOST}"
86   // 更新或下载镜像
87   sshCommand remote: conRemote(ip), command: "docker pull ${HARBOR_HOST}/${HARBOR_PROJECT}/${PROJECT_NAME}:$BUILD_VERSION"
88   // 打印所有镜像
89   sshCommand remote: conRemote(ip), command: "docker images"
90   try{
91         // 停止指定名称容器
92         sshCommand remote: conRemote(ip), command: "docker stop ${PROJECT_NAME}"
93         // 删除指定名称容器
94         sshCommand remote: conRemote(ip), command: "docker rm ${PROJECT_NAME}"
95         // 启动容器
96         sshCommand remote: conRemote(ip), command: "docker run -idt --name ${PROJECT_NAME} --restart=always -p ${DEPLOY_PORT}:80 ${HARBOR_HOST}/${HARBOR_PROJECT}/${PROJECT_NAME}:$BUILD_VERSION"
97         // 删除未使用到的镜像
98         sshCommand remote: conRemote(ip), command: "docker image prune -a -f"
99         // 清理none镜像
100         sshCommand remote: conRemote(ip), command: "${CLEAR_NONE_SSH}"
101   }
102   catch (e){
103         // 启动容器
104         sshCommand remote: conRemote(ip), command: "docker run -idt --name ${PROJECT_NAME} --restart=always -p ${DEPLOY_PORT}:80 ${HARBOR_HOST}/${HARBOR_PROJECT}/${PROJECT_NAME}:$BUILD_VERSION"
105         // 删除未使用到的镜像
106         sshCommand remote: conRemote(ip), command: "docker image prune -a -f"
107         // 清理none镜像
108         sshCommand remote: conRemote(ip), command: "${CLEAR_NONE_SSH}"
109   }
110 }7,执行构建
第一次进入时只有master,需要先选master构建,而后下次构建时就会出现可供选择的branch或tag了
https://img2023.cnblogs.com/blog/3030104/202303/3030104-20230308104428057-1981061608.png
 8,通过发布日志、harbor、portainer验证及查看发布情况
https://img2023.cnblogs.com/blog/3030104/202303/3030104-20230308105653054-949508194.png
 
https://img2023.cnblogs.com/blog/3030104/202303/3030104-20230308110102683-1156442927.png
 
 
 
https://img2023.cnblogs.com/blog/3030104/202303/3030104-20230308105433822-1084462090.png
 
 
https://img2023.cnblogs.com/blog/3030104/202303/3030104-20230308105049043-1212402668.png
至此,轻量级CI/CD发布部署环境搭建及使用_07_jenkins配置pipeline
轻量级CI/CD发布部署环境搭建及使用_01_基本介绍轻量级CI/CD发布部署环境搭建及使用_02_docker安装jenkins轻量级CI/CD发布部署环境搭建及使用_03_docker安装harbor轻量级CI/CD发布部署环境搭建及使用_04_docker安装nexus3轻量级CI/CD发布部署环境搭建及使用_05_jenkins配置jdk、nodejs、maven、python2轻量级CI/CD发布部署环境搭建及使用_06_jenkins配置git、harbor、部署机器等凭证编写不易,如需转载,请注明出处
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 轻量级CI/CD发布部署环境搭建及使用_07_jenkins配置pipeline