gitea + docker + drone 实现CI/CD

master
chenyuepan 3 weeks ago
parent a3e36cba7e
commit 5e458a4882

@ -0,0 +1,60 @@
kind: pipeline
type: docker
name: venue_reservation_service
steps:
# 1.maven打包
- name: maven compile
pull: if-not-exists
# 构建镜像的maven+jdk选择最好选择满足匹配你的项目版本的
image: matderosa/maven-3.8-openjdk-17-gcc8.5
volumes:
# maven构建缓存
- name: maven-cache
path: /root/.m2
# 挂载宿主机的目录
- name: maven-build
path: /venue/build
commands:
# 开始打包maven工程
- mvn clean package -Dmaven.test.skip=true
# 将打包后的文件复制到宿主机映射目录
- cp target/*.jar /venue/build
- cp Dockerfile /venue/build
- cp docker.sh /venue/build
- cp start.sh /venue/build
- name: build docker
image: plugins/docker
volumes:
# 将容器内目录挂载到宿主机仓库需要开启Trusted设置
- name: maven-build
path: /venue/build # 将应用打包好的Jar和执行脚本挂载出来
- name: docker
path: /var/run/docker.sock # 挂载宿主机的docker
settings:
dockerfile: /venue/build/Dockerfile
commands:
# 定义在Docker容器中执行的shell命令
- cd /venue/build
- chmod +x docker.sh
- sh docker.sh
- docker ps
volumes: # 定义流水线挂载目录,用于共享数据
- name: maven-build
host:
path: /home/projects/venue/maven/build # 从宿主机中挂载的目录
- name: maven-cache
host:
path: /home/projects/venue/maven/cache
- name: docker
host:
path: /var/run/docker.sock
# drone执行触发器
trigger:
branch:
- master

@ -0,0 +1,22 @@
#!/bin/sh
# 定义应用组名
group_name='venue_reservation_service'
# 定义应用名称 ,这里的name是获取你仓库的名称也可以自己写
app_name=${DRONE_REPO_NAME}
# 定义应用版本
app_version='latest'
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 9020:9020 --name ${app_name} \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
-d ${group_name}/${app_name}:${app_version}
echo '----start container----'

@ -1,27 +1,16 @@
#指定基础镜像(一般指定程序所依赖的环境) #指定了基础镜像为 khipu/openjdk17-alpine即使用了 OpenJDK 17 的 Alpine 版本作为基础
#本例子是构建SpringBoot,所以指定的jdk环境变量 FROM khipu/openjdk17-alpine
FROM openjdk:17 #设置了一个名为 SERVIECE_PORT 的环境变量,并将其值设为 9090
#添加维护者信息 ENV SERVIECE_PORT = 9090
MAINTAINER author:chenyuepan # 容器里 新建目录 thirdPlatform
MAINTAINER mail:3158614516@qq.com RUN mkdir -p /venue/
# 工作区
#将./hello-world.jar添加到容器的/opt目录中 WORKDIR /venue
COPY ./venue_reservation_service-0.0.1-SNAPSHOT.jar /opt # 复制操作
COPY ./start.sh /venue/
#指定dockerfile的命令在哪个目录下执行 #将宿主机当前目录下的 *.jar 文件复制到容器的 /third_platform_admin/ 目录下
WORKDIR /opt COPY ./*.jar /venue/
#对 /thirdPlatform/ 目录及其子目录下的所有文件赋予可执行权限
#指定容器和外界交互的端口 RUN chmod 755 -R /venue/
EXPOSE 9020 #设置容器的入口点为 /third_platform_admin/start.sh即在容器启动时执行该脚本
ENTRYPOINT ["/venue/start.sh"]
#容器运行后执行的命令(该命令在WORKDIR指定的工作目录下执行)
#注意多个CMD指令只有最后一个会生效
CMD java -jar venue_reservation_service-0.0.1-SNAPSHOT.jar
#在构建镜像时执行的命令
#我这边用它来打印java的环境变量
RUN java -version
#添加该镜像的元数据
LABEL version="1.0" description="这是一个Web服务器" by="edc"

@ -1,41 +0,0 @@
kind: pipeline
type: docker
name: venue_reservation_service
steps:
- name: build-jar # 流水线名称
image: maven:3.8.5-openjdk-17 # 定义创建容器的Docker镜像
volumes: # 将容器内目录挂载到宿主机仓库需要开启Trusted设置
- name: maven-cache
path: /root/.m2 # 将maven下载依赖的目录挂载出来防止重复下载
- name: maven-build
path: /app/build # 将应用打包好的Jar和执行脚本挂载出来
commands: # 定义在Docker容器中执行的shell命令
- mvn clean package -DskipTests=true # 应用打包命
- cp target/game.jar /app/build/venue_reservation_service-0.0.1-SNAPSHOT.jar
- cp Dockerfile /app/build/
- cp run.sh /app/build/
- name: build-docker # 流水线名称
image: plugins/docker
volumes: # 将容器内目录挂载到宿主机仓库需要开启Trusted设置
- name: maven-build
path: /app/build # 将应用打包好的Jar和执行脚本挂载出来
- name: docker
path: /var/run/docker.sock # 挂载宿主机的docker
settings:
dockerfile: /app/build/Dockerfile
commands: # 定义在Docker容器中执行的shell命令
- cd /app/build
- chmod +x run.sh
- sh run.sh
- docker ps
volumes: # 定义流水线挂载目录,用于共享数据
- name: maven-build
host:
path: /home/docker/drone/maven/build # 从宿主机中挂载的目录
- name: maven-cache
host:
path: /home/docker/drone/maven/cache
- name: docker
host:
path: /var/run/docker.sock

@ -1,22 +1,7 @@
#!/bin/sh java -Xms128m -Xmx128m -jar /thirdPlatform/*.jar --spring.profiles.active=dev
# 定义应用组名
group_name='nnzmr' if [ $? != 0 ]; then
# 定义应用名称 echo Failed to start java >&2
app_name='venue_reservation_service' exit 1
# 定义应用版本 fi
app_version='latest'
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 9020:9020 --name ${app_name} \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
-d ${group_name}/${app_name}:${app_version}
echo '----start container----'

Loading…
Cancel
Save