一、安装 Jenkins
1.下载rpm包
cd /opt
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/jenkins-2.290-1.1.noarch.rpm
2.解压rpm包
sudo rpm -ih jenkins-2.290-1.1.noarch.rpm
3 查看安装目录
rpm -ql jenkins
/usr/lib/jenkins/jenkins.war WAR包
/etc/sysconfig/jenkins 配置文件
/var/lib/jenkins/ 默认的JENKINS_HOME目录
/var/log/jenkins/jenkins.log Jenkins日志文件
4.修改配置
vim /etc/sysconfig/jenkins
JENKINS_PORT=“8091” 端口号修改,默认8080可能会冲突
–最好改成root,不然会报错权限不足
JENKINS_USER=“root”
添加环境
找到jdk安装目录
find / -name java
vim /etc/init.d/jenkins
5启动jenkins
systemctl daemon-reload
systemctl start jenkins
二 配置自动化部署
1.访问验证
2.查看密码
cat /var/lib/jenkins/secrets/initialAdminPassword
输入获取到的密码
多等一会。。。。。
3.选择安装推荐插件
这里下载插件等了很久,如果有插件未安装成功可以重试,重试还是不成功点继续;后续配置加速再安装
任务名
新建一个freestyle project
描述
服务器资源是有限的为了防止磁盘被占用过多设置丢弃就得构建参数
设置git地址
添加git用户名和密码
使用刚添加的用户名和密码拉取代码
设置要构建的分支
设置构建触发(什么时候触发构建项目)
1.定时构建
字段 | * | * | * | * | * |
---|---|---|---|---|---|
含义 | 分钟 | 小时 | 日期 | 月份 | 星期 |
取值范围 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7 |
示例 | |||||
每隔15分钟执行一次 | H/15 | * | * | * | * |
每隔2个小时执行一次 | H | H/2 | * | * | * |
每隔3天执行一次 | H | H | H/3 | * | * |
每隔3天执行一次(每月的1-15号) | H | H | 1-15/3 | * | * |
每周1,3,5执行一次 | H | H | * | * | 1,3,5 |
定时构建就是没隔一段时间就是构建1次任务
0 * * * * 代表每小时0分的时候构建1次项目
第1个代表分,第2个代表时,第3个代表日,第4个代表月,第5个代表周
验证是否能拉取代码
2.轮询SCM
轮询SCM就是查看源码管理的代码有没有更新,如果更新了就去构建,没有更新就不会构建
*/5 * * * * 代表每5分钟就去查看源码有没有更新
安装插件git parameter
参数化构建,可以构建时可以选择分支
可选择分支构建
下载连接远程服务器插件
Deploy to container插件远程发布插件
配置远程服务器
测试下
远程目录是指打的包会传到远程服务器的哪个目录下
成功
传输包到远程服务器
这里的远端目录是基于上面配置远程服务器的远程目录而言的
在远程服务器上查看war包
设置启动脚本
执行启动脚本时遇到遇到一个错误
ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [-1]]
最终结果是
Build step ‘Send files or execute commands over SSH’ changed build result to UNSTABLE
原因是启动脚本在启动前会先杀掉所有进程
ps查询到的进程包含查询进程自身,当管道进行到kill的时候,所有进程一同被杀死,而Jenkins仍然在等待ps进程返回exit 0,事实上它永远等不到了,因为进程都没了,
就像下面这样查询nginx进程,不仅能查到所有nginx进程,同时还有查询nginx进程命令本身的进程,执行kill会杀死本身
解决方法
查询进程时加一层管道grep -v grep过滤掉自身进程
突发奇想将杀进程脚本和杀进程脚本分开执行却成功了
这里将脚本分成了三段,第一段执行将war包传到远程服务器上,第二段杀掉正在运行的后台服务,第三段启动服务并进行数据清理
经过尝试只能分成三段,分成两段把杀进程脚本放在传输war包段会报
ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [-1]]
放在启动清理段会报
ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after 12,000 ms]
加上grep -v grep后依然有同样的错误,推测可能还是杀到了jenkins进程
写了个循环打印ps查询进程的脚本,在jenkins执行远程命令的时候发现多处了jenkins执行脚本的进程
至此构建不稳定的原因终于找到了
从图中可以看出jenkins执行远程脚本的时候是将所有远程脚本变成一条命令执行的
这条命令又匹配到ps查找的进程;如果杀进程的话就会杀掉自己。所以jenkins远程脚本中杀进程,要么能排除调jenkins本身的那个进程,要么把杀进程的脚本单独执行
三 邮件通知
1.安装插件
2.配置系统插件
2.设置系统管理员邮箱
收件人邮箱,多个用,隔开
3.默认触发机制
发送邮件的邮箱和密码
默认收件人列表
全局配置后还需要在项目里配置邮箱
勾选这两个就可以