之前有写篇文章讲述本地 PC 构建 Docker 镜像上传仓库 , 可是随着部署版本增加,本地 PC 资源吃紧的情况下,打包操作往往不理想 . 于是还是将打包环境迁移到服务器上.

Docker 安装 Jenkins

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
version: '3.9'
services:
jenkins:
# 镜像选择了 jdk17 最新版,可自行选择
image: jenkins/jenkins:jdk17
container_name: jenkins
# 重启策略:除非手动停止,否则出错会无限重启
restart: unless-stopped
# 指定用户 uid:gid(`用户id`:`宿主机的docker组id`,跟文件权限有关)
user: 0:995
ports:
# 8080 为 Jenkins 的 Web 端口
- 9001:8080
# 50000 为代理节点与主服务器的通信端口?
- 50001:50000
volumes:
# 同步宿主机的时间
- /etc/localtime:/etc/localtime
# Jenkins 数据目录映射出来,方面操作和备份
- $PWD/jenkins_home:/var/jenkins_home
# 把宿主机的 docker 和 docker-compose 给 Jenkins 使用,这样可以直接在 Jenkins 内部打镜像,并直接操作容器
- /usr/bin/docker:/usr/bin/docker
- /var/run/docker.sock:/var/run/docker.sock
- /usr/local/bin/docker-compose:/usr/local/bin/docker-compose

可以根据自己的需求修改文件

docker-compose up -d 启动容器 , 访问相应地址 docker logs -f jenkins --tail 500 查看初次登录密码 , 修改账号密码等

构建 Springboot 项目

Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
#FROM openjdk:8-jdk-alpine
FROM frolvlad/alpine-java:jdk8-slim
VOLUME /tmp
COPY target/ruoyi-admin.jar app.jar

# 获取插件传入的参数
ARG ACTIVE

ENV ACTIVE $ACTIVE
ENV TIMEZONE="America/Los_Angeles"
# 设置默认时区
ENV TZ=America/Los_Angeles
ENTRYPOINT ["java","-jar","-Duser.timezone=America/Los_Angeles","/app.jar","--spring.profiles.active=${ACTIVE}"]

新建项目,勾选参数化构建

比如我这里会设置几个参数

1
2
3
4
5
6
7
8
9
10
11
12
13
# Springboot Active profile
ACTIVE
druid,prod
druidaws,aws

# Docker镜像仓库
DOCKER_REPO
sgccr.ccs.tencentyun.com/xxxx/test
sgccr.ccs.tencentyun.com/xxxx

# 镜像版本号(默认还会打一个latest)
VERSION
1.0.0

Maven 构建命令

clean package -DskipTests -Dmaven

这里记得去 Jenkins 设置中提前安装好 Maven 并且选中生效

添加构建镜像并推送命令

1
2
3
4
5
cd $WORKSPACE/ruoyi-admin
docker build --build-arg ACTIVE=$ACTIVE . -t $DOCKER_REPO:latest -t $DOCKER_REPO:$VERSION -f $WORKSPACE/ruoyi-admin/Dockerfile
docker login 镜像仓库 --username=仓库账号 -p 仓库密码
docker push $DOCKER_REPO:latest
docker push $DOCKER_REPO:$VERSION

执行成功后 , 去部署的服务器 pull 镜像并更新即可

参考链接