Docker集成Jenkins部署SpringBoot项目
Docker集成Jenkins部署SpringBoot项目
- 没安装Docker的先去安装Docker: https://www.cnblogs.com/ximensama/p/14903105.html
安装Jenkins
- 拉取长期维护版本的Jenkins
docker pull jenkins/jenkins:lts
- 本地创建容器映射目录
mkdir -p /mydata/jenkins_home
- 修改权限
chown -R 1000 /mydata/jenkins_home/
安装JDK
-
下载地址: https://pan.baidu.com/s/1BVY0kWJM4RQsMVscGp9lEQ 网盘提取码:0huq
-
把jdk压缩包放到 /usr/local下
-
解压jdk压缩包:tar -xf jdk-8u161-linux-x64.tar.gz
-
文件夹移动并改名为jdk:mv jdk1.8.0_161 /usr/local/jdk
-
编辑环境变量:vi /etc/profile
export JAVA_HOME=/usr/local/jdk export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
-
更新环境变量文件:source /etc/profile
安装maven
-
下载地址: https://pan.baidu.com/s/1WNGdVXrbZ4wjT2fVVn7_nw 网盘提取码:lcdo
-
把maven压缩包放到 /usr/local下
- 解压maven压缩包:tar -xf apache-maven-3.6.3-bin.tar.gz
- 文件夹移动并改名为maven:mv apache-maven-3.6.3 /usr/local/maven
- 修改环境变量 vi /etc/profile
export MAVEN_HOME=/usr/local/maven
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin
- 更新配置文件 source /etc/profile
- 检验环境是否配置成功
启动Jenkins
- 启动容器(端口号可以自己改)
docker run -di --name=jenkins --user root -p 8998:8080 -v /usr/local/jdk:/usr/local/jdk -v /usr/local/maven:/usr/local/maven -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -v /mydata/jenkins_home/:/var/jenkins_home jenkins/jenkins:lts
- 查看Jenkins密码
docker logs jenkins
- 在网页打开ip+端口,进入Jenkins进行配置,根据提示安装推荐插件,新建管理员账户等,没啥复杂的就不放图了
- 进来后进行Jenkins的全局配置
- 刚才启动Jenkins的容器时,已经对jdk和maven的路径做了映射,配置好jdk和maven之后就可以保存了
新建Jenkins项目
- 新增git的账号密码
- 就只填账号和密码就行了
- 输入git地址和选择账号密码,确认分支
- 可以勾选一个控制台输出带上时间,日志可以看
- 添加shell脚本,脚本如以下大块,添加完脚本就可以保存了
Jenkins配置shell脚本
#!/bin/bash
#maven打包
/usr/local/maven/bin/mvn clean package
echo 'package ok!'
echo 'build start!'
cd ./
#服务命名(容器命名)
service_name="java-demo"
#服务对应端口(容器里程序执行的端口)
service_prot=8333
#查看容器id
CID=$(docker ps | grep "$service_name" | awk '{print $1}')
echo "CID $CID"
if [ -n "$CID" ]
then
echo "exist $service_name container,CID=$CID"
#停止
docker stop $service_name
else
echo "no exist $service_name container"
fi
#查看镜像id
IID=$(docker images | grep "$service_name" | awk '{print $3}')
echo "IID $IID"
if [ -n "$IID" ]
then
echo "exist $service_name image,IID=$IID"
#删除镜像
docker rmi -f $service_name
echo "delete $service_name image"
#构建
docker build -t $service_name .
echo "build $service_name image"
else
echo "no exist $service_name image,build docker"
#构建
docker build -t $service_name .
echo "build $service_name image"
fi
#删除容器
docker rm $service_name
#启动(映射给9006端口,可自定义端口)并将存储卷映射到/usr/application/java-demo目录下,记得给这个目录chown -R 1000编辑权限,这样日志文件就能过去了
docker run -id --name=$service_name -p 9006:$service_prot -v /usr/application/java-demo:/home/demo $service_name
Dockerfile示例
- 把Dockerfile建在项目根目录
# 父容器
FROM openjdk:8
# 作者信息
MAINTAINER ximen <xxx@qq.com>
RUN echo "正在构建镜像!!!"
VOLUME /tmp
RUN mkdir /home/demo
# 添加jar包(路径),如果是当前目录下则可以省略路径,然后起别名
ADD ./target/demo-0.0.1-SNAPSHOT.jar demo.jar
#容器暴露的端口 即jar程序在容器中运行的端口
EXPOSE 8333
# 执行启动jar包命令
CMD nohup java -jar demo.jar >> /home/demo/demo-$(date +%Y-%m-%d).log 2>&1
RUN echo "镜像构建成功!!!"
构建项目
- 可以点进来看构建项目的控制台输出
- 想看日志的话可以在Linux命令行查看日志 $service_name = 服务名称(容器名称)
docker logs -f $service_name
- 查看日志,只显示最后200行
docker logs --tail 200 $service_name
- 查看最近30分钟的日志
docker logs --since 30m $service_name
- 查看某时间之后的日志
dockere logs -t --since "2022-06-01T14:06:30" $service_name
- 查看某时间段之间的日志
docker logs -t --since "2022-06-01T14:06:30" --until "2022-06-01T15:06:30" $service_name
检验服务
- 记得打开端口,或者关掉防火墙