欢迎来到站长天空!

其它服务器

当前位置: 主页 > 服务器 > 其它服务器

利用drone ci自动化部署静态博客的完整步骤

时间:2025-12-15 10:30:05|栏目:其它服务器|点击:

目录
  • 前言
  • 准备
  • 安装drone ci
    • 1、docker-compose配置文件
    • 2、docker-compose配置文件主要参数详解
      • drone server
      • DRONE_SERVER_PROTO和DRONE_SERVER_HOST
      • DRONE_RPC_SECRET
      • DRONE_USER_CREATE
      • DRONE_DATABASE_DRIVER
      • DRONE_DATABASE_DATASOURCE
      • DRONE_GITEE_CLIENT_ID和DRONE_GITEE_CLIENT_SECRET
      • drone runner
    • 3、执行部署
    • 进入管理界面
      • 添加.drone.yml文件
        • 总结

          前言

          一直想自动化部署博客,但一直没有实施计划,直到最近有时间,就搞了起来。ci/cd的工具很多,我想drone ci应该是一款非常适合前端的工具,简单,轻量级,基于docker,支持主流代码托管网站,比如github,gitee,gitlab等等。

          准备

          我们需要一个已备案的域名和服务器,并申请好ssl证书,用于https证书。我是使用腾讯云的轻量级服务器,大家可以自行选择。至于域名备案和ssl证书申请,各个平台大同小异,大家按照其文档说明弄,应该不会有太多问题,就不一一赘述了。

          在有了服务器后,我们需要安装docker和docker-compose,这样我们直接运行docker-compose配置文件就可以轻松安装好drone ci。本文主要是讲解drone ci,所以docker和docker-compose的安装和使用,大家可以自行学习,在此当做默认已经安装。

          代码托管网站使用了gitee码云。

          安装drone ci

          1、docker-compose配置文件

          通过docker-compose配置文件可以轻松安装drone ci,新建一个docker-compose.yml文件,内容如下

          version: "3.7"
          # 创建自定义网络
          networks:
            drone:
              # external: false
              driver: bridge
          services:
            # 数据库服务
            db:
              image: postgres:latest
              container_name: drone_db
              restart: always
              networks:
                - drone # 加入到drone网络
              ports:
                - "8081:5432" # 8081为容器暴露到服务器的端口,5432为容器内改应用的端口
              environment:
                - POSTGRES_USER=username # PGSQL默认用户名
                - POSTGRES_PASSWORD=password # PGSQL默认密码
                - POSTGRES_DB=db_name # PGSQL默认数据库的名字
              volumes:
                - /volumes/drone/db:/var/lib/postgresql/data # 数据卷,前者为服务器真实位置,后者为改应用在容器内的位置
            # Drone Server 服务
            server:
              image: drone/drone:latest
              container_name: drone_server
              restart: always
              networks:
                - drone # 加入到drone网络
              ports:
                - "7929:80"
                - "4443:443"
              environment:
                - DRONE_SERVER_PROTO=https # 访问协议,创建webHooks和重定向
                - DRONE_SERVER_HOST=xxxx.com # 主机名称,创建webHooks和重定向
                - DRONE_RPC_SECRET=xxxxxxxxx # 与 drone runner 通讯的密钥
                - DRONE_USER_CREATE=username:xxxxxx,admin:true # 管理员账户
                - DRONE_DATABASE_DRIVER=postgres # 数据库类型
                - DRONE_DATABASE_DATASOURCE=postgres://username:password@db/db_name?sslmode=disable # 数据库连接
                - DRONE_GIT_ALWAYS_AUTH=true # 使用 oauth 身份验证信息拉取代码
                - DRONE_GITEE_CLIENT_ID=xxxxxxxx # GITEE 客户端 id
                - DRONE_GITEE_CLIENT_SECRET=xxxxxxxxxxxx # GITEE 客户端 密钥
                - DRONE_GITEE_SKIP_VERIFY=false # 禁用 GITEE 链接时 tls 验证
          
              volumes:
                - /volumes/drone/server:/data
                - /var/run/docker.sock:/var/run/docker.sock
              depends_on:
                - db
            # Drone Docker Runner
            runner:
              image: drone/drone-runner-docker:latest # 目前drone-runner-docker最新版本为 1.8.0
              container_name: drone_runner
              restart: always
              networks:
                - drone # 加入到drone网络
              ports:
                - "7930:3000"
              environment:
                - DRONE_RUNNER_NAME=docker-runner
                - DRONE_RUNNER_CAPACITY=10 # 限制runner可执行的并发管道数量
                - DRONE_RPC_PROTO=https # 访问drone server 协议
                - DRONE_RPC_HOST=xxxxx.com # 访问drone server 服务器地址
                - DRONE_RPC_SECRET=xxxxxxx # 与 drone server 通讯的密钥
                - DRONE_UI_USERNAME=username # Drone Runner 的 UI 用户账号
                - DRONE_UI_PASSWORD=password # Drone Runner 的 UI 用户密码
                # - DRONE_RUNNER_NETWORKS=drone_net
              volumes:
                - "/var/run/docker.sock:/var/run/docker.sock"
              depends_on:
                - server

          2、docker-compose配置文件主要参数详解

          配置文件里一些常用参数在上面的注释里已经有解释,这里只讲解drone server和drone runner的配置项

          drone server

          基础的镜像版本,端口设置,网络设置不再赘述,这些都是docker compose最常见的配置,主要是environment里面的参数说明

          DRONE_SERVER_PROTO和DRONE_SERVER_HOST

          这个参数是在代码托管网站的配置里设置的,详细配置会在后面说明,每个代码托管网站的配置大同小异,这个网址是drone ci的管理网站,可以查看drone ci运行的详细流程等

          DRONE_RPC_SECRET

          这个参数是drone server与drone runner通讯的秘钥,在服务器使用OpenSSL生成,生成方法如下

          $ openssl rand -hex 16

          DRONE_USER_CREATE

          这个参数非常重要,为drone ci管理网站的登录账号,这个账号名一定要与代码托管网站的用户名一致,这样才能登录管理员账号,如果无法登录管理员账号,将无法授权拉取代码时的权限,运行时将会报错

          利用drone ci自动化部署静态博客的完整步骤

          DRONE_DATABASE_DRIVER

          数据库类型,就是上面自己配置的数据库

          DRONE_DATABASE_DATASOURCE

          postgres://username:password@db/db_name?sslmode=disable,这个参数中username为数据设置的用户名,password为数据库登录密码,db/db_name中db为固定值,db_name为创建的表名称,这些参数都是上面数据库的配置参数

          DRONE_GITEE_CLIENT_ID和DRONE_GITEE_CLIENT_SECRET

          这两个参数是在代码托管网站获取,我使用的是gitee码云。如何申请?

          1、注册码云

          2、创建OAuth应用

          进入码云设置中心,找到第三方应用

          利用drone ci自动化部署静态博客的完整步骤

          点击创建应用

          利用drone ci自动化部署静态博客的完整步骤

          填写创建应用所需信息

          利用drone ci自动化部署静态博客的完整步骤

          创建成功后,进入应用详情

          利用drone ci自动化部署静态博客的完整步骤

          其中的Client ID和Client Secret便是DRONE_GITEE_CLIENT_ID和DRONE_GITEE_CLIENT_SECRET

          drone runner

          DRONE_RPC_PROTO和DRONE_RPC_HOST

          和DRONE_SERVER_PROTO,DRONE_SERVER_HOST相同

          DRONE_UI_USERNAME和DRONE_UI_PASSWORD

          改账号信息为drone runner的账号信息,不同于drone server,drone runner的管理界面主要查看server运行的一些信息,而drone server的管理界面是管理应用的

          3、执行部署

          在docker-compose配置文件的当前目录下,执行docker-compose up,drone ci就会自动安装

          进入管理界面

          如果安装没有报错,那么进入浏览器,输入你配置过的DRONE_SERVER_HOST(前提是这个域名已经通过解析),便能进入

          利用drone ci自动化部署静态博客的完整步骤

          登录成功后进入主页面,此时会同步你代码托管网站下的所有项目

          利用drone ci自动化部署静态博客的完整步骤

          点击未激活项目,会直接进入到setting配置页

          利用drone ci自动化部署静态博客的完整步骤

          点击Activate Repository按钮,激活项目,激活项目便会进入配置详情页

          利用drone ci自动化部署静态博客的完整步骤

          如果是管理员登入,project settings中的5个选项都会出现,不然只会出现第一个选项,打开第二个选项Trusted

          利用drone ci自动化部署静态博客的完整步骤

          最后save changes一下,保存更改,此时项目即为激活项目

          添加.drone.yml文件

          到此整个drone ci的服务已经配置完成,那么如何持续部署我们的项目呢?对于cd有一定了解的人,都知道当我们git push的时候项目会通过webhooks通知ci服务,然后就会拉取代码,重新部署代码,从而完成一次ci/cd,这其中一个重要的配置文件起到重要作用,通常会向我们的项目中添加一个yaml文件,ci服务会读取这个文件,从而执行一个流程,完成部署。在drone ci中会向项目的根目录添加一个.drone.yml文件,这个文件如何编写,我以我的blog项目为例,下面是其配置文件内容

          kind: pipeline # 定义一个管道
          type: docker # 当前管道的类型
          name: test # 当前管道的名称
          
          volumes: # 声明数据卷(此为服务器中的实际目录)
            - name: node_modules # 数据卷名称
              host: # Host Volume
                path: /volumes/drone/volumes/blog/node_modules # 宿主机目录    #绝对路径
            - name: deploy_path
              host: 
                path: /workspace/blog
          
          clone:
            disable: false # 启用代码拉取
          
          steps: # 定义管道的执行步骤
            - name: deploy # 步骤名称
              image: node:16.13.2 # 当前步骤使用的镜像
              depends_on: [clone] # 依赖的步骤
              volumes: # 挂载数据卷(此为容器内的目录)
                - name: node_modules # 数据卷名称
                  path: /drone/src/node_modules # 容器内目录 绝对路径
                - name: deploy_path
                  path: /drone/src/html
              commands: # 当前步骤执行的命令
                - pwd # 查看当前目录
                - npm config set registry https://registry.npm.taobao.org # 切换淘宝镜像
                - npm install # 安装node_modules包
                - npm run build # 执行编译
                # - rm -fr ./blog
                - ls /drone/src
                - cp -r ./public/* ./html
          
            - name: dingtalk-push
              image: lddsb/drone-dingtalk-message
              depends_on: [deploy]
              settings:
                token: xxxxxxxxxxxxxxxxxxxxxxxxxxx
                type: markdown
                message_pic: true
                sha_link: true
              when:
                event: [push]
                status: [success, failure]

          .drone.yml文件的编写较为复杂,具体请查询drone文档。其中dingtalk-push,是部署完成后通知钉钉,钉钉机器人的配置请查看钉钉的文档,该插件的详细配置请查阅该插件文档

          总结

          上一篇:Docker安装RabbitMQ并安装延时队列插件

          栏    目:其它服务器

          下一篇:Docker-swarm快速搭建redis集群的方法步骤

          本文标题:利用drone ci自动化部署静态博客的完整步骤

          本文地址:https://zz.feitang.co/server/31009.html

          广告投放 | 联系我们 | 版权申明

          申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

          如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

          联系QQ:257218569 | 邮箱:257218569@qq.com

          Copyright © 2018-2025 站长天空 版权所有 Powered by EyouCms冀ICP备14023439号