搜索
您的当前位置:首页正文

Jenkins 自动化(CI-DI)部署

来源:哗拓教育
Jenkins 自动化(CI/DI)部署 2020-7-7 Jenkins 自动化(CI/DI)部署

蝌蚪成长记 Jenkins 自动化(CI/DI)部署

目录

Jenkins 自动化(CI/DI)部署 .................................................. 3

1. 背景介绍 ............................................................. 3 2. Jenkins服务器搭建于基本配置 ......................................... 3

2.1. Jenkins自动化/持续集成部署实现原理 ............................ 3 2.2. Python3.0自动化发布脚本 ....................................... 4 2.3. Jenkins 环境插件 ............................................... 9 3. Jenkins自动化部署 .................................................. 11

3.1. Springboot项目发布部署(git) ................................ 11 3.2. 构建完成后自动打Tag .......................................... 13 3.3. Tag项目发布部署 .............................................. 14 3.4. 静态代码审查之fireline ....................................... 16 3.5. 静态代码审查之checkstyle ..................................... 18 3.6. WebHook自动触发构建 .......................................... 20 3.7. 循环构建远程服务完成提示 ...................................... 21

1 / 22

Jenkins 自动化(CI/DI)部署

2 / 22

Jenkins 自动化(CI/DI)部署

Jenkins 自动化(CI/DI)部署

1. 背景介绍

在实际开发中,经常要一边开发一边测试,经常为了一个功能而不断更新版本,这些情况都会涉及到频繁的打包、部署;手动打包的涉及到项目上传、打包、发布等很多重复工作;

那么,有一种工具能够实现,将代码提交到git后就自动打包部署,替换手动认为打包,答案是肯定的:Jenkins ,当然除了Jenkins以外,也还有其他的工具可以实现自动化部署;

2. Jenkins服务器搭建于基本配置

2.1. Jenkins自动化/持续集成部署实现原理

3 / 22

Jenkins 自动化(CI/DI)部署

2.2. Python3.0自动化发布脚本

DevOps_remote.py文件 #!/usr/bin/env python #coding=utf-8 import paramiko import sys #shell 传入参数 sourcePath = sys.argv[1]; #源目录 targetPath = sys.argv[2]; #目标目录 jarName = sys.argv[3]; #文件名 runPort = sys.argv[4]; #运行端口 4 / 22

Jenkins 自动化(CI/DI)部署

#部署服务器配置 serveHost = [\"192.168.208.131\#目标服务器IP serveKey = {\"192.168.208.131\":\"?\208.135\":\"?\目标服务器密码 serveUser = {\"192.168.208.131\":\"march\h\目标服务器登录用户名 serveSSHPort = {\"192.168.208.131\":5321,\"192.168.208.133\":5321,\"192.168.208.134\":5321,\"192.168.208.135\":5321}; #目标服务器SSH 端口 #监听invoke_shell 交互动态结果 #cmd 交互对象,endParam 结尾对象 def mutualResult(cmd,endParam): buff = \"\"; while not buff.endswith(endParam): line = cmd.recv(9999); try: #进行异常捕捉,如果解码有问题,则换一种解码方式 buff += line.decode(\"utf8\"); except Exception : buff += line.decode(\"gb18030\"); 5 / 22

Jenkins 自动化(CI/DI)部署

return buff; #kill 运行端口 def killPort(ssh,port): print (\"run cmd >> \" + \"netstat -tunlp | grep \"+port+\" | awk '{print $7}' | awk -F'/' '{print $1}'\"); stdin, stdout, stderr = ssh.exec_command(\"netstat -tunlp | grep \"+port+\" | awk '{print $7}' | awk -F'/' '{print $1}'\"); pid = stdout.read().decode(); print(pid) if pid: print (\"run cmd >> 关闭 java进程 进程ID: \"+pid); ssh.exec_command(\"kill -9 \"+pid); def deploy(): print(\"开始部署\"+jarName); for ip in serveHost: print (\"连接服务器IP:\"+ip); #连接服务器 ssh =paramiko.SSHClient(); ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()); ssh.connect(hostname=ip,port=serveSSHPort[ip],username=serveUser[ip],password=serveKey[ip]); 6 / 22

Jenkins 自动化(CI/DI)部署

cmd = ssh.invoke_shell(); #连接交互 print (mutualResult(cmd,\"$ \")); print (\"开始复制\"+jarName+\" >> 服务:\"+ip); print (\"run cmd >> scp -r -P 5321 march@192.168.208.133:/var/lib/jenkins/workspace/\" +sourcePath+ \"/target/\"+jarName+\" \"+ targetPath +\"\\n\"); cmd.send(\"scp -r -P 5321 march@192.168.208.133:/var/lib/jenkins/workspace/\" +sourcePath+ \"/target/\"+jarName+\" \"+ targetPath +\"\\n\"); #监听交互并输入密码 mutualResult(cmd,\"'s password: \"); cmd.send(\"?\\n\"); mutualResult(cmd,\"$ \"); cmd.close(); print(\"run cmd >> scp suceess\"); #kill运行进程 killPort(ssh,runPort); #启动服务 cmd = ssh.invoke_shell(); mutualResult(cmd,\"$ \"); print (\"run cmd >> \" + \"nohup java -jar \" + targetPath + \"/\" + jarName +\" --server.port=\" +runPort +\" > \" + targetPath + \"/\" + jarName + \".log 2>&1 7 / 22

Jenkins 自动化(CI/DI)部署

& \\n\"); print (\"等待服务器:\" + ip + \"启动\"); cmd.send(\"nohup java -jar \" + targetPath + \"/\" + jarName +\" --server.port=\" +runPort +\" > \" + targetPath + \"/\" + jarName + \".log 2>&1 & \\n\"); mutualResult(cmd,\"$ \"); print (\"核心服务:\" + ip + \"发布成功\"); cmd.close(); ssh.close(); if __name__ ==\"__deploy__\": deploy() deploy() DevOps_remote.sh脚本文件

#!/bin/bash

python3 /var/lib/jenkins/workspace/dev_remote.py $1 $2 $3 $4

8 / 22

Jenkins 自动化(CI/DI)部署

2.3. Jenkins 环境插件

2.3.1. 这里建议选择推荐安装,保证基本常用功能可以使用

2.3.2. 全局工具配置(Global Tool Configuration)

2.3.3. 系统配置

配置发布通知邮箱

9 / 22

Jenkins 自动化(CI/DI)部署

2.3.4.

插件安装

10 / 22

Jenkins 自动化(CI/DI)部署

3. Jenkins自动化部署

3.1. Springboot项目发布部署(git)

11 / 22

Jenkins 自动化(CI/DI)部署

12 / 22

Jenkins 自动化(CI/DI)部署

3.2. 构建完成后自动打Tag

13 / 22

Jenkins 自动化(CI/DI)部署

3.3. Tag项目发布部署

14 / 22

Jenkins 自动化(CI/DI)部署

使用参数构建:

15 / 22

Jenkins 自动化(CI/DI)部署

3.4. 静态代码审查之fireline

配置:

16 / 22

Jenkins 自动化(CI/DI)部署

代码审查结果:

17 / 22

Jenkins 自动化(CI/DI)部署

3.5. 静态代码审查之checkstyle

pom.xml配置:

com.puppycrawl.tools checkstyle 8.33 org.apache.maven.plugins maven-checkstyle-plugin 3.1.1 true xml google_checks.xml false com.puppycrawl.tools checkstyle 8.33 18 / 22

Jenkins 自动化(CI/DI)部署

org.apache.maven.plugins maven-checkstyle-plugin 3.1.1 google_checks.xml Jenkins配置:

代码审查结果:

19 / 22

Jenkins 自动化(CI/DI)部署

3.6. WebHook自动触发构建

GITHub自动推送

20 / 22

Jenkins 自动化(CI/DI)部署

3.7. 循环构建远程服务完成提示

21 / 22

Jenkins 自动化(CI/DI)部署

22 / 22

因篇幅问题不能全部显示,请点此查看更多更全内容

Top