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

Drone CI/CD Platform

265bcbb56e831266de7a9f9281aab57a?s=47 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

265bcbb56e831266de7a9f9281aab57a?s=128

Bo-Yi Wu

November 06, 2018
Tweet

Transcript

  1. Drone CI/CD Platform Drone is a Continuous Delivery platform built

    on Docker, written in Go 2018/11/03
  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
  3. About Me appleboy @ appleboy @

  4. Jenkins Drone Travis Gitlab ci

  5. Why I leave Jenkins

  6. Why? • Complicated project setting • Write the plugin (Java

    language) • Maintenance? • Learning Curve? • Grow your team?
  7. Try the GitLab CI

  8. .gitlab-ci.yml config

  9. But Why I leave GitLab CI ?

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

  11. SSH Tunnel

  12. How to use SSH command

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

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

  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
  16. What is Drone?

  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)
  18. Everything is a Docker Container

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

  20. Project List and Status

  21. Job detail and logs

  22. .drone.yml

  23. Isolate build

  24. Support Git Host

  25. Drone CI Infrastructure Agent Server Step 1 git clone Step

    2 make build Step 3 deploy app work space extra service Agent
  26. Support Platform https://blog.drone.io/drone-cloud-native-ci-cd-windows-containers/ https://blog.drone.io/drone-announces-official-support-for-arm/

  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
  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
  29. Auto scale drone agent https://github.com/appleboy/drone-on-kubernetes

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

  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
  32. Deploy Flow in Golang Release Test Git Docker Notify

  33. Pipeline in Golang • Go Testing • Verify Quality •

    Build Binary • Deploy Binary • Build Image • Deploy Container • Send Notification
  34. workspace: base: /go/src path: github.com/go-ggz/ggz clone: git: image: plugins/git depth:

    50 tags: true
  35. Testing && Verify Quality

  36. pipeline: backend: image: golang:1.11 pull: true commands: - cp .env.example

    .env - make embedmd - make fmt-check - make misspell-check
  37. Parallel processing

  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
  39. Build Docker

  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
  41. Secret Security

  42. None
  43. Notification Plugin

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

    Go, Python
  45. Three Steps •Program with your language •Build Docker Image and

    Testing •Upload to Docker Hub
  46. None
  47. Prefix PLUGIN_

  48. None
  49. Testing in Local

  50. Try Drone without Server drone exec

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

  52. Any Question?