首页 > 其他分享 >Gitea+Drone+SpringBoot实践

Gitea+Drone+SpringBoot实践

时间:2023-01-09 18:56:11浏览次数:38  
标签:SpringBoot app Gitea jar ---- Drone build docker name

注意:构建的前提,已安装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

 

标签:SpringBoot,app,Gitea,jar,----,Drone,build,docker,name
From: https://www.cnblogs.com/fanqisoft/p/17038274.html

相关文章

  • SpringBoot笔记--Failed to configure a DataSource: 'url' attribute is not specifi
    问题描述写了SpringBoot代码之后,运行不出来结果,报出这样的一个错误:FailedtoconfigureaDataSource:'url'attributeisnotspecifiedandnoembeddeddatasourceco......
  • SpringBoot 使用 Sa-Token-Quick-Login 插件实现快速登录认证
    原文链接:  https://mp.weixin.qq.com/s/XxXVCFBoK7AjGznW5tzl7w   一、解决的问题 Sa-Token-Quick-Login可以为一个系统快速的、零代码注入一个登录页面 试......
  • hello_springboot_IDEA创建
    步骤我的jdk版本是1.8总之是因为创建第一个springboot程序报了很多次错,就比如无效的目标发行版:17和java:无法访问org.springframework.web.bind.annotation.Ge......
  • Springboot设置定时任务,从数据库中获取cron表达式 DEMO
    适用场景:需要在项目运行时改动定时任务执行时间,可将cron表达式放在缓存或者数据库中代码如下:(省略了获取cron的方法,需要自己根据情况获取) importorg.springframework.......
  • 017 跨域问题-从springboot后台解决
    解决跨域问题:创建对应的包packagecom.example.adminspringboot.config;importorg.springframework.context.annotation.Bean;importorg.springframework.context.anno......
  • 新建springboot项目步骤
    1、file->new->project->springinitializr    打开pom.xml,换成ali源,快一些<repositories><repository><id>aliyun-repos</id>......
  • Springboot 非Web项目设置
    1使用场景有一个项目需要监听一个端口获取数据,这时候就不需要启动web环境了。但是又希望可以用Springboot比较方便。2具体实现在配置文件中加入:点击查看代码spr......
  • SpringBoot主键回显
    1、背景:在向数据库插入数据时,在主键自增时不需要主键字段,但是接下来还需主键进行其它操作2、实现:实体类:publicclassUser{privateintuserId;privateStr......
  • SpringBoot——动态数据源(多数据源自动切换)
    前言日常的业务开发项目中只会配置一套数据源,如果需要获取其他系统的数据往往是通过调用接口,或者是通过第三方工具比如kettle将数据同步到自己的数据库中进行访问。 但......
  • Springboot使用不了jsp的一些bug
    因为在SpringBoot中不推荐使用JSP作为动态页面,我们要想使用JSP编写动态页面,需要手动添加webapp目录。形成这个样子就算成功了(不必须有web.xml) 由于SpringBoot自带tomca......