# 前言
基于云效前端Codeup的自动化部署,接下来完成后端的自动化部署。原理类似,但借助Docker Compose会简单很多。
大致的部署流程:
1.构建代码上传至个人仓库
2.上传dockercompose文件到Linux服务器
3.然后服务器执行docker compose文件拉取最新的镜像代码完成项目发版。
如有不懂的地方可参考主页“项目部署”栏目中的 《基于云效Codeup的自动化部署——前端》)
# 一、准备过程
# 1.Docker Compose文件
# 指定使用的Docker Compose文件版本
version: "3.4"
# 为这个Compose文件定义一个名称
name: edu-system
services:
# 定义一个名为edu-service的服务
edu-service:
# 使用指定的Docker镜像
image: registry.cn-beijing.aliyuncs.com/xx_library/edu-service_test
# 设置重启策略,除非手动停止,否则不会重启
restart: unless-stopped
# 将容器的48081端口映射到宿主机的48081端口
ports:
- "48081:48081"
environment:
# 设置Spring Boot的激活配置文件为test
SPRING_PROFILES_ACTIVE: test
deploy:
replicas: 1
# 更新配置
update_config:
parallelism: 1
delay: 10s
# 更新顺序,先启动新副本再停止旧副本
order: start-first
# 回滚配置
rollback_config:
parallelism: 1
delay: 10s
# 回滚顺序,先停止旧副本再启动新副本
order: stop-first
volumes:
# 将宿主机的日志目录挂载到容器的日志目录
- /mydata/service/edu-service/logs/:/edu-server/logs/
# 定义服务连接的网络
networks:
# 连接到名为emojlife-service_default的网络
- emojlife-service_default
# 网络配置 加入到框架网络,默认为 emojlife-service_default | docker network ls 查看
networks:
emojlife-service_default:
# 指定这个网络是外部创建的,Compose不会自动创建或删除
external: true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 2.Dockerfile文件
# 基础镜像,使用个人镜像仓库中指定的JDK 8镜像
FROM registry.cn-beijing.aliyuncs.com/xx_library/jdk8
# 创建目录,并设置容器的工作目录为/yudao-server
RUN mkdir -p /yudao-server && WORKDIR /yudao-server
# 将当前目录下的target/yudao-server.jar(后端项目的jar文件)复制到容器的当前工作目录,并重命名为app.jar
COPY ./target/yudao-server.jar app.jar
## 设置 JAVA_OPTS 环境变量,可通过 docker run -e "JAVA_OPTS=" 进行覆盖
ENV JAVA_OPTS="-Xms1024m -Xmx1024m -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom"
## 应用参数,这个变量可以为空,也可以在运行时通过docker run命令的-e选项进行设置
ENV ARGS=""
# 声明容器运行时监听的端口。需要在docker run时通过-p参数映射到服务器
EXPOSE 48081
# 指令定义容器启动时执行的命令:使用java命令启动app.jar文件,并将之前定义的环境变量JAVA_OPTS和ARGS传递给Java程序
CMD java ${JAVA_OPTS} -jar app.jar $ARGS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 二、创建流水线
# 1.这里的创建流水线参上,不做赘述。
这里注意要适当选取对应的版本
# 2.配置java构建命令
# maven build default command
mvn -B -e -U -Ptest clean package -Dmaven.test.skip=true -Dautoconfig.skip -pl yudao-server -am
# gradle build default command
# ./gradlew build
# ant build default command
# mvn:表示使用Maven命令行工具执行操作。
# -B:表示以批处理模式运行,即不显示Maven的输出信息。
# -e:表示将Maven的日志输出到标准错误流(stderr)。
# -U:表示强制更新依赖项,即使本地仓库中的依赖项已经是最新的,也会重新下载。
# -Ptest:表示激活名为"test"的Maven配置文件。
# clean:表示在构建之前先清理项目,删除之前的构建结果。
# package:表示执行项目的打包操作,将项目打包成可部署的文件。
# -Dmaven.test.skip=true:表示跳过测试执行,不执行项目中的单元测试。
# -Dautoconfig.skip:表示跳过自动配置过程,不自动生成项目的配置文件。
# -pl yudao-server:表示仅构建名为"yudao-server"的模块。
# -am:表示同时构建当前模块及其所有依赖模块。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 3.java构建后打包上传至个人仓库
# 4.完成构建物上传
# 5.进行主机部署
# 创建文件
mkdir -p /home/app/edu-service/ && rm -rf /home/app/edu-service/*
# 解压package.tgz文件到/home/app/edu-service/目录
tar zxvf /home/package/edu-service/package.tgz -C /home/app/edu-service/
#进入工作目录为/home/app/edu-service/
cd /home/app/edu-service/
# 拉取edu-service的镜像
docker-compose -f docker-compose-test.yml pull edu-service
# 启动并运行edu-service服务
docker-compose -f docker-compose-test.yml up -d edu-service
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 三、特别注意
在后端项目中,如果涉及到数据库连接、Redis连接等情况,注意把外网IP替换为内网。