Jenkins集成Github自动部署
前言
以下教程看不懂你砍我,我就不信了.百度一搜很多文章细节没讲清楚,导致踩了很多坑.
尽量以我踩过的坑写的足够详细,如果不懂的地方可以留言
前期准备工作
因官网下载慢我也分享到网盘了,还有国内加速镜像地址.
JDK
https://www.jianshu.com/p/5f9b4682a6c5
国内镜像
https://mirrors.huaweicloud.com/java/jdk/8u151-b12/
maven
https://www.cnblogs.com/jtnote/p/9982185.html
阿里源
https://www.cnblogs.com/pxblog/p/11617609.html
Jenkins 2.235.4
链接:https://pan.baidu.com/s/1hgLjoo0V5rPIWGWypy2aUA 提取码:3fjz
git
yum install git -y
或
sudo apt-get install git -y
以上尽量手动安装并统一下载到同一个文件夹内方便管理,避免自动安装,自动安装的路径在jenkins配置路径时有权限不能识别问题.
安装jenkins
运行jenkins
java -Dhudson.util.ProcessTree.disable=true -jar --httpPort=8081 jenkins.war
默认8080,我这里已经有项目占用,于是指定8081端口
启动成功得到一个密码,后续需要.
将刚才密码填入进行下一步,网速不好时稍慢
先取消全部,再手动选择汉化中文包和git安装
publish over ssh:用于ssh访问远程服务器(自动部署) git:拉取github代码 locale:中文汉化包
等待安装完毕,稍慢
全局配置
Tip:提示几个好用技巧
到目录下执行pwd命令显示当前完整路径
whereis命令可以显示安装路径
JDK
Git
同上
Maven
同上
注意,如果Git没有展示配置说明没有安装Git插件
系统配置
我们来配置远程服务器信息,用于github代码拉取部署到指定的服务器.
Publish over SSH
找到Publish over SSH,注意要先安装publish over ssh插件才会显示.
添加一个SSH Servers
配置完成点击test测试是否成功
构建应用
这时候我们如果需要构建maven应用并自动部署还需要安装以下两个插件Maven Integration plugin 用来构建maven的项目,一个是对容器依赖的插件;Deploy to container Plugin 自动发布到相关容器上去
Deploy to container同上,取决网速,稍慢.
勾选安装完成后重启Jenkins(空闲时)
构建maven应用
我这里创建了一个demo springboot项目
https://github.com/SAnBlog/demo
点击添加并填好github帐号密码
自动部署,注意这里只能回调公网地址.
完整地址如下,浏览器手动执行也可以部署.
http://192.168.31.247:8081/job/demo/build?token=demo
配置构建环境
注意事项
本文章版本为Jenkins 2.235.4
网上很多文章都是2.x以下的,导致构建配置项目有点出入,我则遇到最大的一个坑就是在云服务器上安装完毕,正常部署项目,而在树莓派上按照一模一样的版本环境会杀掉进程,也就是kill掉以下的sh demo.sh应用,这个应用也就是我们的应用,导致死活启动不了.(官网文档解决方案都尝试过了,包括)都无法解决.
1.java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war
2.BUILD_ID=dontKillMe
我这里写两种方式,如果遇到杀进程问题则尝试更换另一种.
第一种
在 SSH Publishers的 Exec command中执行部署脚本
脚本
demo.sh脚本监测是否在运行,运行则杀掉再重新部署.
echo "stop服务开始"
#重启tomcat服务器
pid=`lsof -i:9000|awk 'NR==2{print $2}'`
echo $pid
kill -9 $pid
echo "stop服务脚本结束"
echo "start服务脚本开始"
nohup java -jar /home/pi/jdk/deploy/demo-1.0.jar > /home/pi/jdk/deploy/$(date +'%Y%m%d').log &
echo "start服务脚本结束"
这里remote directory和上面远程服务器配置是会叠加的,如果目录不变这里无需配置(下图为远程服务器配置)
如果再次配置会以ssh servers的remote directory拼接此路径
会导致成"/home/pi/jdk/deploy/home/pi/jdk/deploy"
保存即可,我们点击立即构建,控制台输出查看构建详情日志
(如果maven源不改成阿里源会相当慢)
第二种
唯一的区别就是执行部署的命令换个地方,构建完成后执行我们的命令,其他配置不变.
成功如上,打开浏览器
存在shell脚本被杀问题解决方案
(低版本解决方案,无法解决则尝试本文章第二种配置)
https://blog.xiehaibo.cn/2018/01/29/after-jenkins-build-and-execute-shell-success_the-started-process-is-killed/
- 反射+自定义注解---实现Excel数据列属性和JavaBean属性的自动映射
- 后台模板管理系统___左侧菜单数据的异步加载
- Shiro眼皮下玩ajax,玩出302 Found
- 对于JSONObject,我只是临时抱佛脚
- 总结切面编程AOP的注解式开发和XML式开发
- SpringMVC注解@RequestMapping之produces属性导致的406错误
- SpringBoot集成MyBatis的分页插件PageHelper(回头草)
- SpringBoot整合Mybatis之进门篇
- Tomcat和Java Virtual Machine的性能调优总结
- 一次浴火重生的MySQL优化(EXPLAIN命令详解)
- 简单聊聊不可或缺的Nginx反向代理服务器--实现负载均衡【上篇】
- Java设计模式之适配器设计模式(项目升级案例)
- Java设计模式之模板方法设计模式(银行计息案例)
- 多线程之策略模式
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 美团数据怎么爬,看看这个文章吧!
- [硬件]关于SPI Flash那些你不知道的事儿
- 「新特性」Spring Boot 全局懒加载机制了解一下
- 做olap一定要要了解的Druid存储结构
- 【ST开发板评测】使用Python来开发STM32F411
- 一文详解 Ansible 自动化运维!
- 手把手教你搭建织女星开发板RISC-V开发环境
- R语言多臂试验 - 我们应该考虑多重性吗?
- Stata估算观测数据的风险比
- R语言利用基线协变量提高随机对照试验的效率
- R语言使用倾向评分提高RCT(随机对照试验)的效率
- R语言调整随机对照试验中的基线协变量
- R语言用多重插补法估算相对风险
- R语言分析协变量之间的非线性关系
- stata如何处理结构方程模型(SEM)中具有缺失值的协变量