Jenkins安装和使用
Jenkins安装和使用
官方文档:https://www.jenkins.io
中午文档:https://www.jenkins.io/zh/doc/pipeline/tour/getting-started/
安装需求
机器要求:
256 MB 内存,建议大于 512 MB
10 GB 的硬盘空间(用于 Jenkins 和 Docker 镜像)
需要安装以下软件:
Java 8 ( JRE 或者 JDK 都可以)
Docker (导航到网站顶部的Get Docker链接以访问适合您平台的Docker下载)
安装JDK
1. 检索可用包
yum search java | grep jdk
2. 安装
# 我这边安装jdk11,因为新版不支持8
yum install -y java-11-openjdk
# 开发环境也要安装
yum install -y java-11-openjdk-devel
3. 配置环境变量(可选)
vi /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64/
export JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
source /etc/profile 立即生效
安装maven
官网地址:https://maven.apache.org/
下载地址:https://maven.apache.org/download.cgi
1. 下载后拖入/root目录,并解压
[root@192 ~]# tar -zxvf apache-maven-3.9.6-bin.tar.gz
# 将目录移入到/usr/local/maven 中
[root@192 ~]# mv apache-maven-3.9.6/* /usr/local/maven/
# 查看maven版本
[root@192 ~]# /usr/local/maven/bin/mvn -v
Apache Maven 3.9.6 (bc0240f3c744dd6b6ec2920b3cd08dcc295161ae)
Maven home: /usr/local/maven
Java version: 11.0.23, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.el7.x86_64", arch: "amd64", family: "unix"
安装Git
yum install -y git
下载Jenkins
下载地址:https://www.jenkins.io/download/
下载版本:2.452.1 LTS
过去版本下载地址:https://get.jenkins.io/war-stable/
1. 将war包拖入到/root目录下,并后台启动
[root@192 ~]# nohup java -jar jenkins.war &>jenkins.log &
2. 查看是否有进程
[root@192 ~]# ps -ef |grep jenkins
root 16195 1501 99 10:14 pts/0 00:00:44 java -jar jenkins.war
root 16874 1501 0 10:15 pts/0 00:00:00 grep --color=auto jenkins
3. 浏览器访问ip:8080,默认端口是8080
密码提示在:/root/.jenkins/secrets/initialAdminPassword目录下
[root@192 ~]# cat /root/.jenkins/secrets/initialAdminPassword
cdde12c5239341e4877901c695fd9f35
4. 安装推荐插件
5. 设置管理员用户密码,Jenkins访问地址
创建maven项目并启动
1. 安装maven插件
2. 新建item
3. maven配置
4. 配置Git地址,选择对应分支
5. 配置pom文件位置,构建后成功执行脚本
注意:jenkins默认会在构建完成后,杀掉构建过程中由shell命令触发的衍生进程。
jenkins根据BUILD_ID识别某个进程是否为构建过程的衍生进程,故修改BUILD_ID后,jenkins就无法识别是否为衍生进程,则此进程能在后台保留运行。
结论就是Jenkins程序只负责运行伪命令行nohup 命令,并不保证是否成功运行 nohup后面的命令。(如果你不加BUILD_ID就会发现命令没生效)
6. 运行
自动将maven项目发布测试服务器并运行
1. 下载Publish Over SSH插件
2. 配置System -> Publish Over SSH
3. 项目配置,构建后操作
执行构建后,在测试服务器上查看
[root@192 project]# pwd
/root/project
[root@192 project]# ll
总用量 19080
-rw-r--r--. 1 root root 19536109 5月 21 15:24 jenkins-0.0.1-SNAPSHOT.jar
[root@192 project]# ps -ef |grep java
root 59740 1 0 15:24 ? 00:00:06 java -jar /root/project/jenkins-0.0.1-SNAPSHOT.jar
root 83279 116381 0 15:45 pts/2 00:00:00 grep --color=auto java
Pre Steps构建前执行的操作
希望在构造执行开始前,将原有的java进程给kill掉,在测试服务器上编写脚本
#!/bin/bash
# jar包名称
echo "arg:$1"
# 获取启动的pid
pid=`ps -ef | grep $1 | grep java | grep -v "grep" | awk '{print $2}'`
echo $pid
# 判断pid是否为空-z 判断字符串是否为空串即长度是否为0空串则为真
if [ -z "$pid" ]
then
echo "程序未启动!"
else
kill -9 $pid
echo "程序已停止!"
fi
check=`ps -ef | grep -w $pid | grep java`
echo check
if [ -z "$check" ]
then
echo "程序已被全部清理!"
else
echo "程序停止失败"
fi
# 通过$?获取最后一行是否执行成功
echo "执行状态:"$? > mystatus.txt
exit
# 通过jps命令查看运行程序
[root@192 ~]# jps
97075 Jps
94878 jenkins-0.0.1-SNAPSHOT.jar
GitLab钩子自动构建项目
1. 安装插件
2. 配置令牌
3. 配置GitLab
如果是本地测试需要在:管理中心 -> 设置 -> 网络 -> 出站请求 -> 勾选允许来自 webhooks 和集成对本地网络的请求
定时执行任务jenkins cron表达式
标准cron:https://crontab.guru,Jenkins cron不是标准的cron表达式
第一个 * 表示每个小时的第几分钟,取值0~59
H * * * *
H:每小时执行一次
第二颗 * 表示小时,取值0~23
* 15 * * * 表示每天下午3点
* 1 * * * 表示每天凌晨1点
第三颗 * 表示一个月的第几天,取值1~31
* 1 5 * * 表示每月5日凌晨1点
第四颗 * 表示第几月,取值1~12
* 15 5 1 * 表示每年几月执行
第五颗 * 表示一周中的第几天,取值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
Poll Scan触发构建
使用Poll SCM 方式与Build periodically一样
会主动定期检查代码托管服务器上是否有变化,一旦发生变化执行job构建
配置邮箱接收构建通知
使用网易邮箱发送,需要自己去开启