Gitea+Drone+SpringBoot实践

注意:构建的前提,已安装Gitea和Drone

1.新建一个SpringBoot项目

  如果可以的话建议在Maven POM 文件中的Build -> finalName 指定打包完成后的文件名

    <build>
        <finalName>coreqi</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

2.在项目根路径下创建entrypoint.sh文件【文件名可以随意】,该文件用于打包进Docker镜像中,使用该Shell脚本运行打包后的jar文件

#!/bin/sh

java -Xms128m -Xmx128m -jar /app/coreqi*.jar

if [ $? != 0 ]; then
  echo Failed to start java >&2
  exit 1
fi

备注:在构建Docker镜像时,将会将jar包放到/app目录下。

3.在项目根路径下新建Dockerfile文件,用于构建Docker镜像。

FROM openjdk:8-jre-alpine3.9

ENV SERVICE_PORTS=7878

RUN mkdir -p /app/

WORKDIR /app

COPY ./entrypoint.sh /app/
RUN chmod 755 -R /app/

COPY ./coreqi*.jar /app/

ENTRYPOINT ["/app/entrypoint.sh"]

备注:

  1.我的SpringBoot Demo运行在7878端口上,因此开发那个端口需要自行修改

  2.因为脚本中从当前路径下拷贝jar包,你可能关心jar包不在当前根目录下,因此构建会失败,不用担心,这个Dockerfile是由Drone来执行构建流程的,在构建前,我们会使用Drone将jar包放到和Dockerfile同路径下。

3.在项目根路径下新增run.sh文件,该文件用于删除旧的镜像及该镜像生成的容器,并根据Dockerfile构建新的镜像,同时调用该镜像生成新的容器。

#!/bin/sh
# 定义应用组名
group_name='fanqi'
# 定义应用名称
app_name='coreqi'
# 定义应用版本
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 7878:7878 --name ${app_name} \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
-d ${group_name}/${app_name}:${app_version}
echo '----start container----'

备注:

  1.这个shell文件是由Drone来执行的,在执行前,会使用Drone将Dockerfile文件放到与该shell文件同路径下。

4.在Drone中激活仓库并在仓库设置中开启Trusted,这可能需要Drone管理员权限,你需要在创建Drone时声明管理员,具体参考我博客中创建Drone流程。

5.在项目根路径中新增.drone.yml文件【注意文件名】,这和你在Drone中配置仓库时设置的文件名要保持一致。

kind: pipeline
type: docker
name: mypubdemo

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

  - name: build-docker
    image: plugins/docker
    volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
      - name: maven-build
        path: /mnt/app/build # 将应用打包好的Jar和执行脚本挂载出来
      - name: docker
        path: /var/run/docker.sock # 挂载宿主机的docker
    settings:
      dockerfile: /mnt/app/build/Dockerfile
    commands: # 定义在Docker容器中执行的shell命令
      - cd /mnt/app/build
      - chmod +x run.sh
      - sh run.sh
      - docker ps

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

 6.在README.md中添加构建状态图标【可选】

  在仓库的配置中找到构建状态图标地址,添加到README.md文件中即可。

7.提交,触发构建流程。

 

posted @ 2023-01-09 18:46  SpringCore  阅读(673)  评论(0编辑  收藏  举报