侧边栏壁纸
博主头像
贯耳症博主等级

瓜虫冬匕ing……

  • 累计撰写 67 篇文章
  • 累计创建 49 个标签
  • 累计收到 759 条评论

目 录CONTENT

文章目录

Drone CI 基本用法

贯耳症
2023-04-23 / 0 评论 / 1 点赞 / 2,755 阅读 / 1,728 字
温馨提示:
本网站有 CDN 缓存,一般刷新 3 次左右即可获取最新页面。

Drone CI 是一款流行的开源持续集成工具,它能够帮助团队自动化构建、测试和部署软件项目。本文将介绍 Drone CI 的安装、基础用法以及常用插件。

Drone CI 需要配合版本控制工具使用,Github 或 Gitee 都可以,如果是自部署的,推荐使用 Gitea,相比 gogs 拥有更多功能,如镜像仓库。

为了更好的阅读体验,请跳转 https://live.aqzscn.cn/skills/develop-tools/drone-ci 阅读。

安装 Drone CI

Drone CI 可以通过 Docker 镜像进行安装。不过首先我们需要做一点准备工作,这里以 Gitea 为例,需要在 设置 - 应用 中为 Drone CI 创建一个客户端,并把重定向 URI 指向 Drone CI 的登录地址,假设 Drone CI 的首页是 https://droneci.aqzscn.cn/ 的话,它的登录地址应该是这样的:https://droneci.aqzscn.cn/login

重定向地址一定要确保正确配置,否则将登录失败。

接下来,以 docker-compose 为例,对以下配置的高亮部分按自己的需求调整即可。

version: '3'
services:
  drone-server:
    image: drone/drone:latest
    container_name: drone-server
    ports:
      # 端口映射,左侧是宿主机端口,右侧是容器端口
      # highlight-next-line
      - 8080:80
    volumes:
      # 注意,此处需要在 docker-compose.yaml 同目录下创建名为 data 的目录,用于保存 drone 的数据
      - ./data:/var/lib/drone/
      - /var/run/docker.sock:/var/run/docker.sock
    restart: always
    environment:
      - DRONE_OPEN=true
      - DRONE_LOGS_TRACE=true
      - DRONE_LOGS_DEBUG=true
      # highlight-start
      - DRONE_SERVER_HOST=droneci.aqzscn.cn
      - DRONE_SERVER_PROTO=https
      - DRONE_GITEA_CLIENT_ID=inputyourclientid
      - DRONE_GITEA_CLIENT_SECRET=inputyourclientsecret
      # 注意,此处的密钥可通过 openssl rand -hex 16 命令随机生成一个,需要与下方 Runner 的配置相同
      - DRONE_RPC_SECRET=generateyourrpcsecret
      - DRONE_GITEA_SERVER=http://192.168.121.49:6060/
      # highlight-end
  drone-runner:
    image: drone/drone-runner-docker:latest
    container_name: drone-runner
    restart: always
    environment:
      # highlight-start
      - DRONE_RPC_HOST=droneci.aqzscn.cn
      - DRONE_RPC_PROTO=https
      - DRONE_RPC_SECRET=generateyourrpcsecret
      # highlight-end
      - DRONE_RUNNER_NAME=my-runner
      - DRONE_RUNNER_CAPACITY=2
    ports:
      - 8081:3000
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

接着执行命令 docker-compose up -d 即可启动配置的两个容器。

如果你使用的版本控制工具不是 Gitea,可从官方文档或其他人的教程中找到对应的安装方法。

基础使用

安装完成后,我们可以访问 Drone CI 的 Web 界面,并通过 Gitea 账号登录。

默认的存储库都是没有开启自动构建流程的,需要先选中存储库,点击激活按钮。

这个操作的目的是在 Gitea 对应的存储库创建了一个 WebHook 钩子,一旦存储库有了变更,就会发送一个 POST 请求通知 Drone CI,这样 Drone CI 就可以根据配置执行后续的自动化流程了。

Drone CI 的配置文件需要放在存储库的根目录,并以 .drone.yml 命名。

下面以我制作的某个 Webpack 项目为例,介绍一下较为基础的配置:

kind: pipeline
type: docker
name: default
# 每次执行自动化构建,都会重新拉取一遍代码,指定 depth=1 在仓库提交次数特别多时会非常有用,能大大减少拉取代码的时间
clone:
  depth: 1
# 具体构建流程,每个步骤要以一个容器为载体,Drone CI 的插件本质上也是一个容器
steps:
  # 步骤名称,可以自定义,需要注意的是,每个步骤虽然容器不同,但所处的工作目录是同一个
  - name: build
    # 拉取镜像的时机,选择不存在时拉取能减少构建时间
    pull: if-not-exists
    # 镜像名称
    image: node:latest
    commands:
      # 待执行的脚本命令列表
      - export NODE_OPTIONS="--max-old-space-size=4096"
      - npm config set registry https://registry.npmmirror.com
      - npm install
      - npm run build
      - cp -r build/ live-release/
      - ls -al live-release
  - name: upload
    pull: if-not-exists
    image: appleboy/drone-scp
    settings:
      host:
        # highlight-next-line
        from_secret: host
      username:
        # highlight-next-line
        from_secret: username
      password:
        # highlight-next-line
        from_secret: password
      port: 22
      target: /usr/share/nginx/html
      source: live-release/*
  - name: deploy
    pull: if-not-exists
    image: appleboy/drone-ssh
    settings:
      host:
        # highlight-next-line
        from_secret: host
      username:
        # highlight-next-line
        from_secret: username
      password:
        # highlight-next-line
        from_secret: password
      port: 22
      script:
        - cd /usr/share/nginx/html/
        - rm -rf live
        - echo "delete success"
        - mv live-release live
        - echo "deploy success"

在上述配置文件中,我们定义了一个 pipeline,包含三个步骤:build、upload 和 deploy。每个步骤都可以指定要使用的镜像和运行的命令。

因为是 webpack 项目,所以打包的镜像选择了 node,后面两步上传和发布则是专为 Drone CI 构建的镜像,用于文件上传和连接 SSH。

另外还有很多 Drone CI 的插件,可以在 https://plugins.drone.io/ 查找。

其中有个参数 from_secret 有点特殊,填的值是在 Drone CI Web 页面配置的密钥名,作用是让配置文件脱敏。

配置 Secret 的时候建议直接配置在组织下面,这样不同项目可以使用同一套配置,不用再额外配置。

以上步骤做好之后,提交并推送代码,Drone CI 就会收到代码库变动的通知,从而根据项目根目录下的 .drone.yml 进行一次构建。

刚开始写的流水线配置文件或多或少都会有些问题,耐心查看运行日志并修改,最后总能成功的。

结语

Drone CI 是一款功能强大的持续集成工具,支持多种语言和框架,以及许多高级用法和插件。类似的持续集成工具其实还有很多选择,如 Gitlab 和 Jerkins。

Gitlab 基本上涵盖了代码开发所需的一切功能,但缺点就是占用内存过高,个人的服务器不适合使用这个,而且如果要使用全部功能,还需要花钱购买。

自己在群晖上尝试部署过 Gitlab,几乎吃了我快 4 个 G 的内存,这样我就没有富裕的内存去应对一些突发的计算任务了。

Jenkins 则是一个历史比较久的工具,积累了种类繁多的插件可供开发者使用,但还是那个问题,它是用 Java 编写的,内存占用较多。

而 Drone CI 是用 GO 语言编写的,空闲时基本不占用内存,很适合个人部署使用,而且网页 UI 也很现代化,看着就很舒服。所以这就是我最后选择 Drone CI 搭配 Gitea 进行持续集成的原因,希望对你也有所帮助。

1

评论区