Skip to content

58 搭建CD工具drone

Jinxin Chen edited this page Dec 11, 2019 · 1 revision

Drone简介

Drone是一个建立在容器技术上的持续交付系统。只需要一个简单的YAML配置文件(docker-compose的超集),就可以在Docker容器中定义和执行pipeline。

Drone需要配合git源代码管理工具运行,目前支持的工具如下:

  • GitHub
  • GitLab
  • Gitea
  • Gogs
  • Bitbucket Cloud
  • Bitbucket Server
  • Coding

Drone安装

目前最新版本为 0.8,可以使用一个 docker-compose 文件来启动 drone,示例如下:

version: '2'

services:
  drone-server:
    image: drone/drone:0.8

    ports:
      - 8002:8000
      - 9000
    volumes:
      - /var/lib/drone:/var/lib/drone/
    restart: always
    environment:
      - DRONE_OPEN=true
      - DRONE_HOST=http://localhost:8000
      - DRONE_ADMIN=supperxin
      - DRONE_GITEA=true
      - DRONE_GITEA_URL=http://gitea:8001
      - DRONE_SECRET=drone-workshop

  drone-agent:
    image: drone/agent:0.8

    command: agent
    restart: always
    depends_on:
      - drone-server
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - DRONE_SERVER=drone-server:9000
      - DRONE_SECRET=drone-workshop
      - DOCKER_API_VERSION=1.24

运行如下命令,就可以通过 http://ip:8002 访问drone首页了。

docker-compose up -d

参数解释:

  • DRONE_OPEN=true,启用开放注册,这样通过 git 源代码管理认证之后的用户会自动注册到drone中
  • DRONE_HOST=http://localhost:8000,drone的网页访问地址
  • DRONE_ADMIN=supperxin,管理员账号名称
  • DRONE_GITEA=true,使用gitea作为源代码管理
  • DRONE_GITEA_URL=http://gitea:8001,gitea的地址
  • DRONE_SECRET=drone-workshop,drone server和agent通信的私钥
  • DRONE_SERVER=drone-server:9000,drone server地址
  • DOCKER_API_VERSION=1.24,定义docker api的版本,如果不定义则可能会出现错误:client is newer than server (client API version: 1.26, server API version: 1.24)

建立repository和pipeline

drone搭建好之后,就可以让repository集成CD了,步骤如下:

  1. 在repository根目录下添加文件 .drone.yml:
pipeline:
  test:
    image: alpine
    commands:
      - ./test.sh
  1. 添加一个测试脚本 test.sh:

    echo "hello drone!"

  2. 加上执行权限:

    chmod +x test.sh

  3. 访问 drone server 首页并用 gitea 的账号(本例为supperxin)登录,如果账号名称为DRONE_ADMIN设定的值,则自动成为drone的admin。

  4. 点击右上角菜单 --> "Synchronize",会自动将账号有权限的repository同步过来。

  5. 打开需要持续交付的repository的开关,drone会自动添加webhook到gitea

  6. 将repository的修改提交,可以在drone这边看到pipeline的执行状况

图片:

增加部署功能

可以通过两种方式部署项目:

  1. 通过pipeline将文件复制到server(下方deployfiles)
  2. 通过pipeline远程执行server上的部署脚本(下方runscript)
pipeline:
  test:
    image: alpine
    commands:
      - ./test.sh

  deployfiles:
    image: appleboy/drone-scp
    host:
      - ${server_ip}
    port: 22
    username: ${username}
    password: ${password}
    target: /home/deploy/
    source:
      - deploy.sh
    when:
      branch: master
      status: [ success ]

  runscript:
    image: appleboy/drone-ssh
    host: ${server_ip}
    port: 22
    username: ${username}
    password: ${password}
    target: /home/deploy/
    command_timeout: 180
    script:
      - /home/deploy/deploy.sh
    when:
      branch: master
      status: [ success ]

图片:

关于drone插件drone-scp和drone-ssh可以参考下面链接查看更多内容:

Clone this wiki locally