drone、gogs、docker与项目集成实现自动化部署

10 篇文章 0 订阅
2 篇文章 0 订阅
文章介绍了如何使用Drone与Gogs以及Docker结合,实现项目的自动化打包和部署。通过添加Dockerfile、run.sh和drone.yml三个文件,可以实现自动部署。文章列举了一些常见问题,如权限问题、网络问题、编译错误等,并给出了相应的解决方案。
摘要由CSDN通过智能技术生成

前言

测试环境频繁的部署,既浪费时间又没有什么技术含量,在项目模块多的时候,部署一次要花半小时的时间,每天都要部署测试,时间长了浪费的时间还是挺多的,人为部署有时候还可能误操作。基于种种原因,萌生了自动打包测试工具drone,drone与gogs还有docker完美结合,实现自动打包,自动部署非常完美,现在让我们来感受一下吧!

项目目录结构

目录结构

在这里插入图片描述
一个未使用自动打包部署的项目,只需要添加这三个文件就可以实现自动部署。

测试文件

在这里插入图片描述

文件内容

Dockerfile

# 该项目镜像需要依赖的基础镜像
FROM java:8
# 将当前目录下的jar包复制到docker容器的根目录下
ADD air-app.jar /air-app.jar
# 指定docker容器启动时运行jar包,在容器启动的时候运行命令,来启动我们的项目
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/air-app.jar","-Xms128m","-Xmx128m","-c"]
# 指定维护者的名字
MAINTAINER air

run.sh

#!/usr/bin/env bash
#定义应用的组名
group_name='air'
#定义应用名称
app_name='air-app'
#定义应用版本
app_version='1.0.0'
#容器端口
app_in_port='5001'
#宿主端口
app_out_port='5001'
echo '----stop container----'
docker stop ${app_name}
echo '----rm container----'
docker rm ${app_name}
echo '----rm image----'
docker rmi docker.io/${app_name}:${app_version}
echo '----build image----'
docker build -t docker.io/${app_name}:${app_version} .
echo '----start container----'
docker run -d --restart=always --network=host \
-p ${app_out_port}:${app_in_port} \
-v /data/logs/${group_name}:/logs \
-e "spring.profiles.active=test" \
--name ${app_name} docker.io/${app_name}:${app_version}

drone.yml

kind: pipeline # 定义对象类型,还有secret和signature两种类型
type: docker # 定义流水线类型,还有kubernetes、exec、ssh等类型
name: air-app-drone # 定义流水线名称
clone:
  disable: false
  #指定打包分支和触发事件
  #trigger:
  #  branch:
  #    - master
  #  event:
  #    - push


steps: # 定义流水线执行步骤,这些步骤将顺序执行
 1. 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 air-app/target/air-app-1.0.0.jar /app/build/air-app.jar
      - cp air-app/docker/Dockerfile /app/build/Dockerfile
      - cp air-app/run.sh /app/build/run.sh
 2. name: build-start
    image: appleboy/drone-ssh # SSH工具镜像
    settings:
      host: 192.168.0.100 # 远程连接地址
      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 # 运行脚本打包应用镜像并运行
volumes: # 定义流水线挂载目录,用于共享数据
 3. name: maven-build
    host:
      path: /mydata/maven/build # 从宿主机中挂载的目录
 4. name: maven-cache
    host:
      path: /mydata/maven/cache # 从宿主机中挂载的目录

注意 ssh_password为服务器ssh的登录密码,该参数在drone控制面板配置
在这里插入图片描述

测试

将修改的代码提交到gogs,不一会drone就开始clone,package部署了

打包部署中

在这里插入图片描述

查看容器

在这里插入图片描述

访问项目成功

在这里插入图片描述

常见问题

Gogs 推送 URL 被解析到默认禁用的本地网络地址

Payload URL resolved to a local network address that is implicitly
bloc Gogs 推送 URL 被解析到默认禁用的本地网络地址

解决办法参考:https://blog.51cto.com/u_1472521/5981347

1、drone登录没有权限

在这里插入图片描述
目前的解决办法:登录gogs将drone对应的token删除,只要将token删除后就可以登录了。
在这里插入图片描述

2、cannot ping the remote server

Drone-runner-docker日志打印:

time=“2023-06-24T00:51:21Z” level=error msg=“cannot ping the remote
server” error=“Post “http://192.168.0.100:3080:3080/rpc/v2/ping”:
dial tcp: lookup 192.168.0.100:3080: no such host”

该问题是创建Drone-runner-docker容器的时候,把drone 的访问地址弄错造成的,修改正确即可解决。
在这里插入图片描述

3、推送代码以后不能自动clone

这个问题很容易解决,只需要在【drone.yml】文件配置一下启用自动clone即可
在这里插入图片描述

4、maven编译报错Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile

配置一下pom插件即可:

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

5、cp: cannot stat ‘air-app/docker/Dockerfile’: No such file or directory

原因:Dockerfile文件位置放错了
将其话到air-app/docker目录下即可解决

6、Error response from daemon: Head “https://registry-1.docker.io/v2/appleboy/drone-ssh/manifests/latest”

在这里插入图片描述
访问超时,配置一下代理即可

先安装 dig指令

yum -y install bind-utils

在这里插入图片描述
参考:https://blog.csdn.net/p1279030826/article/details/126186916

7、no main manifest attribute, in xxx.jar(jar中没有主清单属性)

打包的问题,配置一下pom插件即可

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

以上问题,每个人配置不一定都遇到得到,这里只是为了记录而已,如果你遇到了,那恭喜你,按照上面的方法准能解决。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值