使用Docker安装Drone和Gogs实现自动化部署【测试成功】

艺帆风顺 发布于 2025-04-03 22 次阅读


1 基本介绍

1.1 Drone简介

Drone是基于GO语言开发的持续集成(Continuous integration,CI)引擎,它可以借助Docker容器技术,用于自动化测试与构建,满足持续交付的基本需求,适合小团队开发。Drone具有简洁、轻量级、启动快、资源占用等特点。Jenkins也是CI引擎,它的特点是文档丰富、功能丰富、插件丰富、配置功能强大等特点,但资源占用较高。Drone比Jenkins轻量级,对云原生支持较好。

# 官方网址:
https://www.drone.io/

1.2 Gogs简介

Gogs是基于GO语言开发的代码仓库管理系统。它可以借助Docker容器技术,为开发人员提供Git服务,适合小团队开发。Gogs具有最简单、最快速和最轻松的极易搭建Git服务的特点。GitLab也是代码仓库管理系统,它的具有功能强大、开源社区庞大、文档丰富等特点,但资源占用较高,维护成本较高。Gogs比GitLab轻量级,对云原生支持较好,且是国人开发。

    # 官方网址:https://gogs.io/

    1.3 实现自动化部署的方案

    针对大型团队推荐使用Gitlab+Jenkins,小团队推荐使用Gogs+Drone。

    使用的软件版本(如果版本太高会出现很多问题):

      Docker版本:18.09.6gogs版本:0.12.0Drone版本:2.6.0drone-runner-docker版本:1.4.0

      2 Docker安装Gogs

      2.1 安装Gogs

        # 下载Gogs镜像docker pull gogs/gogs:0.12.0
        # 安装Gogs容器# 对外映射的端口是12022和13000,目录是/home/gogs/data# 22是ssh端口,3000是web访问端口docker run -itd --name=gogs --restart=always --privileged -p 12022:22 -p 13000:3000 -v /home/gogs/data:/data gogs/gogs:0.12.0

        2.2 配置Gogs

          # 在浏览器中输入以下IP地址,进入配置页面http://192.168.108.200:13000/

          详细配置如下

          2.3 使用Gogs

          (1)创建仓库

          (2)创建完成的信息


          注意:仓库创建完成后,创建一个Spring Boot的test测试项目,并提交到test仓库中。

          3 Docker安装Drone

          3.1 安装Drone-server

          --env=DRONE_USER_CREATE=username:administrator,admin:true 参数尤为重要,administrator为创建的用户,gogs创建哪个账户,此处就填哪个账户。

            # 下载Drone-server镜像docker pull drone/drone:2.6.0
            # 安装Drone-server和配置gogs的参考文档https://docs.drone.io/server/provider/gogs/
            # 安装容器# 注意:不同的仓库有不同的配置参数,gitlab和gogs的配置参数不同# 参数说明:# DRONE_AGENTS_ENABLED: 启动代理;# DRONE_GOGS_SERVER: Gogs的Web服务地址;# DRONE_SERVER_HOST: Drone Server的Web服务地址;# DRONE_SERVER_PROTO: Drone Server的Web访问协议;# DRONE_USER_CREATE: Drone Server的管理员账号,尽量与Gogs的管理员账号一直,一定要配置;# DRONE_RPC_SECRET: Drone Server的共享秘钥,为Drone runner提供RPC提供远程过程调用;docker run -itd --env=DRONE_AGENTS_ENABLED=true --env=DRONE_GOGS_SERVER=http://192.168.3.66:13000 --env=DRONE_SERVER_PROTO=http --env=DRONE_SERVER_HOST=192.168.3.66:20080 --env=DRONE_USER_CREATE=username:administrator,admin:true --env=DRONE_RPC_SECRET=123456 --name=drone-server --restart=always -p 20080:80 -v /home/drone/server/data:/data drone/drone:2.6.0

            3.2 安装Drone-runner-docker

              # 下载Drone-runner-docker镜像docker pull drone/drone-runner-docker:1.4.0
              # 安装Drone-runner-docker的参考文档https://docs.drone.io/runner/docker/installation/linux/
              # 创建容器# 参数说明:# DRONE_RPC_PROTO: 连接到Drone server的Web访问协议;# DRONE_RPC_HOST: Drone Server的Web服务地址;# DRONE_RPC_SECRET: Drone Server的共享秘钥;# DRONE_RUNNER_CAPACITY: Drone runner流水线并发执行的任务量;# DRONE_RUNNER_NAME: Drone runner的名称;# 注意:映射目录必须这样写“/var/run/docker.sock:/var/run/docker.sock”docker run -itd --env=DRONE_RPC_PROTO=http --env=DRONE_RPC_HOST=192.168.3.66:20080 --env=DRONE_RPC_SECRET=123456 --env=DRONE_RUNNER_CAPACITY=2 --env=DRONE_RUNNER_NAME=drone-runner-line --name=drone-runner --restart=always -p 23000:3000 -v /var/run/docker.sock:/var/run/docker.sock drone/drone-runner-docker:1.4.0

              查看Drone-runer是否安装成功

              docker logs -f drone-runner

              3.3 配置Drone

              (1)登录Drone

                # 在浏览器中输入以下IP地址http://192.168.108.200:20080/

                (1)登录Drone

                # 在浏览器中输入以下IP地址
                http://192.168.108.200:20080/

                (2)配置drone

                点击“continue”

                (3)进入drone

                4 配置Drone和Gogs的连接

                4.1 在Gogs中配置test仓库的”.drone.yml“文件

                  # 官网不同语言的配置例子https://docs.drone.io/pipeline/docker/examples/

                  (1)在Gogs的test仓库中创建”.drone.yml“文件

                  ⚠️ 注意:

                  1. 我部署的drone和应用在同一台主机上,因此使用appleboy/drone-ssh作脚本控制即可。如果部署的drone和应用在不同的主机上,可以使用appleboy/drone-scp作远程复制,即将drone上的内容复制到应用所在的主机上,使用方法参见https://plugins.drone.io/plugins/scp

                  2. drone中的pipeline表示管道,使用drone/git从仓库上下载完数据后,流程线中的容器可以认为是操作同一个容器中的数据。

                  ”.drone.yml“文件编辑的内容如下:

                          直接复制以下内容,不要修改!!!

                    kind: pipelinetype: dockername: test-pipeline
                    # 关闭自动设置Git镜像# 此处可以不设置,将获取最新的git镜像clone: disable: true
                    steps:# 设置Git镜像版本,下载仓库文件# 如果上面没有设置clone,此处需要删除(如果不删除,在pipeline中将多一个clone,pipeline会出错)- name: clone image: drone/git:1.2.1
                    # 构建和编译Java项目- name: test-build image: maven:3.8.4 volumes: # Maven缓存目录 - name: mvn-cache path: /root/.m2
                    # 在Docker容器内执行的命令 commands: - mvn clean install
                    # 发布项目- name: test-deploy image: appleboy/drone-ssh:1.6.4 settings: # 部署主机的IP host: 192.168.108.200 # 部署主机的登录账号,需从Drone中获取密钥名ssh_user的值,创建方式见下面 username: from_secret: ssh_user # 部署主机的登录密码,需从Drone中获取密钥名ssh_pwd的值,创建方式见下面 password: from_secret: ssh_pwd # 端口号 port: 22 # 设置超时 command_timeout: 10m # 编写脚本,可根据具体情况编写 script: # 进入宿主机的“/home/app”目录(注意:先在宿主机上创建app目录) - cd /home/app # 删除jar包,我测试的工程名是test # - rm -rf test.0.0.1-SNAPSHOT.jar # 将编译后的jar包复制到"/home/app"下 - cp /home/mvn/.m2/repository/com/example/test/0.0.1-SNAPSHOT/test-0.0.1-SNAPSHOT.jar . # 执行"/home/app"下的脚本(注意:需要在“/home/app”目录下创建start.sh文件) # - sh start.sh
                    # 挂载宿主机目录,对应"test-build"的Maven容器的目录volumes: - name: mvn-cache host: path: /home/mvn/.m2
                    # 对应Gogs仓库分支trigger: branch: - master

                    (2)在Drone中设置宿主机的登录账号和密码


                    4.2 在Drone中配置Gogs的test仓库

                    (1)进入test仓库配置

                    (2)激活仓库

                    (3)配置仓库

                    4.3 测试项目

                    (1)配置Web钩子
                    注意:需要在Drone中配置完test仓库后,才会出现Web钩子的地址,否则地址为空。
                    点击”管理Web钩子“,按照如下配置,推送到Drone Server

                    测试主动推送

                    (2)测试推送出现的问题

                    (1)出现“Payload URL resolved to a local network address that is implicitly blocked.”,或者“推送URL被解析到默认禁用的本地网络地址”,如下:

                    解决方法:
                    方法1: 最好的办法是建议降低gogs版本;
                    方法2: 修改Gogs容器中“/data/gogs/conf”目录下的“app.ini”文件

                      # 在“security”下添加“LOCAL_NETWORK_ALLOWLIST”属性,设置为本地IP地址,如果是多个IP用逗号分开[security]LOCAL_NETWORK_ALLOWLIST = 192.168.108.200

                      (2)Drone Server中出现“Error response from daemon: client version 1.40 is too new. Maximum supported API version is 1.39”,如下:

                      解决方法:

                      方法1: 降低drone-runner-docker版本;
                      方法2: 升级Docker版本(我刚开始使用Docker版本比较低,所以出现以上错误);

                       # Centos7中升级指定版本的docker
                      yum install docker-ce-20.10.0-3.el7

                      4.4 查看部署状态

                      (1)在Gogs中查看

                      (2)在Drone Server中查看

                      仓库的推送历史记录

                      Drone部署的执行过程如下:

                      发布完成

                      在我的宿主机的“/home/app”目录下,已经生成了test-0.0.1-SNAPSHOT.jar文件

                        版权声明:本文内容来自CSDN:MasonYyp,遵循CC 4.0 BY-SA版权协议上原文接及本声明。本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行可。原文链接:https://blog.csdn.net/make_progress/article/details/127593910如有涉及到侵权,请联系,将立即予以删除处理。在此特别鸣谢原作者的创作。此篇文章的所有版权归原作者所有,与本公众号无关,商业转载建议请联系原作者,非商业转载请注明出处。