目录规划
- Jenkins数据目录:
/var/lib/jenkins - Jenkins systemd单元文件:
/usr/lib/systemd/system/jenkins.service(新版唯一配置文件) - JDK17 Temurin:
/usr/local/jdk - Maven3.9.16:
/usr/local/maven - 网页端口:8080
- 初始管理员密码:
/var/lib/jenkins/secrets/initialAdminPassword
一、调整防火墙
# 永久关闭SELinux
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 防火墙放行8080端口;云服务器额外在服务商安全组放行8080
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload
firewall-cmd --list-ports
校验:getenforce 返回 Permissive
二、:安装JDK17
cd /usr/local
wget https://mirrors.tuna.tsinghua.edu.cn/Adoptium/17/jdk/x64/linux/OpenJDK17U-jdk_x64_linux_hotspot_17.0.21_9.tar.gz
tar -zxvf OpenJDK17U-jdk_x64_linux_hotspot_17.0.21_9.tar.gz
mv jdk-17.0.21+9 jdk
# 写入全局环境变量
cat >> /etc/profile.d/java.sh <<EOF
export JAVA_HOME=/usr/local/jdk
export PATH=\$PATH:\${JAVA_HOME}/bin
EOF
source /etc/profile.d/java.sh
# 验证
java -version
注意用EOF写入文件时,记得
$要加转义符\预期输出:openjdk version "17.0.21"
三、安装Git
yum install -y git
git --version
四、安装 Maven
cd /usr/local
wget https://mirrors.aliyun.com/apache/maven/maven-3/3.9.16/binaries/apache-maven-3.9.16-bin.tar.gz
tar -zxvf apache-maven-3.9.16-bin.tar.gz
mv apache-maven-3.9.16 maven
# 写入环境变量
cat >> /etc/profile.d/maven.sh <<EOF
export M2_HOME=/usr/local/maven
export PATH=\$PATH:\${M2_HOME}/bin
EOF
source /etc/profile.d/maven.sh
# 校验
echo $PATH
# 修改settings.xml 阿里云maven仓库镜像(打包拉依赖加速)
vim /usr/local/maven/conf/settings.xml
找到
<mirrors>标签,粘贴下面镜像配置:只留一个mirror
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
# 验证maven
mvn -v
输出Maven 3.9.16,绑定JDK17
五、安装 Jenkins
2.500+版本 不再读取 /etc/sysconfig/jenkins ,所有JVM、端口、JAVA_HOME配置在
/usr/lib/systemd/system/jenkins.service
cd /usr/local
# 安装jenkins字体依赖
yum install fontconfig -y
# 清华jenkins镜像,你找到的包,地址校验可用
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.528.3-1.1.noarch.rpm
yum install -y ./jenkins-2.528.3-1.1.noarch.rpm
5.1 修改 jenkins.service 单元文件(新版核心配置)
vim /usr/lib/systemd/system/jenkins.service
修改这几个环境变量(直接覆盖原有,按需调整内存)
指定我们的JDK17
Environment="JAVA_HOME=/usr/local/jdk"
JVM参数:4G机器推荐 -Xmx2g -Xms1g;8G机器 -Xmx4g -Xms2g
Environment="JAVA_OPTS=-Djava.awt.headless=true -Xmx2g -Xms1g"
网页端口,默认8080,改端口在这里修改
Environment="JENKINS_PORT=8080"
Jenkins数据家目录,一般不动
Environment="JENKINS_HOME=/var/lib/jenkins"
5.2 重载并启动
systemctl daemon-reload
systemctl start jenkins
systemctl enable jenkins
systemctl status jenkins
5.3 替换国内插件源
cd /var/lib/jenkins/updates
cp default.json default.json.bak
sed -i 's#https://updates.jenkins.io/download#https://mirrors.huaweicloud.com/jenkins#g' default.json
sed -i 's#http://www.google.com#https://www.baidu.com#g' default.json
# 修改更新中心配置
vim /var/lib/jenkins/hudson.model.UpdateCenter.xml
# 重新启动
systemctl restart jenkins
systemctl status jenkins
看到
active (running)代表启动成功浏览器访问:
http://服务器IP:8080
# 获取初始管理员密码(网页解锁用)
cat /var/lib/jenkins/secrets/initialAdminPassword
# 实时日志排错
tail -f /var/log/messages |grep -i jenkins
六、安装插件
Jenkins 2.528+ 在初始化向导时,默认会去联网校验更新中心地址,哪怕你服务器本身能上网,只要更新中心地址访问不通,就直接弹出【离线】,跳过 "推荐插件" 页面。
6.1 页面选择【跳过插件安装】,创建管理员账号,进入 Jenkins 首页
6.2 进入首页后,再修改更新中心为国内源(这个阶段修改才生效!)
系统管理 → 插件管理 → 高级 -> 找到【更新站点】,地址改成:
https://mirrors.huaweicloud.com/jenkins/update-center.json
提交保存,回到【可用插件】,等待索引加载完成(首次加载会慢
6.3 需要的核心插件清单(后面去可用插件里勾选安装)
- Pipeline
- Git
- Maven Integration
- Publish Over SSH(远程部署 jar)
- Generic Webhook Trigger(可选,代码提交自动触发)
- Deploy to container
- GitHub Branch Source
- GitHub Authentication
- Locale (中文环境插件前置)
- Localization: Chinese (Simplified)(中文环境插件)
6.4 修改语言环境
系统管理 -> Appearance -> Default Language -> 中文 -> 勾选Ignore browser preference and force this language to all users
七、全局工具配置(系统管理 → 全局工具配置)
7.1 maven setting
# 将 默认 settings 提供 和 默认全局 settings 提供 改为
/usr/local/maven/conf/settings.xml
7.2 JDK:
# 新增JDK,名称`JDK17`,取消自动安装,JAVA_HOME填:
/usr/local/jdk
7.3 Git:
# 新增Git,路径
/usr/bin/git
7.4 Maven:
# 新增Maven,名称`maven3.9.16`,取消自动安装,MAVEN_HOME填
/usr/local/maven
保存
八、配置jenkins服务器免密web服务器
假设192.168.2.21是web服务器
8.1 配置免密
# 在jenkins服务器准备密钥
su - jenkins -s /bin/bash
ssh-keygen
ssh-copy-id root@192.168.2.21
# 记录id_rsa
cat /var/lib/jenkins/.ssh/id_rsa
# 测试
ssh root@192.168.2.21
8.2 在jenkins-web上配置免密
- 系统管理->系统配置->publish over ssh ->新增SSH Server
- Name填入应用服务器名
web1->Hostname应用服务器ip192.168.2.21->Username远程用户名root->Remote Directory工作目录/- 高级->勾选Use password authentication, or use a different key->Key->填入上一步记录的私钥
id_rsa->然后测试test configuration
九、案例-以ruoyi为例
9.1 新建任务
新建任务 -> 输入任务名称 -> 自由风格项目
9.2 源码管理
Git > https://gitee.com/y_project/RuoYi.git
Triggers触发器,什么都不选则是手动触发,手动构建build now
9.3 Build Steps
9.3.1 Execute shell
echo "====================================="
echo "构建开始时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "WORKSPACE: ${WORKSPACE}"
sed -i "s/password: password/password: chaoROOT1314./g" /var/lib/jenkins/workspace/ruoiyi/ruoyi-admin/src/main/resources/application-druid.yml
sed -i "s/localhost/192.168.2.7/g" /var/lib/jenkins/workspace/ruoiyi/ruoyi-admin/src/main/resources/application-druid.yml
echo "GIT_COMMIT: $(git rev-parse --short HEAD)"
echo "GIT_BRANCH: ${GIT_BRANCH}"
echo "====================================="
9.3.2 Invoke top-level Maven targets
选择maven版本maven3.9.16-> 目标:clean package -DskipTests
9.3.3 Execute shell
JAR_FILE="${WORKSPACE}/ruoyi-admin/target/ruoyi-admin.jar"
if [ ! -f "${JAR_FILE}" ];then
echo "ERROR: Jar包不存在!打包失败,终止流水线"
exit 1
fi
echo "✅ 产物校验通过,jar路径:${JAR_FILE}"
ls -lh ${JAR_FILE}
9.4 增加构建后操作步数
选择Send files or execute commands over SSH
SSH Server选择应用服务器,一般为
8.2构建的服务器
# Source files
ruoyi-admin/target/ruoyi-admin.jar
# Remove prefix
ruoyi-admin/target/
# Remote directory
/opt/ruoyi/app/
# Exec command
nohup /usr/local/jdk/bin/java -jar /opt/ruoyi/app/ruoyi-admin.jar > /opt/ruoyi/logs/ruoyi.log 2>&1 &
注:
- 构建好的文件在jenkins服务器的/var/lib/jenkins/workspace/ruoiyi/ruoyi-admin/target/ruoyi-admin.jar。/var/lib/jenkins/workspace是工作路径,ruoiyi是构建任务名,剩下的ruoyi-admin/target/ruoyi-admin.jar是Source files
- Remove prefix移除路径ruoyi-admin/target/,因为jenkins会按照Source files(ruoyi-admin/target/ruoyi-admin.jar)传送,不移除的话,会在指定目录下,再创建目录ruoyi-admin/target/,其下才是ruoyi-admin.jar
- Remote directory目标目录,会与
8.2的Remote Directory发生拼接:
8.2的Remote Directory是/,这里的Remote directory 是/opt/ruoyi/app/,所以jenkins会把jar包传送到应用服务器的/opt/ruoyi/app/位置 - Exec command 启动项目的命令
