本文讲述在虚拟机环境下(模拟服务器),使用docker方式搭建jenkins,并部署一个简单的Springboot项目。仅记录关键步骤和遇到的坑,后续再进行细节补充。
一、环境准备和基础工具安装
1. 环境
系统环境为本机vmware创建的Ubuntu24.04。
2. yum安装
Ubuntu24.04 yum安装-CSDN博客
3. docker安装
参考:官方文档 Ubuntu | Docker Docs
Ubuntu 22.04下Docker安装(最全指引)_docker ubuntu2204-CSDN博客
安装前准备:
#安装前先卸载操作系统默认安装的docker,
sudo apt-get remove docker docker-engine docker.io containerd runc
#安装必要支持
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
# 阿里源(推荐使用阿里的gpg KEY)
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
#添加 apt 源:
#Docker官方源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
#阿里apt源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
#更新源
sudo apt update
sudo apt-get update
安装:
#安装最新版本的Docker
sudo apt install docker-ce docker-ce-cli containerd.io
#等待安装完成
#查看Docker版本
sudo docker -v
#查看Docker运行状态
sudo systemctl status docker
报错1:Package *** has no installation candidate
原因是修改了apt的镜像源后没有更新软件包:只执行了 apt update 没有执行 apt-get upgrade,apt源里没有docker,需要添阿里源
测试拉取镜像运行:
docker pull hello-world
docker run hello-world
报错2:拉取镜像报错,Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
解决:配置加速地址并重启docker
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
测试拉取hello-world和运行没问题了说明已经装好了。
设置非root用户使用docker命令:
#创建docker组
sudo groupadd docker
#添加ithing进入docker组
sudo gpasswd -a ithing docker
#重启docker服务
sudo systemctl restart docker
#接下来就可以使用你添加的用户(ithing)进行使用docker命令了
exit 退出虚拟机重连生效
4. jenkins安装和配置
注意:安装jenkins前先安装jdk和maven,因为docker启动时要挂载jdk、maven目录,否则在jenkins配置jdk和maven时会报错。安装时尽量安装到用户目录,包括maven仓库地址的配置,否则可能会有权限问题。
参考:Linux开发环境搭建(二)之安装JDK和Maven_amazon linux2 安装java-CSDN博客
4.1 拉取镜像,lts长期稳定的最新版
docker pull jenkins/jenkins:lts
注意:jenkins的版本选择尽量提前确定好,目前lts最新版本为 > 2.346,官方提示2.346以后最低支持JDK11,也就是如果是JDK8的项目是会部署失败的(不过后面有插件可以解决解);选择低版本的jenkins可能会有插件安装失败的问题,所以版本要谨慎选择。
也可以安装blueocean版本,界面更加直观
docker pull jenkinsci/blueocean
jenkinsci/blueocean:这是一个专门为Jenkins设计的用户界面,旨在提供更直观、更现代的持续集成和持续部署(CI/CD)体验。Blue Ocean镜像通常包含Jenkins的长期支持(LTS)版本,并且已经预装了Blue Ocean插件,这些插件提供了一套全新的用户界面和交互方式,使得构建、查看和管理Jenkins项目变得更加简单和直观。
4.2 运行docker:(注意工作目录挂载)
docker run --name jenkins -u root --rm -d -p 8080:8080 -p 50000:50000
-v /var/run/docker.sock:/var/run/docker.sock
-v /home/user/jdk1.8.0_202/bin/java:/home/user/jdk1.8.0_202/bin/java
-v /home/user/jdk1.8.0_202:/home/user/jdk1.8.0_202
-v /home/user/apache-maven-3.8.8:/home/user/apache-maven-3.8.8
-v /var/jenkins_home:/var/jenkins_home jenkins/jenkins:lts
4.3 配置jenkins
插件安装:
安装完成后访问地址-> http://{部署Jenkins所在服务IP}:8080
此处会有几分钟的等待时间。
先点击安装推荐的插件,然后安装其他插件:
- 安装
Maven Integration
- 安装
Publish Over SSH
(如果不需要远程推送,不用安装) - 如果使用Gitee 码云,安装插件Gitee(Git自带不用安装)
配置jdk和maven,配置刚才安装的地址。
报错:is not a directory on the Jenkins master(but perhaps it exists on some agents
解决:说明启动jekins时没有挂载jdk和maven目录,或者没有目录权限
参考:Jenkins+Docker 实现一键自动化部署项目!步骤齐全,少走坑路 - 爵岚 - 博客园 (cnblogs.com)
5. 内网穿透工具安装natapp
因为需要使用gitee的WebHook自动构建任务,所以需要公网地址。选用natappa免费,但是域名可能会变化,运行时选择config.ini方式运行,映射8080端口,启动后就可以用域名访问jenkins.
后台运行:
(./natapp &)
查看日志:
参考:NATAPP1分钟快速新手图文教程 - NATAPP-内网穿透 基于ngrok的国内高速内网映射工具
6. jenkins构建第一个Springboot项目
问题:
1. WebHook没有生效,gitee测试时候不会自动构建。
后面发现idea提交可以生效能触发自动构建,gitee测试时候显示404
2. 不兼容jdk8的问题,版本号大于2.357时最低兼容jdk11,对jdk8不兼容
解决:不使用maven方式构建; 或者装构建参数的插件,选择jdk8构建,安装 JDK Parameter 插件。
参考:Jenkins升级jdk11后 JAVA项目使用低版本jdk编译的解决办法_jdk低版本编译高版本运行-CSDN博客
新版本Jenkins(Version>2.357)兼容低版本JAVA项目部署_maven projects have to be launched with a java ver-CSDN博客
3. 项目打包报错“Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml
这时候用的spring-boot-maven-plugin插件打包,用idea的maven工具打包没问题,使用命令有问题,后续需要再研究一下。
解决:配置maven-war-plugin插件,如果
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.4.0</version>
</plugin>
参考:踩坑:maven打包失败的解决方式总结_maven打包报错-CSDN博客
终于打包成功了,后面需要将war包上传到服务器,就大功告成了。