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构建

配置邮箱接收构建通知

使用网易邮箱发送,需要自己去开启






posted @ 2024-05-21 14:53  橙香五花肉  阅读(89)  评论(0编辑  收藏  举报