Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Drone CI/CD Platform

Bo-Yi Wu
November 06, 2018

Drone CI/CD Platform

Drone is a Continuous Delivery platform built on Docker, written in Go

* Why I don’t choose Jenkins or GitLab CI?
* What is Drone CI?
* Drone Infrastructure
* How to install Drone in five minutes?
* Integrate your project
* Create your Drone plugin
* Try drone cli without drone server

Bo-Yi Wu

November 06, 2018
Tweet

More Decks by Bo-Yi Wu

Other Decks in Technology

Transcript

  1. Drone CI/CD Platform
    Drone is a Continuous Delivery platform built on Docker, written in Go

    2018/11/03

    View Slide

  2. Agenda
    • Why I don’t choose Jenkins or GitLab CI?

    • What is Drone CI?

    • Drone Infrastructure

    • How to install Drone in five minutes?

    • Integrate your project

    • Create your Drone plugin

    • Try drone cli without drone server

    View Slide

  3. About Me
    appleboy @
    appleboy @

    View Slide

  4. Jenkins Drone Travis Gitlab ci

    View Slide

  5. Why I leave Jenkins

    View Slide

  6. Why?
    • Complicated project setting

    • Write the plugin (Java language)

    • Maintenance?

    • Learning Curve?

    • Grow your team?

    View Slide

  7. Try the GitLab CI

    View Slide

  8. .gitlab-ci.yml config

    View Slide

  9. But Why I leave GitLab CI ?

    View Slide

  10. Why?
    1. GitLab Only
    2. Not extensible

    View Slide

  11. SSH Tunnel

    View Slide

  12. How to use SSH command

    View Slide

  13. https://florianbrinkmann.com/en/3473/deployment-gitlab-ci/

    View Slide

  14. Try drone-ssh tool
    https://github.com/appleboy/drone-ssh

    View Slide

  15. pipeline:
    ssh:
    image: appleboy/drone-ssh
    host: foo.com
    username: root
    password: 1234
    port: 22
    script:
    - echo hello
    - echo world
    proxy_host: 10.130.33.145
    proxy_user: ubuntu
    proxy_port: 22
    proxy_password: 1234
    custom key

    View Slide

  16. What is Drone?

    View Slide

  17. Drone CI
    • Container native CI/CD platform

    • Easy to install & maintain

    • Isolate builds

    • Simple YAML Configuration

    • Integrates with several VCS Providers

    • Rich set of official plugins (any container can be a plugin)

    • Execute locally with simple command (drone exec)

    • open source (https://github.com/drone/drone)

    View Slide

  18. Everything is a
    Docker Container

    View Slide

  19. Project CI/CD Flow
    git clone testing deploy notify

    View Slide

  20. Project List and Status

    View Slide

  21. Job detail and logs

    View Slide

  22. .drone.yml

    View Slide

  23. Isolate build

    View Slide

  24. Support Git Host

    View Slide

  25. Drone CI Infrastructure
    Agent
    Server
    Step 1
    git clone
    Step 2
    make build
    Step 3
    deploy app
    work space
    extra service
    Agent

    View Slide

  26. Support Platform
    https://blog.drone.io/drone-cloud-native-ci-cd-windows-containers/
    https://blog.drone.io/drone-announces-official-support-for-arm/

    View Slide

  27. services:
    drone-server:
    image: drone/drone:0.8
    ports:
    - 8080:8000
    volumes:
    - ./:/var/lib/drone/
    restart: always
    environment:
    - DRONE_HOST=${HOST}
    - DRONE_OPEN=true
    - DRONE_SECRET=drone-workshop
    - DRONE_ADMIN=appleboy
    # GitHub Config
    - DRONE_GITHUB=true
    - DRONE_GITHUB_CLIENT=${CLIENT}
    - DRONE_GITHUB_SECRET=${SECRET}
    SQLite DB

    View Slide

  28. drone-agent:
    image: drone/agent:0.8
    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
    - DRONE_MAX_PROCS=3
    drone agent count

    View Slide

  29. Auto scale drone agent
    https://github.com/appleboy/drone-on-kubernetes

    View Slide

  30. Agent
    Server
    Agent
    Agent Agent
    autoscaler
    https://github.com/drone/autoscaler

    View Slide

  31. Task - Agent
    drone_server=server:9000
    Task - Server
    port: 80/9000
    ECS - Fargate ECS - Service
    Target Group
    Port: 80
    Route 53 Service Discovery
    ALB / SSL
    Cloud Watch
    https://github.com/appleboy/drone-terraform-in-aws

    View Slide

  32. Deploy Flow in Golang
    Release
    Test
    Git Docker Notify

    View Slide

  33. Pipeline in Golang
    • Go Testing

    • Verify Quality

    • Build Binary

    • Deploy Binary

    • Build Image

    • Deploy Container

    • Send Notification

    View Slide

  34. workspace:
    base: /go/src
    path: github.com/go-ggz/ggz
    clone:
    git:
    image: plugins/git
    depth: 50
    tags: true

    View Slide

  35. Testing && Verify Quality

    View Slide

  36. pipeline:
    backend:
    image: golang:1.11
    pull: true
    commands:
    - cp .env.example .env
    - make embedmd
    - make fmt-check
    - make misspell-check

    View Slide

  37. Parallel processing

    View Slide

  38. build_linux_i386:
    image: golang:1.11
    pull: true
    group: build
    environment:
    TAGS: sqlite
    commands:
    - SERVICE=ggz-server make build_linux_i386
    - SERVICE=ggz-redirect make build_linux_i386
    build_linux_arm64:
    image: golang:1.11
    pull: true
    group: build
    environment:
    TAGS: sqlite
    commands:
    - SERVICE=ggz-server make build_linux_arm64
    - SERVICE=ggz-redirect make build_linux_arm64

    View Slide

  39. Build Docker

    View Slide

  40. publish_linux_amd64:
    image: plugins/docker
    group: release
    pull: true
    repo: goggz/ggz-server
    dockerfile: dockerfile/server/Dockerfile
    secrets: [ docker_username, docker_password ]
    default_tags: true
    when:
    event: [ push, tag ]
    local: false
    Docker plugin for Drone CI/CD

    View Slide

  41. Secret Security

    View Slide

  42. View Slide

  43. Notification Plugin

    View Slide

  44. Write Drone Plugin
    Whether you prefer language
    PHP, Ruby, Bash, Go, Python

    View Slide

  45. Three Steps
    •Program with your language

    •Build Docker Image and Testing

    •Upload to Docker Hub

    View Slide

  46. View Slide

  47. Prefix PLUGIN_

    View Slide

  48. View Slide

  49. Testing in Local

    View Slide

  50. Try Drone without Server
    drone exec

    View Slide

  51. https://www.udemy.com/devops-oneday/?couponCode=DRONE-DEVOPS

    View Slide

  52. Any Question?

    View Slide