一、安装Jenkins
1、安装Jenkins
docker pull jenkins/jenkins:lts
使用Docker卷(自动管理权限)
docker volume create jenkins_home
或手动创建主机目录(需设置权限)
mkdir /mnt/jenkins_home
mkdir /mnt/jenkins_home/logs
#授权文件夹
chmod 777 /mnt/jenkins_home
chmod 777 /mnt/jenkins_home/logs
启动Jenkins容器
docker run -d -p 8888:8080 -p 50099:50000 \
--name jenkins \
--restart=always \
--privileged=true \
-v /mnt/jenkins_home:/var/jenkins_home \
-v /mnt/jenkins_home/logs:/var/log/jenkins \
-v /etc/localtime:/etc/localtime:ro \
jenkins/jenkins:lts
-d: 后台运行容器。
--name: 容器名称。
-p 8888:8080: 映射Web界面端口。
-p 50099:50000: 供Jenkins Agent连接的端口。
-v: 数据卷挂载,确保数据持久化。
2、查找密码
docker logs jenkins # 在日志中查找密码
或直接从容器中读取
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
3、创建hudson.model.UpdateCenter.xml文件(修改清华镜像源下载插件用)
vim /mydata/jenkins/jenkins_home/hudson.model.UpdateCenter.xml
内部输入如下内容
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json\</url>
</site>
</sites>
二、Jenkins配置
1、首页输入初始密码进入

2、选择安装社区插件(较慢,耐心等待)


3. 安装jdk和maven
-
进入容器
docker exec -u root -it jenkins bash
-
更新包管理器
apt update
-
安装openjdk java17 (jenkins lts版本已放弃java8)
pt install -y openjdk-17-jdk
验证安装
java -version
下载并解压 Maven
apt install -y wget
apt install -y vim
wget https://downloads.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
tar -xzvf apache-maven-3.8.8-bin.tar.gz -C /opt/
mv /opt/apache-maven-3.8.8 /opt/maven
编辑settings.xml 里面的mirror标签的maven镜像地址为阿里云的
vim /opt/maven/apache-maven-3.8.8/conf/settings.xml
<mirror>
<id>nexus-aliyun</id>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/\</url>
<mirrorOf>central</mirrorOf>
</mirror>
配置Maven的环境变量
echo "export M2_HOME=/opt/maven/apache-maven-3.8.8" >> ~/.bashrc
echo "export PATH=\M2_HOME/bin:\\PATH" >> ~/.bashrc
source ~/.bashrc
验证安装
mvn -version
安装git
apt install git
jenkins配置jdk,maven,git路径
安装gitee插件

安装maven插件

-
安装远程连接服务插件:Publish Over SSH
-
安装发布插件:Deploy to container Plugin
-
进入配置页
-
jdk配置

maven 配置

- git配置

配置完点击保存

5.配置需要发布部署的远程服务器
找到系统管理 -> 系统配置进入页面,找到publish over SSH

四.配置项目自动构建
选择构建maven项目









五、自动部署(命令行方式,使用Deploy to container Plugin插件的话不需要看)
1、配置服务器间免密登录
- 生成公私钥
docker exec -u root -it jenkins bash
cd /root/.ssh/
执行生成秘钥,输入后一路回车
ssh-keygen -t rsa -C "root"
cat id_rsa.pub
cat id_rsa
接下来需要将公钥导入到认证文件中
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
给对应文件授权
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
将authorized_keys 文件拷贝到应用服务器的admin用户.ssh目录下. 首次需要输入密码
scp -p /root/.ssh/id_rsa.pub [email protected]:/root/.ssh/authorized_keys
在jenkins容器内进行免密连接测试.
在jenkins服务器的/home/admin目录下创建filetest文件,并拷贝到应用服务器
cd ~/
touch filetest
scp -p filetest [email protected]:/root/
进入到应用服务器(111.229.7.217),检查/root目录下是否出现filetest
在jenkins服务器上使用ssh进行免密连接测试,成功后会出现Last Login的提示
Last login: Fri Feb 14 21:57:33 2025 from 223.80.70.133
exit
在jenkins容器内进行免密连接测试.
在jenkins服务器的/home/admin目录下创建filetest文件,并拷贝到应用服务器
cd ~/
touch filetest
scp -p filetest [email protected]:/root/
进入到应用服务器(111.229.7.217),检查/root目录下是否出现filetest
在jenkins服务器上使用ssh进行免密连接测试,成功后会出现Last Login的提示
Last login: Fri Feb 14 21:57:33 2025 from 223.80.70.133
exit
复制密钥给jenkins用户用
sudo mkdir -p /var/jenkins_home/.ssh
sudo chown jenkins:jenkins /var/jenkins_home/.ssh
sudo chmod 700 /var/jenkins_home/.ssh
sudo cp /root/.ssh/id_rsa /var/jenkins_home/.ssh
sudo chown jenkins:jenkins /var/jenkins_home/.ssh/id_rsa
sudo chown jenkins:jenkins /var/jenkins_home/.ssh/id_rsa.pub
sudo chmod 600 /var/jenkins_home/.ssh/id_rsa
2、编写jenins发布脚本
#!/bin/bash
echo "部署的目录和项目名称"
DIR="/data/app" #部署路径
projectName="springboot" #项目名称
echo "待部署的应用服务器,可多台"
server_ips="111.229.7.217" #多台用,号隔开
for server_ip in ${server_ips[@]}
do
echo "ssh连接进行备份操作"
ssh -Tq -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mkdir -p DIR/backup/{projectName}
如果存在则备份
if [ -f "DIR/{projectName}/${projectName}.jar" ];then
mv DIR/{projectName}/{projectName}.jar DIR/backup/{projectName}/{projectName}-`date "+%Y%m%d_%H%M%S"`.jar
fi
EOF
echo "拷贝jar包到目标服务器的tmp目录"
scp -q -oStrictHostKeyChecking=no {WORKSPACE}/target/\*.jar root@{server_ip}:/tmp/${projectName}.jar
echo "ssh远程连接进行发布操作"
ssh -q -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mv /tmp/{projectName}.jar DIR/{projectName}/{projectName}.jar
程序启停脚本
sh DIR/{projectName}/stop.sh
sh DIR/{projectName}/start.sh
EOF
done
echo "部署success"
3、 编写应用启动脚本放在程序服务器上 start.sh
#!/bin/bash
set -e #任何命令出错就退出
set -o pipefail
APP_ID=it235-boot
APP_DIR="/data/app"
nohup java -Dspring.profiles.active=dev -jar {APP_DIR}/{APP_ID}/${APP_ID}.jar > release_out.log &
start_ok=false
if [[ $? = 0 ]];then
sleep 3
tail -n 10 release_out.log
sleep 5
tail -n 50 release_out.log
fi
aaa=`grep "Started" release_out.log | awk '{print $1}'`
if [[ -n "${aaa}" ]];then
echo "Application started ok"
exit 0
else
echo "Application started error"
exit 1
fi
4、编写应用停止脚本放在程序服务器上 stop.sh
#!/bin/bash
APP_ID=it235-boot
ps aux | grep {APP_ID} \| grep -v "grep" \| awk '{print "kill -9 "2}' | sh
5、添加构建成功时后续部署动作

#!/bin/bash
set -e # 任何命令失败时立即退出
echo "部署的目录和项目名称"
DIR="/data/app" # 部署路径
projectName="springboot" # 项目名称
echo "待部署的应用服务器"
server_ips="111.229.7.217" # 多台用逗号隔开
for server_ip in (echo server_ips | tr ',' ' '); do
echo "操作服务器: $server_ip"
echo "1. 备份旧版本"
ssh -T -o StrictHostKeyChecking=no root@${server_ip} <<EOF
mkdir -p DIR/backup/{projectName}
mkdir -p DIR/{projectName}
if [ -f "DIR/{projectName}/${projectName}.jar" ]; then
mv DIR/{projectName}/${projectName}.jar \\
DIR/backup/{projectName}/{projectName}-\\(date "+%Y%m%d_%H%M%S").jar
保留最近5个备份
ls -t DIR/backup/{projectName}/*.jar | tail -n +6 | xargs rm -f
fi
EOF
echo "2. 拷贝新版本到临时目录"
jar_source="{WORKSPACE}/target/{projectName}.jar"
if [ ! -f "$jar_source" ]; then
echo "错误:构建产物不存在 - $jar_source"
exit 1
fi
scp命令
scp -o StrictHostKeyChecking=no "jar_source" "root@{server_ip}:/tmp/${projectName}.jar"
echo "3. 发布新版本"
ssh -T -o StrictHostKeyChecking=no root@${server_ip} <<EOF
mv -f /tmp/{projectName}.jar DIR/{projectName}/{projectName}.jar
检查启停脚本是否存在
if [ ! -f DIR/{projectName}/stop.sh ] || [ ! -f DIR/{projectName}/start.sh ]; then
echo "错误:启停脚本缺失!"
exit 1
fi
重启应用
sh DIR/{projectName}/stop.sh
sh DIR/{projectName}/start.sh
EOF
done
echo "部署成功!"
六、构建成功发送钉钉通知
1. jenkins添加钉钉插件
- DingTalk

2.系统管理>钉钉 添加钉钉提醒


前往钉钉添加机器人



3.配置好后点击测试


4.构建测试
- 构建配置添加钉钉机器人

自定义内容(玩法很多,还没研究)
构建编号: 第${BUILD_NUMBER}次构建
测试报告: ${BUILD_URL}allure
构建日志地址: {BUILD_URL}console {GIT_BRANCH}
成功提醒

失败提醒

邮箱提醒(太麻烦,没写教程,很多参数没研究明白)

七、Jenkins API控制
1、Jenkins API 文档
- http://你的jenkins地址:8099/api 可以看到当前Jenkins版本支持的api
2、创建访问key

此后的所有请求都需要在header中携带此token
Authorization : Basic eWQ6Mxxxxxxxxxxxxxxx
此处eWQ6Mxxxxxxxxxxxxxxx 为创建token的base64编码!
3、获取Jenkins工作列表
url:http://jenkins地址:8099/api/json

4、触发构建
-
url:http://jenkins地址:8099/job/工作名称/build
- 注意,此处工作名称中文字符需要使用 URL 编码 如:"测试构建" 编码后是 %E6%B5%8B%E8%AF%95%E6%9E%84%E5%BB%BA。

触发构建
