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. 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
  2. Why? • Complicated project setting • Write the plugin (Java

    language) • Maintenance? • Learning Curve? • Grow your team?
  3. 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
  4. 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)
  5. Drone CI Infrastructure Agent Server Step 1 git clone Step

    2 make build Step 3 deploy app work space extra service Agent
  6. 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
  7. 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
  8. 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
  9. Pipeline in Golang • Go Testing • Verify Quality •

    Build Binary • Deploy Binary • Build Image • Deploy Container • Send Notification
  10. pipeline: backend: image: golang:1.11 pull: true commands: - cp .env.example

    .env - make embedmd - make fmt-check - make misspell-check
  11. 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
  12. 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