月色真美

月色真美

持续集成平台Drone CI的Docker部署和使用

66
2024-04-15

本文使用Gitee代码仓储,Linux的Docker环境下,演示如何使用部署Drone和自动化构建项目

1.创建Gitee应用

个人》设置》第三方应用,创建一个第三方应用。

  • Client ID 应用自行生成

  • Client Secret 应用自行生成

  • 应用主页 Drone部署地址,我使用这样的格式:https://drone.xxx.com

  • 应用回调地址 Drone使用账号授权后的回调地址,我使用这样的格式:https://drone.xxx.com/login

2.Dcoker-compose部署Drone服务

  drone:
    image: "drone/drone:2"
    container_name: drone
    privileged: true
    volumes:
     - /etc/localtime:/etc/localtime
     - /data/drone/data:/data
    environment:
     - DRONE_GITEE_CLIENT_ID=xxx
     - DRONE_GITEE_CLIENT_SECRET=xxx
     - DRONE_RPC_SECRET=xxx
     - DRONE_SERVER_HOST=drone.xxx.com
     - DRONE_SERVER_PROTO=https
     - DRONE_USER_CREATE=username:xxx,admin:true
    networks:
      - backend
    restart: always
  • DRONE_GITEE_CLIENT_ID 上一步骤生成的Client ID

  • DRONE_GITEE_CLIENT_SECRET 上一步骤生成的Client Secret

  • DRONE_RPC_SECRET 密钥,推荐使用32位GUID,如:2a5g0c0eb7avy7ed18fd198785ed1d86

  • DRONE_SERVER_HOST Drone部署地址

  • DRONE_SERVER_PROTO Drone部署协议

  • DRONE_USER_CREATE 创建管理员账户,这里对应为gitee的用户名(也就是登录的账号,不是昵称)(填错了会导致自动化部署失败),如:username:myname,admin:true

Drone服务部署好后,注意要使用Nginx将Drone服务进行web转发,Drone容器默认对外暴露80和443端口,在networks网络环境下自行配置转发即可,侦听的域名即为上面所说的部署地址。

3.Dcoker-compose部署Drone的Runner服务

Runner是Drone的执行服务,负责对Drone的命令进行轮询侦听和执行,可以部署多个Runner同时工作

  runner:
    image: "drone/drone-runner-docker:1"
    container_name: runner
    privileged: true
    depends_on:
      - drone
    volumes:
     - /etc/localtime:/etc/localtime
     - /var/run/docker.sock:/var/run/docker.sock
    environment:
     - DRONE_RPC_PROTO=https
     - DRONE_RPC_HOST=drone.xxx.com
     - DRONE_RPC_SECRET=xxx
     - DRONE_RUNNER_CAPACITY=2
     - DRONE_RUNNER_NAME=runner
     - DRONE_RUNNER_LABELS=server:guangzhou
     - DRONE_DEBUG=true
     - DRONE_LOGS_DEBUG=true
     - DRONE_LOGS_TRACE=true
     - TZ=Asia/Shanghai
    networks:
      - backend
    restart: always
  • DRONE_RPC_PROTO Drone部署协议

  • DRONE_RPC_HOST Drone部署地址

  • DRONE_RPC_SECRET Drone服务一致的密钥

  • DRONE_RUNNER_CAPACITY 限制 Runner 可以执行的并发 Pipeline 的数量

  • DRONE_RUNNER_NAME Runner的名称

  • DRONE_RUNNER_LABELS Runner标签,可在项目脚本上指定一个Runner执行

  • DRONE_DEBUG 是否开启debug

  • DRONE_LOGS_DEBUG 是否开启debug日志

  • DRONE_LOGS_TRACE 是否开启trace日志

  • TZ=Asia/Shanghai 时区选择

4.使用Drone服务

打开Drone部署地址

点击 Continue 继续

完成授权后,Drone会得到账号下所有的仓储,根据需要激活对应的仓储服务

仓储项目配置,保存配置即可

接下来我们在仓储的根目录,建立一个 .drone.yml 脚本

kind: pipeline
type: docker
name: test

clone:
  disable: true

node:
  server: runner1

steps:
- name: build test
  image: appleboy/drone-ssh
  settings:
    host: 127.0.0.1
    username: root
    password:
      from_secret: password
    port: 22
    command_timeout: 5m
    script:
      - cd /data/code/test
      - git pull --progress -v --no-rebase "origin"
      - cd /data/ymls
      - sh build.sh

个人喜欢使用 appleboy/drone-ssh 直接远控服务器进行项目发布(也有其它的方式进行项目构建,发送编译包等,自行探索)

  • node.server 指定Runner才可以执行

  • steps.settings.password.from_secret 使用加密密文。如果脚本有敏感信息(如服务器密码),是不适合直接写在脚本上的,可使用Drone自带的密文进行替换

  • steps.settings.script 插件drone-ssh会逐行执行脚本,只需要提前将编译脚本放进服务器即可完成代码拉取,编译,发布的所有过程

注意:gitee的仓库名称和git地址一定要一致,否则webhook会提示仓库不存在,应该是属于bug

5.更多插件

Drone支持很多插件,比如钉钉推送,附上插件地址

https://plugins.drone.io/