ICollection

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

使用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

使用浏览器打开页面,用初始密码登录。
01
之后,系统会要求选择安装推荐的插件或者自己选择插件。
02
如果选择安装推荐的插件,会比较慢,国内网络一般要一个小时左右。
03
可以自己选择插件来安装。
04
此处我们先不选择任何插件,直接下一步。可以直接使用admin账号,不创建新的管理员。
05
配置实例,使用默认的URL就可以了。
06
初始化完成,可以开始使用。
07
进入Jenkins主界面。
08

4 安装Jenkins插件

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

4.1 安装Chinese插件

在插件界面可用插件界面搜索Chinese,选中之后安装。
12
之后进入安装界面,勾选安装完成后重启动。
13
15

4.2 安装git插件

14

4.3 安装Maven Integration插件

安装方法相同,此处略。

4.4 安装Publish Over SSH插件

安装方法相同,此处略。

4.5 安装NodeJS插件

安装方法相同,此处略。

4.6 安装Pipeline插件

安装方法相同,此处略。

5 安装全局工具

5.1 安装maven

在系统管理、全局工具配置中新增Maven,填写一个Maven名称,然后点击保存。此时不会自动安装Maven,在有构建任务运行时才会下载Maven。
21
建议可以直接下载Maven文件,放置到jenkins_home/tools/目录下。

root@sv100:/data/Jenkins/data/tools# ls
Maven_3.9.16

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

5.2 安装JDK

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

5.3 安装NodeJS

手工方式,将NodeJS目录复制到jenkins_home/tools/目录下,在全局工具配置中添加NodeJS。
25
在管理、管理文件、添加配置文件菜单中添加一个Npm config file​文件,添加一个NPM Registry,内容填写 https://registry.npmmirror.com/ ,这是淘宝镜像。
26
27

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的文件内容作为密钥文本粘贴进去。
31

6.3 在Jenkins中创建凭据

在系统能够管理、凭据、系统、全局凭据中,添加凭据,选择SSH Username with private key。
32
填写各项信息,注意Username项,将id_ed25519的内容作为私钥粘贴进文本框。
33

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文本框。
35
然后再添加一个SSH Server,填写名称、主机地址、用户、初始目录,最后保存。
36

8 创建Maven任务

创建Maven项目以构建Java后端服务,设置一个任务名称。
41
选择JDK的版本,如果安装了一个JDK,会不出现选择JDK的选项。
42
源码管理选择Git,将Url粘贴进来,注意用户名与前面配置的一致。凭据也选择git,指定分支,如“*/main”。
43
设置项目的pom文件,maven构建参数。
44
添加一个PostStep,选择Send files or execute commands over SSH。
44
在Send over SSH步骤中选择SSH Server,填写要发送的文件相对路径,文件前缀。
46
目标目录的相对路径,以及发送后执行的命令。考虑发送时间,这里等待了5秒钟,然后重启动了发布网站用的jre17 docker容器。
47
创建任务之后,就可以执行任务,然后在控制台输出中观察执行过程中的问题。
48

9 创建Node任务

创建自由风格项目以构建Vue前端服务,设置一个任务名称。
51
源码管理选择Git,将Url粘贴进来,注意用户名与前面配置的一致。凭据也选择git,指定分支,如“*/main”。
在构建步骤那里,增加一个构建步骤,选择Execute NodeJS script
52
选择NodeJS版本,选择npmrc file为之前配置配置文件。
53
再增加一个构建步骤,选择执行shell,里面填写编译前端的语句。如npm install、npm run build等。
54
在本例中,需要将前端导入到OSS中,因此使用了MC工具,将npm build的结果覆盖到MinIO中。

10 创建流水任务

当项目由多个前端和多个候选项目组成时,可以使用复制的方法快速创建项目。
61
创建一个流水线项目。
62
设置定时构建,注意这里面的时间是UTC时间。
63
在流水线使用Pipeline script,按照顺序排列子任务。
64
最后构建一下,测试整个流水线。
65
在主界面可以查看各任务执行情况。
66

posted on 2026-09-04 23:42  ICollection  阅读(3)  评论(0)    收藏  举报