Drone+Gogs+Docker无坑部署SpringBoot后端程序

一:在项目的根目录下创建.drone.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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
kind: pipeline # 定义对象类型,还有secret和signature两种类型
type: docker # 定义流水线类型,还有kubernetes、exec、ssh等类型
name: mall-tiny-drone # 定义流水线名称

steps: # 定义流水线执行步骤,这些步骤将顺序执行
- name: package # 流水线名称
image: maven:3-jdk-8 # 定义创建容器的Docker镜像
volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
- name: maven-cache
path: /root/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载
- name: maven-build
path: /app/build # 将应用打包好的Jar和执行脚本挂载出来
commands: # 定义在Docker容器中执行的shell命令
- mvn clean package # 应用打包命令
- cp target/xxx.jar /app/build/xxx.jar
- cp Dockerfile /app/build/Dockerfile
- cp run.sh /app/build/run.sh

- name: build-start
image: appleboy/drone-ssh # SSH工具镜像
settings:
host: **服务器公网ip** # 远程连接地址
username: root # 远程连接账号
password:
from_secret: ssh_password # 从Secret中读取SSH密码
port: 22 # 远程连接端口
command_timeout: 5m # 远程执行命令超时时间
script:
- cd /mydata/maven/build # 进入宿主机构建目录
- chmod +x run.sh # 更改为可执行脚本
- ./run.sh # 运行脚本打包应用镜像并运行


# 邮箱通知功能
- name: notify
image: drillster/drone-email
settings:
host: smtp.163.com #例如 smtp.qq.com
port: 465 #例如QQ邮箱端口465
username: #邮箱用户名
password: #邮箱密码
from: #邮箱用户名
recipients: #收件人
when:
status: [failure, success]

volumes: # 定义流水线挂载目录,用于共享数据
- name: maven-build
host:
path: /mydata/maven/build # 从宿主机中挂载的目录
- name: maven-cache
host:
path: /mydata/maven/cache

②特别注意:ssh_password是在drone中添加的,drone拉取到代码后,激活后需要进行以下设置


二:项目根目录下添加Dockerfile文件,内容如下

1
2
3
4
5
6
7
FROM ascdc/jdk8:latest
VOLUME /tmp
ADD cljz-1.0-SNAPSHOT.jar /app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS="-Xmx512M -Xms256M -Xss256k -Duser.timezone=Asia/Shanghai"
ENV APP_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar $APP_OPTS" ]

三:项目根目录下添加run.sh文件,需要注意的是上传之后如果无法运行需要赋予执行权限,详细配置如下

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
#!/usr/bin/env bash
# 定义应用组名
group_name='mall-tiny'
# 定义应用名称
app_name='mall-tiny-drone'
# 定义应用版本
app_version='1.0-SNAPSHOT'
# 定义应用环境
profile_active='prod'
echo '----copy jar----'
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
docker rmi ${group_name}/${app_name}:${app_version}
echo '----rm image----'
# 打包编译docker镜像
docker build -t ${group_name}/${app_name}:${app_version} .
echo '----build image----'
docker run -p 1024:1024 --name ${app_name} \
-e 'spring.profiles.active'=${profile_active} \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/${app_name}/logs:/var/logs \
-d ${group_name}/${app_name}:${app_version}
echo '----start container----'

Docker中的端口根据实际需要进行更改


Drone+Gogs+Docker无坑部署SpringBoot后端程序
https://www.eldpepar.com/deploy/47310/
作者
EldPepar
发布于
2021年12月13日
许可协议