使用Jenkins持续构建Java/Vue项目
1 环境和需求
目前有一台Linux服务器,我们需要在服务器上部署Jenkins服务,实现定时构建和部署一套业务系统。业务系统的源代码由git管理,系统包括Java的后端和Vue的前端,部署时前端编译好的静态文件需要发布在MinIO上,后端程序通过JRE的Docker容器运行,最后通过Nginx将前后端组合成可访问的网站。
2 部署Jenkins
本例中,使用Docker方式部署Jenkins,在dockerhub上查找Jenkins,发现最新版本为2.580,于是从镜像上 docker pull 获取该版本,并重命名。
root@sv100:/data# docker pull m.daocloud.io/docker.io/jenkins/jenkins:2.580
root@sv100:/data# docker tag m.daocloud.io/docker.io/jenkins/jenkins:2.580 jenkins:2.580
root@sv100:/data# docker image rm m.daocloud.io/docker.io/jenkins/jenkins:2.580
为Jenkins创建主目录/data/Jenkins和持久化目录/data/Jenkins/data、/data/Jenkins/root。
root@sv100:/data# mkdir Jenkins
root@sv100:/data# cd Jenkins
root@sv100:/data/Jenkins# mkdir data
root@sv100:/data/Jenkins# mkdir root
编辑 /data/Jenkins/compose.yaml 文件,由于本服务器8080端口被占用了,只好映射为9090端口。
name: jenkins
services:
jenkins:
image: jenkins:2.580
container_name: jenkins
restart: always
user: root
volumes:
- /data/Jenkins/data:/var/jenkins_home
- /data/Jenkins/root:/root
ports:
- 9090:8080
- 50000:50000
启动docker,查看日志,提示初始密码是什么,并且存储在/var/jenkins_home/secrets/initialAdminPassword文件中。
root@sv100:/data/Jenkins# docker compose up -d
[+] up 1/1
✔ Container jenkins Started 0.3s
root@sv100:/data/Jenkins# docker compose logs -f
jenkins | Running from: /usr/share/jenkins/jenkins.war
jenkins | webroot: /var/jenkins_home/war
jenkins | 2026-09-02 13:43:06.604+0000 [id=1] INFO winstone.Logger#logInternal: Beginning extraction from war file
jenkins | 2026-09-02 13:43:06.940+0000 [id=1] WARNING o.e.j.ee9.nested.ContextHandler#setContextPath: Empty contextPath
…………
…………
…………
jenkins | [LF]> *************************************************************
jenkins | [LF]>
jenkins | [LF]> Jenkins initial setup is required. An admin user has been created and a password generated.
jenkins | [LF]> Please use the following password to proceed to installation:
jenkins | [LF]>
jenkins | [LF]> 6a639f1dbd94452aa0f1e09e22febcaf
jenkins | [LF]>
jenkins | [LF]> This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
jenkins | [LF]>
jenkins | [LF]> *************************************************************
…………
…………
…………
3 初始化Jenkins
使用浏览器打开页面,用初始密码登录。

之后,系统会要求选择安装推荐的插件或者自己选择插件。

如果选择安装推荐的插件,会比较慢,国内网络一般要一个小时左右。

可以自己选择插件来安装。

此处我们先不选择任何插件,直接下一步。可以直接使用admin账号,不创建新的管理员。

配置实例,使用默认的URL就可以了。

初始化完成,可以开始使用。

进入Jenkins主界面。

4 安装Jenkins插件
点击主界面右上角的管理按钮,然后在管理界面中选择插件,进入管理插件界面。

4.1 安装Chinese插件
在插件界面可用插件界面搜索Chinese,选中之后安装。

之后进入安装界面,勾选安装完成后重启动。


4.2 安装git插件

4.3 安装Maven Integration插件
安装方法相同,此处略。
4.4 安装Publish Over SSH插件
安装方法相同,此处略。
4.5 安装NodeJS插件
安装方法相同,此处略。
4.6 安装Pipeline插件
安装方法相同,此处略。
5 安装全局工具
5.1 安装maven
在系统管理、全局工具配置中新增Maven,填写一个Maven名称,然后点击保存。此时不会自动安装Maven,在有构建任务运行时才会下载Maven。

建议可以直接下载Maven文件,放置到jenkins_home/tools/目录下。
root@sv100:/data/Jenkins/data/tools# ls
Maven_3.9.16

同时修改Maven的settings文件位置。

5.2 安装JDK
手工方式,将JDK目录复制到jenkins_home/tools/目录下,在全局工具配置中添加JDK。

5.3 安装NodeJS
手工方式,将NodeJS目录复制到jenkins_home/tools/目录下,在全局工具配置中添加NodeJS。

在管理、管理文件、添加配置文件菜单中添加一个Npm config file文件,添加一个NPM Registry,内容填写 https://registry.npmmirror.com/ ,这是淘宝镜像。


6 配置git认证
6.1 生成密钥文件
使用docker exec进入容器内,使用ssh-keyscan获取git服务器的公钥放入known_hosts文件。
然后用ssh-keygen生成公钥私钥对,私钥文件是id_ed25519,公钥文件是id_ed25519。
root@sv100:/data/Jenkins# docker exec -it jenkins /bin/bash
root@cc136118b6fc:/# cd
root@cc136118b6fc:~# mkdir .ssh
root@cc136118b6fc:~# ssh-keyscan -p 222 -H 192.168.1.100 >> /root/.ssh/known_hosts
root@cc136118b6fc:~# ssh-keygen -t ed25519 -C "jenkins" -f /root/.ssh/id_ed25519 -N ""
Generating public/private ed25519 key pair.
Your identification has been saved in /root/.ssh/id_ed25519
Your public key has been saved in /root/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:zLpBaEB1VjYuROg9jvoQVAmE91KkDFxJY+9+gDSQSzw jenkins
The key's randomart image is:
+--[ED25519 256]--+
|++BO=+=.+ |
|.E++*+ o . |
|..B* o. . |
| oo.*.o+ |
| .oo=..S |
| oo.o. |
| .. .o. |
| .. .o |
| .. . |
+----[SHA256]-----+
root@cc136118b6fc:~#
6.2 配置Gitea密钥
登录Gitea,进入仓库目录,到设置、部署密钥、添加部署密钥。将id_ed25519.pub的文件内容作为密钥文本粘贴进去。

6.3 在Jenkins中创建凭据
在系统能够管理、凭据、系统、全局凭据中,添加凭据,选择SSH Username with private key。

填写各项信息,注意Username项,将id_ed25519的内容作为私钥粘贴进文本框。

7 配置Publish Over SSH
使用docker exec进入容器内,然后用ssh-keygen生成公钥私钥对,私钥文件是id_ed25519,公钥文件是id_ed25519,也可以直接用之前生成的那对。
将公钥内容保存到目标服务器、目标用户主目录下的.ssh/authorized_keys文件中。放置好后,可以在容器内测试一下。
root@cc136118b6fc:/# ssh -i /root/.ssh/id_ed25519 -p 22 root@192.168.1.100 "echo OK && pwd"
OK
/root
在Jenkins的管理、系统配置界面下方的Publish over SSH 区段填写私钥的位置,或直接粘贴私钥到key文本框。

然后再添加一个SSH Server,填写名称、主机地址、用户、初始目录,最后保存。

8 创建Maven任务
创建Maven项目以构建Java后端服务,设置一个任务名称。

选择JDK的版本,如果安装了一个JDK,会不出现选择JDK的选项。

源码管理选择Git,将Url粘贴进来,注意用户名与前面配置的一致。凭据也选择git,指定分支,如“*/main”。

设置项目的pom文件,maven构建参数。

添加一个PostStep,选择Send files or execute commands over SSH。

在Send over SSH步骤中选择SSH Server,填写要发送的文件相对路径,文件前缀。

目标目录的相对路径,以及发送后执行的命令。考虑发送时间,这里等待了5秒钟,然后重启动了发布网站用的jre17 docker容器。

创建任务之后,就可以执行任务,然后在控制台输出中观察执行过程中的问题。

9 创建Node任务
创建自由风格项目以构建Vue前端服务,设置一个任务名称。

源码管理选择Git,将Url粘贴进来,注意用户名与前面配置的一致。凭据也选择git,指定分支,如“*/main”。
在构建步骤那里,增加一个构建步骤,选择Execute NodeJS script

选择NodeJS版本,选择npmrc file为之前配置配置文件。

再增加一个构建步骤,选择执行shell,里面填写编译前端的语句。如npm install、npm run build等。

在本例中,需要将前端导入到OSS中,因此使用了MC工具,将npm build的结果覆盖到MinIO中。
10 创建流水任务
当项目由多个前端和多个候选项目组成时,可以使用复制的方法快速创建项目。

创建一个流水线项目。

设置定时构建,注意这里面的时间是UTC时间。

在流水线使用Pipeline script,按照顺序排列子任务。

最后构建一下,测试整个流水线。

在主界面可以查看各任务执行情况。


浙公网安备 33010602011771号