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

2018/11/03
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
About Me
appleboy @
appleboy @
Jenkins Drone Travis Gitlab ci
Why I leave Jenkins
Why?
• Complicated project setting

• Write the plugin (Java language)

• Maintenance?

• Learning Curve?

• Grow your team?
Try the GitLab CI
.gitlab-ci.yml config
But Why I leave GitLab CI ?
Why?
1. GitLab Only
2. Not extensible
SSH Tunnel
How to use SSH command
https://florianbrinkmann.com/en/3473/deployment-gitlab-ci/
Try drone-ssh tool
https://github.com/appleboy/drone-ssh
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
What is Drone?
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)
Everything is a
Docker Container
Project CI/CD Flow
git clone testing deploy notify
Project List and Status
Job detail and logs
.drone.yml
Isolate build
Support Git Host
Drone CI Infrastructure
Agent
Server
Step 1
git clone
Step 2
make build
Step 3
deploy app
work space
extra service
Agent
Support Platform
https://blog.drone.io/drone-cloud-native-ci-cd-windows-containers/
https://blog.drone.io/drone-announces-official-support-for-arm/
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
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
Auto scale drone agent
https://github.com/appleboy/drone-on-kubernetes
Agent
Server
Agent
Agent Agent
autoscaler
https://github.com/drone/autoscaler
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
Deploy Flow in Golang
ReleaseTestGit Docker Notify
Pipeline in Golang
• Go Testing

• Verify Quality

• Build Binary

• Deploy Binary

• Build Image

• Deploy Container

• Send Notification
workspace:
base: /go/src
path: github.com/go-ggz/ggz
clone:
git:
image: plugins/git
depth: 50
tags: true
Testing && Verify Quality
pipeline:
backend:
image: golang:1.11
pull: true
commands:
- cp .env.example .env
- make embedmd
- make fmt-check
- make misspell-check
Parallel processing
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
Build Docker
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
Secret Security
Notification Plugin
Write	Drone	Plugin
Whether you prefer language
PHP, Ruby, Bash, Go, Python
Three	Steps
•Program with your language

•Build Docker Image and Testing

•Upload to Docker Hub
Prefix PLUGIN_
Testing in Local
Try Drone without Server
drone exec
https://www.udemy.com/devops-oneday/?couponCode=DRONE-DEVOPS
Any Question?

Drone CI/CD Platform