一键部署 Jenkins 实现自动化 CI/CD 环境(CentOS 7 原生安装)
本文详细介绍了如何在 CentOS 7 环境下,手动部署 Jenkins 并结合 Git、Maven、Node.js 完成 后端+前端项目自动化构建与发布 的完整流程。
原文链接:一键部署 Jenkins 实现自动化 CI/CD 环境(CentOS 7 原生安装)
📦 环境准备
- 操作系统:CentOS 7
- Java 版本:JDK 11(推荐)
- 工具依赖:Maven、Git、Node.js(18.20.4)
☕ 安装 JDK 11
1. 下载 JDK 安装包
推荐使用华为镜像源:
📥 下载地址:https://repo.huaweicloud.com/java/jdk/11.0.2+7/
2. 上传并解压到服务器
上传路径示例:/usr/local
tar -zxvf jdk-11.0.2_linux-x64_bin.tar.gz
3. 配置环境变量
vim /etc/profile
追加:
JAVA_HOME=/usr/local/jdk-11.0.2
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
加载配置:
source /etc/profile
验证:
java -version
⚙️ 安装 Maven
1. 上传并解压
📥 下载地址:https://maven.apache.org/download.cgi
上传至目录:/opt/maven
tar -zxvf apache-maven-3.9.9-bin.tar.gz
2. 配置环境变量
vim /etc/profile
追加:
MAVEN_HOME=/opt/maven/apache-maven-3.9.9
export MAVEN_HOME
export PATH=$PATH:$MAVEN_HOME/bin
source /etc/profile
验证:
mvn -version
3. 配置阿里云镜像源
vim /opt/maven/apache-maven-3.9.9/conf/settings.xml
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
🧰 安装 Git
yum install git
git --version
🔧 安装 Node.js(用于前端项目)
推荐版本:18.20.4
下载地址:https://unofficial-builds.nodejs.org/download/release/v18.20.4/
1. 上传并解压
上传至 /usr/local
:
tar -zxvf node-v18.20.4-linux-x64-glibc-217.tar.gz
mv node-v18.20.4-linux-x64-glibc-217 node-v18.20.4
2. 配置环境变量
vim /etc/profile
export NODE_HOME=/usr/local/node-v18.20.4
export PATH=$NODE_HOME/bin:$PATH
source /etc/profile
验证:
node -v
npm -v
3. 更换 npm 镜像源
bash复制编辑npm install -g nrm
nrm use tencent
npm config get registry
🛠️ 安装并启动 Jenkins(使用 WAR 包)
1. 下载并上传
📥 下载地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/2.499/
建议版本不低于 2.346.1
上传至 /opt/jenkins
:
nohup java -jar jenkins.war > nohup.out 2>&1 &
2. 开放端口并安装字体库
默认端口是8080,需要放开端口,不然无法访问。
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
重载防火墙
sudo firewall-cmd --reload
查看所有开放端口
sudo firewall-cmd --zone=public --list-ports
访问:http://IP:8080
一开始可能出现以下报错
需要安装fontConfig,然后重载配置
yum install fontconfig
正常会进入当前界面
3. 初始化配置
查看初始密码:
cat /root/.jenkins/secrets/initialAdminPassword
🔌 插件推荐
插件名称 | 作用 |
---|---|
Publish Over SSH | 支持远程部署 |
NodeJS | 支持 Node 构建 |
Maven Integration | Maven 打包支持 |
进入Plugin界面
1. Publish Over SSH
可以远程拉取git仓库代码。
2. NodeJS
可以部署前端
3. Maven Integration
可以执行Maven打包命令
Jenkins默认地址
/root/.jenkins
🏗️ 后端自动部署流程(基于 Maven 项目)
1. 配置远程仓库信息
进入System
需要先在服务器里面创建对应的文件地址,我这边地址是,新建一个文件夹,里面新建api文件夹,这个地址设置为远程代码存放位置
2. 创建Maven项目
3. 配置Git仓库地址
需要写入仓库地址,以及录入对应的用户名,密码,否则无法连接远程仓库。
保存
4. 初次构建
点击Build Now系统会自动构建项目,点击构建历史里面的数据,可以浏览详细执行情况
拉取代码成功,可以在/root/.jenkins/workspace查看拉取的代码
5. Post Steps运行Jar包
我们可以通过以上方式拉取代码到本地服务器,但是这个代码此时并不能直接执行,我们需要将代码编译成Jar包,通过java -jar的方式运行程序。我们需要在拉取完成后,执行编译代码,继续进入配置环境,找到构建代码位置,选择SSH连接。
数据流重定向
将某个命令执行后要出现在屏幕上的数据传输到其他地方
标准输出(stdin):代码为0,使用<或者<<
标准输入(stdout): 代码为1,使用>或>>
标准错误输出(stderr): 代码为2,使用2> 或者2>>
>覆盖写
>>追加
运行结果
可以在指定步骤1中配置的目录查看当前生成的jar包。
有了Jar包,就可以运行代码,上面已经写好了运行jar的代码,会在构建后自动执行,可以通过jps查看当前运行Id。
6. Pre Steps
每次拉取代码到本地服务器,再执行打包,运行jar包,会产生对个运行的jar包,而且会多个jar包占用同一个端口,所以每次都需要先停止之前运行的命令,并且将当前jar包移动到指定位置做备份,然后删除当前jar包,等待重新生成jar包,然后运行。
步骤如下
- 停止命令
- 备份旧jar包
- 删除旧jar包
- 生成新jar包
- 执行新jar包
1. 创建脚本
vim x.sh
#!/bin/bash
projectName=$1
pid=$(ps -ef | grep -w "$projectName" | grep 'java -jar' | grep -v grep | awk '{print $2}')
if [ -z "$pid" ]; then
echo "$projectName not started"
exit 0 # 无进程时正常退出
else
kill -9 $pid
sleep 2
if ps -p $pid > /dev/null; then
echo "Failed to kill $pid"
exit 1
fi
echo "$projectName $pid stopped"
fi
# 备份操作
SOURCE_DIR="/xxx/api"
BACKUP_ROOT="/xxx/back/api"
VERSION=$(date +%Y%m%d%H%M%S)
TARGET_DIR="$BACKUP_ROOT/$VERSION"
mkdir -p "$BACKUP_ROOT" || { echo "无法创建备份目录"; exit 1; }
if rsync -av --delete "$SOURCE_DIR/" "$TARGET_DIR/"; then
echo "备份成功: $TARGET_DIR"
rm -rfv "$SOURCE_DIR"/* # 详细输出删除内容
else
echo "备份失败"
exit 1
fi
赋予权限
chmod 777 x.sh
2. 运行脚本
保存运行,即可实现上述需求。
🌐 前端自动部署流程(基于 Node + Nginx)
✅ 总结需要提前安装NodeJs插件、Node。
需要配置好nginx,核心配置如下
server {
listen 80;
server_name ip;
location / {
root /xx/web;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# 反向代理,处理管理端发送的请求
location /api/ {
proxy_pass http://localhost:8000/admin/;
proxy_set_header Referer $http_referer;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
1. 配置NodeJs插件
进入Tools
2. 配置远程服务器地址
这里需要和之前Jenkins后端存储位置做区分,需要新建一个存储地址。就是上面的nginx配置地址
配置步骤和前面一样,一样需要新建一个web文件夹
3. 创建空项目
4. 配置Git前端地址
5. 选择构建环境
6. 编写构建脚本
- npm install 安装依赖
- npm run:build 构建dist包
- 备份旧构件包
- 删除旧构件包
- 复制新构件包
node -v
npm -v
rm -rf package-lock.json
npm install --legacy-peer-deps --ignore-scripts
npm run build:test > /dev/null 2>&1
BACKUP_DIR="/ntdc/back/web/$(date +%Y%m%d%H%M%S)"
mkdir -p "$BACKUP_DIR"
cp -rp /ntdc/web/. "$BACKUP_DIR/"
rm -rf /ntdc/web/* /ntdc/web/.* 2>/dev/null || true
cp -rp dist/. /ntdc/web/
有可能在install的时候无法安装,报错。
可以先删除package-lock.json,重新构建。
这个脚本可以自行构建。
7. 生成位置
通过本文你可以:
- 实现 Jenkins 原生部署
- 配置 Java/Maven/Git/Node 全链路环境
- 自动化构建后端 Jar 项目
- 自动化部署前端静态文件
- 配置 Nginx 实现对外访问
本文转载于:程序员飞云