一、简介
Jenkins
是一个开源的持续集成(CI)工具,用于自动化构建、测试和部署软件项目。它提供了一个易于使用和可扩展的平台,帮助团队更高效地开发和交付软件。
中文文档:https://www.jenkins.io/zh/
二、前置软件安装
我这里使用的是 CentOS7+jdk21+maven3.8.8+jenkins2.479.3+git,进行介绍 jenkins的安装与使用,在进行安装之前,服务器必须装好 jdk21 / maven3.8.8 / git,并且配置好环境变量
2.1 maven
Maven下载链接:https://maven.apache.org/download.cgi
将压缩包通过Xftp工具上传到服务器中,这里我在根目录下创建了Jenkins目录用来存放包(/jenkins)。
shell
tar -xzf apache-maven-3.8.8-bin.tar.gz
更改Setting文件
修改Maven的依赖包存储路径和下载源地址,依赖包存储路径博主创建在
/jenkins/apache-maven-3.8.8/repository
shell
vim /jenkins/apache-maven-3.8.8/conf/settings.xml
<localRepository>/jenkins/apache-maven-3.8.8/repository</localRepository>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>Aliyun Maven</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
2.2 jdk
JDK下载链接:https://www.oracle.com/cn/java/technologies/downloads/#java21
将压缩包通过Xftp工具上传到服务器中,这里我在根目录下创建了Jenkins目录用来存放包(/usr/local/java)。
shell
mkdir /usr/local/java
tar -zxvf jdk-21_linux-x64_bin.tar.gz -C /usr/local/java
配置JAVA环境变量
创建软连。接一般linux可能会有自己自带的java环境,是jdk1.8的,它已经占用了/usr/bin/java 的这个软链接。因此你需要先删除这个软连接。
powershell
rm -rf /usr/bin/java
然后重新创建 java 软链接到 /usr/bin/ 目录下
shell
ln -s /usr/local/java/jdk-21.0.5/ /usr/bin/java
编辑系统配置文件
shell
vim /etc/profile
按下 键盘i
进入可编辑模式;按下shift + G
快速定位到文件结尾处
然后输入以下内容
shell
export JAVA_HOME=/usr/bin/java
export PATH=$JAVA_HOME/bin:$PATH
激活配置文件
shell
source /etc/profile
2.3 git
下载地址:https://www.kernel.org/pub/software/scm/git/
shell
mkdir -p /usr/local/git
tar -zxvf git-2.45.3.tar.gz -C /usr/local/git/
安装编译环境
shell
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
安装上面编译环境的时候,yum自动帮你安装了git,这时候你需要先卸载这个旧版的git。否则还是一个老版本
shell
yum remove git
编译源码
进入刚刚解压的git文件夹中
shell
make perfix=/usr/local/git all
安装git
清除之前编译产生的临时文件和目标文件。在 Git 源代码目录下,可以运行make clean
。
shell
# 这个时候一定要在git-2.45.3的文件夹下执行
make prefix=/usr/local/git install
配置环境变量
shell
vim /etc/profile
export PATH=$PATH:/usr/local/git/bin
source /etc/profile
三、jenkins安装
在下载安装包之前要先确定应该下载哪个版本的 Jenkins,Jenkins 的版本依赖于 Java 的版本,可在 Jenkins-Java Support Policy 中进行查看
官网下载war包https://www.jenkins.io/download/,我这里下载的是2.479.3版本,下载完成进行,上传到服务器进行启动
shell
cd /jenkins
nohup java -jar jenkins.war --httpPort=18080 > jenkins.log 2>&1 &
启动完成,浏览器访问ip:端口,端口默认是18080
linux查找密码
powershell
cat /root/.jenkins/secrets/initialAdminPassword
3.1 插件安装
打开 /root/.jenkins/hudson.model.UpdateCenter.xml
,内容替换
xml
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
</site>
</sites>
再删除文件(/root/.jenkins/updates/default.json
,因为会先查找default.json中配置的插件镜像下载地址,没有才会去找hudson.model.UpdateCenter.xml
中配置的镜像地址)。建议一次下完所有依赖的插件,手动一个个装完。如果嫌弃麻烦。就在最开始的时候,选择 jenkins 推荐安装的插件,这样就不会出现依赖版本冲突的问题。安装推荐的插件。
设置jenkins账号密码
注意:当前使用jenkins构建build的时候会在jenkins的根目录/root/.jenkins/下生成一个workspace文件夹,里面存放拉取下来的项目,并且打包后的jar包也在这里,jenkins配置build构建时的 pom 路径就得填写这文件夹下的项目里的pom,然后打包完后,将打包的jar包复制到我们预先创建的项目名称,流程思路就是这样。
安装额外的插件:登录进入首页选择菜单 Manage Plugins
进入安装 maven插件 :Maven Integration
进行安装完成后,就可以创建一个 maven项目,进行配置。
四、jenkins 配置
4.1 maven
4.2 jdk
4.3 git
4.4 maven 插件设置
五、构建一个item
5.1 准备工作
- 步骤1:创建空的文件夹(一般以项目命名,如 mkdir /jzjweb-bakend)
- 步骤2:在创建的文件夹下创建一个start.sh(vim start.sh)
shell
#!/bin/bash
APP_NAME=jzjweb-bakend-1.0-SNAPSHOT.jar # 名称自定义,需要修改
PORT=8081 # 端口自定义,需要修改
PROJECT_PATH=$(cd `dirname $0`; pwd) #当前文件夹名称,不需要修改
if [ -f "$APP_NAME" ];then
rm -rf $APP_NAME
fi
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
if [ -n "${pid}" ]; then
kill -9 $pid
fi
# 注意 jzjwebtest 名称需要自行修改成你自己创建的名称
cp /root/.jenkins/workspace/jzjwebtest/target/$APP_NAME $PROJECT_PATH/
nohup java -server -Xms512m -Xmx512m -Xmn128m -jar $APP_NAME > $PROJECT_PATH/nohup.out 2>&1 &
构建起名
勾选Discard old builds(丢弃旧版本): Days to keep builds (保留构建的天数1) / Max # of builds to keep5(要保留的最大构建数5)
item的源码
Build Triggers(构建触发器)
勾选 Build whenever a SNAPSHOT dependency is built(构建 SNAPSHOT 依赖项时构建) -> Schedule build when some upstream has no successful builds(当某些上游没有成功构建时安排构建)
Build(构建)
- 1.配置pom位置:/root/.jenkins/workspace/填写的工程名(填写的
jenkins工程名称
),如:/root/.jenkins/workspace/jzjweb-bakend - 2.Goals and options(目标和选项):
clean package -Dmaven.test.skip=true
,注意 :前面不能有 mvn,还需要注意的是如果是聚合工程,则只需要打包依赖的工程clean install -pl j-demo -am -amd -Ptest -Dmaven.test.skip=true
,这条命令只会打包 j-demo依赖的工程与j-demo工程。
Post Steps(发布步骤)
-
1.选择 Run only if build succeeds(仅在构建成功时运行)
-
2.Add post-build step(添加构建后步骤),选择 shell.sh脚本
shell
cd /jzjweb-bakend #必须设置,否则nohup.out日志文件不能生成
chmod 777 /jzjweb-bakend/start.sh
sh start.sh
BUILD_ID=dontKillMe /jzjweb-bakend/start.sh
说明:jzjweb-bakend是事先创建好的目录,并且目录下创建一个start.sh脚本,内容就是上边步骤2的脚本内容 其他 Build Environment(构建环境) / Pre Steps(预步骤) 等等不用填。
最后工程创建成功,就可以点击进去再点击 Build Now
进行立即构建。
查看构建日志
最后说明一下:当使用jenkins构建build的时候会在jenkins的根目录/root/.jenkins/下生成一个workspace文件夹,里面存放拉取下来的项目。
六、GitLab触发构建
安装 Generic Webhook Trigger 插件
配置构建
Gitlab 配置项目集成钩子,并绑定 webhook
-
仓库的owner才能设置项目的webhook,切换到root
-
配置只有master被push了,才发出请求
注意:新版本的gitlab不允许往本地发钩子
管理员设置一下
修改启动脚本,使得项目重启先停后起 start.sh
shell
#!/bin/sh
PROJECT_PATH=/root/.jenkins/workspace/jzjwebtest/target/
PROJECT_NAME=jzjweb-bakend-1.0-SNAPSHOT.jar
# stop process
tpid=`ps -ef|grep $PROJECT_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Stop Process...'
# 是先关闭和其有关的程序,再将其关闭
kill -15 $tpid
fi
sleep 5
tpid=`ps -ef|grep $PROJECT_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Kill Process!'
kill -9 $tpid
else
echo 'Stop Success!'
fi
# start process
tpid=`ps -ef|grep $PROJECT_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'App is already running.'
else
echo 'App is NOT running.'
nohup java -jar $PROJECT_PATH$PROJECT_NAME >/dev/null 2>&1 &
echo Start Success!
sleep 2
fi
测试下webhook
还在刚刚配置gitlab 的集成配置页面,找到webhook 列表,点击 下拉选项里的 Push events
可以看到,jenkins 已经自动获取到webhook 的通知请求,并开始了构建
测试真实推送master分支,自动构建项目
idea里,master分支确实commit+push
jenkens开始下一次构建了!
项目上线了!