一、下载
中文官网 www.jenkins.io/zh/
1、前置环境
2、rpm安装方式
根据机器上的jdk版本下载对应的rpm文件
卸载之前的jenkins
# 查看是否存在jenkins
rpm -qa | grep jenkins
# 卸载
rpm -e --nodeps jenkins
# 彻底删除jenkins残留文件
find / -iname jenkins | xargs -n 1000 rm -rf
安装jenkins
# 将之前下载的rpm文件上传到服务器
rpm -ivh jenkins-2.346-1.1.noarch.rpm
# 修改jenkins配置
# 修改jenkins端口(可选)
vim /usr/lib/systemd/system/jenkins.service
# Environment="JENKINS_PORT=8080" 改为8888
vim /etc/init.d/jenkins
# candidates= 处增加jdk路径 /usr/local/tools/jdk1.8.0_202/bin/java
# 此处如果报错的话安装openjdk1.8
yum install -y java-1.8.0-openjdk
# 重新加载启动文件
systemctl daemon-reload
# 启动jenkins
systemctl start jenkins
# 设置开机启动
systemctl enable jenkins
# 开放防火墙端口8888,或者关闭防火墙即可访问
http://192.168.31.207:8888/
# 根据页面提示,查询对应文件即可看到登录密码,后续设置管理员账户信息,不做展示,插件选择处按照默认配置安装即可
3、war包安装方式
下载对应版本war包即可 mirrors.jenkins.io/war-stable/
使用nginx或者Tomcat即可,或者直接nohup java -jar xxx.war &
二、使用
1、前置环境
maven: juejin.cn/post/720782…
maven安装好之后,需要修改本地仓库的主组信息 chown jenkins.jenkins xxx
说明:/usr/lib/systemd/system/jenkins.service文件中有对应的主组设置
User=jenkins Group=jenkins
git:
yum install -y git
2、补充插件
dashboard -> manage jenkins -> manage plugins
1、maven项目相关插件(可构建maven item)--> Maven Integration
2、ssh访问服务器插件(后续使用)--> Publish Over SSH
3、钩子调用免登录(后续使用) --> Build Authorization Token Root
3、增加jenkins配置
dashboard -> manage jenkins -> Global Tool Configuration
4、新建任务
本次使用maven项目测试
dashboard -> 新建item
A、说明
a、General
i、Discard old builds
放弃之前的构建
默认为log rotation策略,可以设置保持构建的天数和最大个数,以及发布包的保留天数和最大保留个数
ii、GitHub 项目
配置对应的github项目地址名称即可
iii、This project is parameterized
参数化构建过程:里面可以配置不同的参数,便于在构建时引用这些参数
iiii、Throttle builds
节流构建,通过设置时间段内允许并发的次数来实现构建的控制
iiiii、剩余的
关闭构建:这样项目就没法进行构建了
在必要时进行并发构建:满足策略要求时就会进行并发构建
安静期:设置一个时间来间隔每次构建的间隔
重试次数:这个和系统设置的一样,拉取源码重试的次数
该项目的上游项目正在构建时阻止该项目构建与该项目的下游项目正在构建时阻止该项目构建:用于上下游项目有关联的构建策略
b、源码管理
选择git,配置对应的项目路径,分支等信息,需要增加仓库的账号密码,点增加即可
c、构建触发器
自动构建的核心
i、Build whenever a SNAPSHOT dependency is built
jenkins会解析项目的pom文件,查找对应的依赖是否也在jenkins上,如果在就会建立连接
当依赖的任何一个快照构建时就重新构建本项目,可以减少解析pom的时间,但是可能出现循环构建的问题
Schedule build when some upstream has no successful builds(当某些上游没有成功构建时重新构建本项目)
ii、触发远程构建 (例如,使用脚本)
输入的值就是底下连接的token_name,在github、gitee等代码托管平台的hooks中使用,如果当有push操作后或者合并操作等,自动触发构建,访问图片中的连接就可以
iii、Build after other projects are built
关注某个或者某些项目,当关注的项目构建时自身也重新构建
iiii、Build periodically
定期构建
使用cron表达式即可,在cron上有一些拓展,避免在某一个时间点大量项目同时构建,因此使用H来进行表示,H是由项目名的hash值进行计算得来,在对应的时间范围内有对应的范围值
iiiii、GitHub hook trigger for GITScm polling
如果jenkins从在Git SCM部分中定义的repo中获得PUSH GitHub钩子,它将触发Git SCM轮询逻辑。因此,轮询逻辑实际上属于Git SCM
iiiiii、Poll SCM
5.6个人理解是jenkins主动发起构建,相较于2来说的被动触发不同,这个是去代码托管平台询问,代码是否有变更,有就触发构建
d、构建环境
可以在Pre Steps中统一处理
e、Pre Steps
构建前操作
f、build
构建
g、Post Steps
构建后操作
h、构建设置
i、构建后操作
B、使用
General不做设置,源码管理按照说明配置好git,构建环境不做配置
a、脚本方式触发
构建触发器选择触发远程构建(例如,使用脚本),并设置对应的身份验证令牌
Pre Steps 选择Send files or execute commands over SSH(ssh上发送文件或者执行命令),可以在构建前对之前的数据做一些处理,比如kill、清理等。并配置ssh服务器信息
注意: 这里配置了remote directory,意思是这个往这个服务器上传文件的基目录为/usr/local/jars,不填的话默认为/
配置ssh服务器
pre steps
post steps
shell脚本
#!/bin/bash
appname=$1
current=`date "+%Y%m%d%H%M%S"`
echo $appname
echo $packagename
#备份
bak=/usr/local/jars/bak
if [ ! -d $bak ];
then
mkdir $bak
fi
cp /usr/local/jars/sdemo-0.0.1-SNAPSHOT.jar /usr/local/jars/bak/sdemo"$current".jar
# 删除jar包
rm -rf /usr/local/jars/sdemo-0.0.1-SNAPSHOT.jar
#获取jar包对应的pid
pid=`ps -ef | grep $1 | grep 'java -jar' | awk '{printf $2}'`
echo $pid
if [ -z $pid ];
then
echo "$appname not started"
else
kill -9 $pid
check=`ps -ef | grep -w $pid | grep java`
if [ -z "$check" ];
then
echo "$appname pid:$pid stop success"
else
echo "$appname stop failed"
fi
fi
访问 http://192.168.31.207:8888//job/first/build?token=123123 ,即可触发构建,将url配置到gitlab或者其他代码托管平台即可
说明: 实验环境有限,无法搭建私人的gitlab,gitee上的hooks无法配置内网地址,需要域名或者公网ip,因此这段不做验证,使用postman或者浏览器直接访问都可验证 注意: 因为当前浏览器保存有jenkins的会话,因此可以直接触发,如果换浏览器或者使用postman会跳转到登录页,此时即可使用之前补充的插件“Build Authorization Token Root”,点击进去可以看到详情,免登录直接使用,需修改为对应路径 http://192.168.31.207:8888/buildByToken/build?job=first&token=123123
b、Build periodically 定时构建 与 Poll SCM
两种方式差不多,都是定期去托管平台查看是否有变更,有就构建
jenkins cron不是标准的cron表达式,但是类似,差不太多
第一个 * 表示每个小时的第几分钟,取值0-59
第二个 * 表示小时,取值0-23
第三个 * 表示一个月的第几天,取值1-31
第四个 * 表示第几月,取值1-12
第五个 * 表示一周中的第几天,取值0-7,其中0和7代表的都是周日
"/" 表示每隔多长时间,比如 */10 * * * * 表示 每隔10分钟
"H" hash散列值,以job名取值,获取到以job名为入参的唯一值,相同名称值也相同,这个偏移量会和实际时间相加,获得一个真实的运行时间
意义在于:不同的项目在不同的时间运行,即使配置的值是一样的,比如 都是15 * * * * ,表示每个小时的第15分钟开始执行任务,那么会造成同一时间内在Jenkins中启动很多job,换成H/15 * * * *,那么在首次启动任务时,会有随机值参与进来,有的会在17分钟启动 有的会在19分钟启动,随后的启动时间也是这个值。这样就能错开相同cron值的任务执行了。
H的值也可以设置范围
H * * * *表示一小时内的任意时间
*/10 * * * *每10分钟
H/10 * * * *每10分钟,可能是7,17,27,起始时间hash,步长不变
45 3 * * 1-6 每个周一至周六,凌晨3点45 执行1次
45 3-5 * * 1-6 每个周一至周六,凌晨3点45 ,凌晨4点45,凌晨5点45 各执行1次
H(40-48) 3-5 * * 1-6 在40~48之间取值 其他同上
45 3-5/2 * * 1-6 每个周一至周六,凌晨3点45 ,凌晨5点45 各执行1次
45 0-6/2 * * 1-6 * * 1-6 0点开始,每间隔2小时执行一次 0:45、2:45、4:45
c、发送邮件通知
需要一个smtp协议的发送邮件客户端,例如可以使用网易,开启smtp后会给密码,在jenkins中配置邮件相关的密码都是用的这个,不是邮箱的登录密码
配置发送方邮件地址
自定义邮件通知
系统级邮件通知 可以测试邮件发送