一、准备工作
开始前服务器需安装JDK、git、maven、node以及项目启动所需的mysql、redis等。插件是Jenkins使用的,需要先安装Kenkins。以下是本文所使用的各个组件版本,使用其他版本可能会有兼容问题续特别注意。【安装过程中遇到问题可先查看目录十二有没有解决办法,大部分问题我都蹚过来了😭😭😭】
|
工具 |
版本 |
|
JDK |
17 |
|
jenkins |
2.479.3 |
|
git |
2.47.1 |
|
maven |
3.9.12 |
| node | 16.20.2 |
|
gitee插件 |
1190.v317d91b_3a_4e2 |
|
Publish Over SSH插件 |
390.vb_f56e7405751 |
|
nodejs插件 |
1.6.5 |
|
Generic Webhook Trigger插件 |
2.3.1 |
|
Email Extension插件 |
1876.v28d8d38315b_d |
二、下载
War Jenkins Packages
https://get.jenkins.io/war-stable/Linux下载war包部署。

三、启动
war包传入系统后使用java -jar 命令启动
nohup java -jar jenkins2.479.3.war –httpPort=18080 > /opt/jenkins/logs/jenkins.log 2>&1 &
有防火墙则关闭或开放相应端口
# 开放18080端口
firewall-cmd –permanent –add-port=18080/tcp
firewall-cmd –reload
浏览器输入IP:端口号登录
http://IP:18080
首次登录需输入密码解锁,可输入以下命令查看

cat /root/.jenkins/secrets/initialAdminPassword

四、新手入门
点击选择插件安装

点击无再点击安装即可跳过初始插件安装,后续可离线安装所需插件。

创建一个管理员账户

实例配置默认即可

保存即可完成新手入门

五、配置镜像
如需联网安装插件则需要配置更新中心为国内镜像源,找到Jenkins配置文件
vi /root/.jenkins/hudson.model.UpdateCenter.xml
替换镜像源为国内镜像源
<?xml version='1.0' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<!– 阿里镜像 –>
<url>https://mirrors.aliyun.com/jenkins/</url>
<!– <url>https://mirrors.cloud.tencent.com/jenkins/updates/update-center.json</url> –>
</site>
</sites>
重启Jenkins
# 查进程
ps -ef | grep jenkins
# 杀进程
kill -9 [进程ID]
# 重启
nohup java -jar jenkins2.479.3.war –httpPort=18080 > /opt/jenkins/logs/jenkins.log 2>&1 &
另外也可以在管理界面修改镜像源


六、安装插件
这里以gitee插件为例,实现离线安装Jenkins插件、下载离线安装包Jenkins Plugins


去Jenkins管理后台安装


选中安装后重启

七、配置Gitee插件

链接名可自定义,域名固定、令牌根据提示从私人令牌 – Gitee.com获取


点击添加令牌

把刚才生成的令牌填进来

选择刚添加的令牌并测试连接

八、创建项目-后端


项目创建完成后需进行下一步配置,先选中之前创建好的Gitee的连接,然后选Git。

输入Git的相关配置
②为仓库地址
③为全局凭证(添加方式见错误解决-8)
④为触发规则Name字段中输入 origin, Refspec 字段输入 +refs/heads/*:refs/remotes/origin/* +refs/pull/*/MERGE:refs/pull/*/MERGE ,注意新版 jenkins 不再接受多条同时包含 * 通配符的 refs 描述,如只对 push 触发可写前半部分,如只对 PR 触发可只写后半段。

继续往下配置,Branch Specifier的目的相当于监听哪个分支的活动的填写规则要与Refspec对应,现在Refspec配的是单仓库工作流,所以Branch Specifier配origin/dev_smart_energy为仓库中的dev_smart_energy分支。将来只会拉取此分支的代码。Repository browser为显示具体提交记录的配置,默认自动即可。最后的Additional Behaviours是构建前的额外行为例如合并代码等,这里我只是拉取dev_smart_energy分支并构建所以不添加额外的配置。

继续往下配置触发器。使用webhook实现的效果为Gitee检测到代码提交时会主动推送事件到jenkins,此选项要保证服务器可以连接外网。使用Poll SCM的效果是jenkins定时拉取代码,此选项不需要连接外网。这里我使用Poll SCM每5分钟拉取一次(目录十二已实现Gitee主动推送)。


九、自动部署-后端
先安装一个publish over ssh插件,此插件可以把jar包发送到指定服务器并进行后续操作。安装后需配置JDK、Maven、publish over ssh。

配置JDK的目录(地址根据自己的来)

配maven的目录(地址根据自己的来)

配置publish over ssh,操作目录即jar包准备放置在服务器的位置。


以上配置完成后,现在返回项目配置,去配置项目的Build Steps,先添加一个构建mvn项目的步骤,然后配置。


再添加一个publish over ssh提供的步骤,然后配置,Source files即为Jenkins中各项目的工作目录。


# 1. 切换到jar包所在目录(/opt/apps)
cd /opt/apps || exit 1
# 2. 停止原有同名jar包进程(避免端口冲突)
PID=$(ps -ef | grep app.jar | grep -v grep | awk '{print $2}')
[ -n "${PID}" ] && kill -9 ${PID} >/dev/null 2>&1
# 3. 启动jar包(日志输出到/opt/apps/app.log,而非登录目录)
nohup /usr/local/jdk/jdk-17.0.2/bin/java -jar /opt/apps/app.jar > /opt/apps/app.log 2>&1 &
# 4. 输出启动成功提示
echo "Jar包已启动,日志路径:/opt/apps/app.log"
执行验证

查看日志,已拉取到最新的提交且后续会打包并部署到远程。



去服务器查看,自动拉取部署成功。

十、创建项目-前端
跟后端一样配置好gitee,拉取分支即可。


十一、自动部署-前端
先在服务器安装node,后在jenkins安装node插件然后配置。


而后在前端项目配置node构建

其中npmrc file可以用默认的也可以用自己配的,如下配置了一个镜像源(也可在执行脚本中指定)。



配置完Node后继续配置下一步,这里选择shell脚本,此脚本执行后会打包vue项目并把dist压缩。


#!/bin/bash
set -x # 打印执行的命令
echo "======= Node/npm 版本 ======="
node -v
npm -v
echo -e "\\n======= 切换 npm 镜像 ======="
npm config set registry https://registry.npmmirror.com
npm config get registry # 验证镜像切换成功
echo -e "\\n======= 开始安装依赖======="
npm install –verbose
echo -e "\\n======= 删除以前的构建 ======="
rm -rf ./dist
echo -e "\\n======= 开始构建项目 ======="
npm run build:prod
echo -e "\\n======= 压缩 ======="
tar -zcvf ./dist.tar.gz ./dist
继续添加下一步,之前用过publish over ssh插件,所以此处继续使用此插件把dist压缩包传送到服务器指定位置并完后后续操作。由于前后端项目想要存放的文件路径可能不一样,和之前一样先配一个配置publish over ssh。


配置完之后返回项目配置,继续配置下一步。



此脚本会执行换包的操作并重启nginx。nginx需提前配置好。
#!/bin/bash
set -ex
#参数
TARGET_DIR="/usr/share/nginx/html"
KEEP_FILE="dist.tar.gz"
TAR_FILE="${TARGET_DIR}/${KEEP_FILE}"
# 强制切换到目标目录(避免执行目录错误)
cd "${TARGET_DIR}" || { echo "切换到目标目录失败!"; exit 1; }
echo -e "\\n======= 步骤1:验证压缩包是否存在 ======="
if [ ! -f "${TAR_FILE}" ]; then
echo "结果:压缩包不存在!路径:${TAR_FILE}"
ls -l "${TARGET_DIR}"
exit 1
fi
echo "结果:压缩包存在 → ${TAR_FILE}"
echo -e "\\n======= 步骤2:清空部署目录 ======="
find "${TARGET_DIR}" -mindepth 1 -maxdepth 1 ! -name "${KEEP_FILE}" -exec sudo rm -rf {} \\;
echo "结果:部署目录清空成功"
echo -e "\\n======= 步骤3:解压压缩包 ======="
# 仅保留基础解压参数,-C确保解压到目标目录
sudo tar -zxvf "${TAR_FILE}" -C "${TARGET_DIR}"
echo "结果:压缩包解压成功(保留dist外层目录)"
# 验证解压结果:列出目录内容
ls -l "${TARGET_DIR}" | head -10
echo -e "\\n======= 步骤4:删除压缩包 ======="
sudo rm -f "${TAR_FILE}"
echo "结果:压缩包删除成功"
echo -e "\\n======= 步骤5:重启Nginx ======="
sudo nginx -t # 加sudo避免权限不足
if [ $? -eq 0 ]; then
sudo systemctl restart nginx
if systemctl is-active –quiet nginx; then
echo "结果:Nginx重启成功"
else
echo "结果:Nginx重启失败!"
exit 1
fi
else
echo "结果:Nginx配置语法错误,取消重启!"
exit 1
fi
echo -e "\\n======= 最终结果:所有操作执行成功 ======="
exit 0
执行测试,可以看到成功拉取代码,执行install命令,执行build构建,压缩,换包,重启nginx。




十二、改用Gitee主动推送触发构建
此操作需要服务器连接外网,或者配置路由映射。由于Gitee插件提供的webhook稳定性不高,改用Generic Webhook Trigger插件实现,首先需要安装此插件。之后需要生成token




会使用token建立不同的webhook连接,所以这里最好给各个token起一个名字

有了token之后去项目里配触发器

token为刚才生成的

之后去Gitee配webHook,进入代码仓库–>管理–>WebHooks–>添加webHook

刚才配置触发器时token下方提示
的
u
r
l
即
为
需要
往
G
i
t
e
e
的
web
h
o
o
k
里
配置
的
url
,
ip
为
外网
Ip
,
端口
为
J
enkins
的
端口。


之后点击测试、可以看到请求发送成功、Jenkins也被成功触发



现在这个基本够用,但是如果想实现精准的捕获仓库的指定分支再执行构建,还需做另外的配置。
以下为Gitee通过webhook发送的请求体,其中包含了分支字段,需要做的配置就是提取分支字段并过滤掉其他分支。
{
"ref": "refs/heads/dev", // 分支完整路径
"repository": {
"name": "项目名"
},
"commits": [/* 提交信息 */]
}
回到刚才的项目的触发器配置那里,继续配置一些参数


选中这两个会把请求体和刚才配好的branch_name的值打出来

往下滑,继续配置触发规则

这样配置后只有dev_smart_energy分支有活动时才会触发构建。
测试,分支名为test_version时,没有触发构建,分支名为dev_smart_energy时触发构建。


十三、邮件通知构建结果
以网易126邮箱为例,先去开启SMTP服务

下滑看到服务器地址,使用SMTP服务,端口可以百度一下为465

生成授权码

现在去Jenkins配置邮箱,Jenkins已经自带了邮件插件,但是功能不多,这里先安装一个Email Extension插件,然后去配置

配Jenkins Location,System Admin e-mail address要与下面的E-mail Notification里的用户名保持一致

往下翻配置E-mail Notification

全局凭证的配置

继续配置一些其他的内容


配置完插件后去项目里添加构建完成后的步骤,主要是配置一个触发规则这里配置为总是触发,即成功、失败、不稳定等都会发邮件。



测试,成功收到邮件


十四、错误解决
1、启动jenkins时报错缺少字体
解决方案:安装字体。

2、启动jenkins时报JDK版本不支持
解决方案:升级JDK

3、jenkins插件安装不上
一般是版本不匹配,降低或升高插件版本再次安装,一般插件的发布日期和Jenkins的发布日期在同年即可,安装的时候可以看到发布日期。



4、配置gitee时测试连接请求失败
原因是 Jenkins 的 Gitee 插件与 Gitee API 的参数命名格式不兼容,插件使用了下划线命名(SNAKE_CASE),但 Gitee API 要求驼峰命名(CamelCase),导致请求参数解析失败。所以需要升级插件。

5、配置gitee仓库时连接不上
是因为服务器没有安装git的原因,需要在服务器上安装git。

安装完后配置需要配置git目录,注意是可执行文件的目录(使用which git 查看)


7、配置gitee仓库时https协议不支持
需要在服务器安装Git的时候就指明附带curl工具安装(./configure –prefix=/usr/local/git –with-curl)

8、配置Gitee仓库时显示鉴权失败
需要把令牌配置进全局凭证里,注意username是令牌对应的gitee账号的用户名、password是令牌。





而后配置仓库时选中此凭证

9、配置gitee仓库时显示无法访问
选中全局凭证后报403,一般是由于凭证的用户名和密码对应不上造成的

用户名就是Gitee网站标签括号里面的

10、邮件发送报533
是发送邮件的地址和 SMTP 认证的账号的地址不一致造成的,需要配一下Jenkins 的发件人邮箱地址。


网硕互联帮助中心





评论前必须登录!
注册