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. 循环构建远程服务完成提示

最新文章

  1. 灵活可扩展的工作流管理平台Airflow
  2. 【codevs2495】 水叮当的舞步
  3. iOS多线程之NSThread详解
  4. NSURLSession &amp; NSCache
  5. HDU2191(多重背包)
  6. Android 发布可穿戴设备 SDK 的开发者预览版
  7. 11个优秀的HTML5 &amp; CSS3下拉菜单制作教程
  8. String 和 InputStream 互转方式
  9. hadoop深入研究:(十六)——Avro序列化与反序列化
  10. perl tk说明
  11. jspsmart(支持中文下载)
  12. java中多态的使用
  13. openvpn实现内网 映射到 外网
  14. Dynamics CRM Odata QueryUrl中的SetName问题
  15. 12.Flask-Restful
  16. python基础之Day22
  17. My year of 2017
  18. WebAPI集成SignalR
  19. vs.code调试node.js的C++扩展
  20. C#设计模式--状态模式

热门文章

  1. jQuery实现打飞机游戏
  2. 03.Java的前世今生
  3. CAT12提取surface指标
  4. PyQt5 FileDialog的使用例子
  5. mysql字符串类型(set类型)
  6. Linux切换超级管理员root用户
  7. Oracle调用Java方法(上)如何使用LoadJava命令和如何将简单的Jar包封装成Oracle方法
  8. 国内透明代理IP
  9. window 开机重启运行bat文件(运行java的jar包)
  10. Wireshark论证TCP3次握手的过程