Jenkins 自动化(CI/DI)部署
2024-08-28 07:27:46
1. 背景介绍
在实际开发中,经常要一边开发一边测试,经常为了一个功能而不断更新版本,这些情况都会涉及到频繁的打包、部署;手动打包的涉及到项目上传、打包、发布等很多重复工作;
那么,有一种工具能够实现,将代码提交到git后就自动打包部署,替换手动认为打包,答案是肯定的:Jenkins ,当然除了Jenkins以外,也还有其他的工具可以实现自动化部署;
2. Jenkins服务器搭建于基本配置
2.1. Jenkins自动化/持续集成部署实现原理
2.2. Python3.0自动化发布脚本
DevOps_remote.py文件
#!/usr/bin/env python
#coding=utf- import paramiko import sys #shell 传入参数 sourcePath = sys.argv[]; #源目录 targetPath = sys.argv[]; #目标目录 jarName = sys.argv[]; #文件名 runPort = sys.argv[]; #运行端口 #部署服务器配置 serveHost = ["192.168.208.131","192.168.208.134","192.168.208.135"]; #目标服务器IP serveKey = {"192.168.208.131":"?","192.168.208.133":"?","192.168.208.134":"?","192.168.208.135":"?"}; #目标服务器密码 serveUser = {"192.168.208.131":"march","192.168.208.133":"march","192.168.208.134":"march","192.168.208.135":"march"}; #目标服务器登录用户名 serveSSHPort = {"192.168.208.131":,"192.168.208.133":,"192.168.208.134":,"192.168.208.135":}; #目标服务器SSH 端口 #监听invoke_shell 交互动态结果 #cmd 交互对象,endParam 结尾对象 def mutualResult(cmd,endParam): buff = ""; while not buff.endswith(endParam): line = cmd.recv(); try: #进行异常捕捉,如果解码有问题,则换一种解码方式 buff += line.decode("utf8"); except Exception : buff += line.decode("gb18030"); 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]); 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 & \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 $ $ $ $
2.3. Jenkins 环境插件
2.3.1. 这里建议选择推荐安装,保证基本常用功能可以使用
2.3.2. 全局工具配置(Global Tool Configuration)
2.3.3. 系统配置
配置发布通知邮箱
2.3.4. 插件安装
3. Jenkins自动化部署
3.1. Springboot项目发布部署(git)
3.2. 构建完成后自动打Tag
3.3. Tag项目发布部署
使用参数构建:
3.4. 静态代码审查之fireline
配置:
代码审查结果:
3.5. 静态代码审查之checkstyle
pom.xml配置:
<dependency>
<groupId>com.puppycrawl.tools</groupId>
<artifactId>checkstyle</artifactId>
<version>8.33</version>
</dependency> <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<consoleOutput>true</consoleOutput>
<outputFileFormat>xml</outputFileFormat>
<!-- <configLocation>sun_checks.xml</configLocation>-->
<configLocation>google_checks.xml</configLocation>
<linkXRef>false</linkXRef>
</configuration>
<dependencies>
<dependency>
<groupId>com.puppycrawl.tools</groupId>
<artifactId>checkstyle</artifactId>
<version>8.33</version>
</dependency>
</dependencies>
</plugin> <reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<configLocation>google_checks.xml</configLocation>
</configuration> </plugin> </plugins>
</reporting>
Jenkins配置:
代码审查结果:
3.6. WebHook自动触发构建
GITHub自动推送
3.7. 循环构建远程服务完成提示
最新文章
- 灵活可扩展的工作流管理平台Airflow
- 【codevs2495】 水叮当的舞步
- iOS多线程之NSThread详解
- NSURLSession &; NSCache
- HDU2191(多重背包)
- Android 发布可穿戴设备 SDK 的开发者预览版
- 11个优秀的HTML5 &; CSS3下拉菜单制作教程
- String 和 InputStream 互转方式
- hadoop深入研究:(十六)——Avro序列化与反序列化
- perl tk说明
- jspsmart(支持中文下载)
- java中多态的使用
- openvpn实现内网 映射到 外网
- Dynamics CRM Odata QueryUrl中的SetName问题
- 12.Flask-Restful
- python基础之Day22
- My year of 2017
- WebAPI集成SignalR
- vs.code调试node.js的C++扩展
- C#设计模式--状态模式