Slide 1

Slide 1 text

Bo-Yi Wu 2017.08.01 ⽤ Drone 打造
 輕量級容器持續交付平台

Slide 2

Slide 2 text

● 聯發科技後端⼯程師 ● DevOps ● Golang, PHP, Node.js .. ● 維護數個 Go 開源專案 ● Gitea ● Gin ● Drone ● appleboy @GitHub ● appleboy @twitter ● appleboy @slideshare ● appleboy46 @facebook 關於我 2

Slide 3

Slide 3 text

● 為什麼選擇 Drone ● 為什麼不⽤ Jenkins ● 為什麼不⽤ GitLab CI ● Drone 基礎簡介 ● Drone 架構擴展 ● Drone 安裝⽅式 ● Drone 管理介⾯ ● Drone 測試部署 ● Drone ⾃訂套件 ⼤綱

Slide 4

Slide 4 text

DevOps ⼯具

Slide 5

Slide 5 text

來聊聊 DevOps 流程

Slide 6

Slide 6 text

開發 測試 部署 Develop CI CD ⼯程師

Slide 7

Slide 7 text

開發 測試 部署 Develop CI CD ⾃動化

Slide 8

Slide 8 text

⾃動化測試及部署 CI/CD ⼯具選擇

Slide 9

Slide 9 text

1. Jenkins 2. Gitlab CI http://bit.ly/devops-tool

Slide 10

Slide 10 text

Jenkins Drone Gitlab CI

Slide 11

Slide 11 text

為什麼離開 Jenkins

Slide 12

Slide 12 text

六⼤挑選⼯具條件

Slide 13

Slide 13 text

安裝眾多 Plugin 達成需求 1. 專案設定複雜

Slide 14

Slide 14 text

需安裝 plugin 2. 流程版本控制

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

3. 無法擴充套件 你需要會 Java

Slide 18

Slide 18 text

4. 後續維護?

Slide 19

Slide 19 text

5. 學習困難?

Slide 20

Slide 20 text

6. 團隊成長?

Slide 21

Slide 21 text

http://bit.ly/devops-tool

Slide 22

Slide 22 text

Why Not GitLab CI

Slide 23

Slide 23 text

GitLab CI

Slide 24

Slide 24 text

⽤ .gitlab-ci.yml 管理流程

Slide 25

Slide 25 text

使⽤ Docker 容器

Slide 26

Slide 26 text

GitLab CI 兩⼤缺陷

Slide 27

Slide 27 text

1. 只⽀援 GitLab

Slide 28

Slide 28 text

2. 無法擴充 Yaml

Slide 29

Slide 29 text

部署基本條件 如何做到 SCP, SSH

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

SSH Tunnel 連線

Slide 32

Slide 32 text

https://github.com/appleboy/drone-ssh ⽤ drone-ssh 解決

Slide 33

Slide 33 text

還是無法擴充 Yaml 設定 簡化 Script 步驟

Slide 34

Slide 34 text

最後選擇 Drone

Slide 35

Slide 35 text

● 為什麼選擇 Drone ● 為什麼不⽤ Jenkins ● 為什麼不⽤ GitLab CI ● Drone 基礎簡介 ● Drone 架構擴展 ● Drone 安裝⽅式 ● Drone 管理介⾯ ● Drone 測試部署 ● Drone ⾃訂套件 ⼤綱

Slide 36

Slide 36 text

基於容器 (Container) 技術的 CI/CD 系統 什麼是 Drone?

Slide 37

Slide 37 text

⽤ Go 語⾔所撰寫

Slide 38

Slide 38 text

任何步驟都執⾏在 Docker 內 Everything is a Docker Container

Slide 39

Slide 39 text

●Git Clon e ●測試 ●打包 ●部署 ●發送訊息 專案流程

Slide 40

Slide 40 text

.drone.yml 使⽤ yaml 管理專案流程

Slide 41

Slide 41 text

後端測試 前端測試 上傳容器 通知訊息

Slide 42

Slide 42 text

⽀援 Git Host

Slide 43

Slide 43 text

● 為什麼選擇 Drone ● 為什麼不⽤ Jenkins ● 為什麼不⽤ GitLab CI ● Drone 基礎簡介 ● Drone 架構擴展 ● Drone 安裝⽅式 ● Drone 管理介⾯ ● Drone 測試部署 ● Drone ⾃訂套件 ⼤綱

Slide 44

Slide 44 text

⼀個主伺服器,多個代理服務 One Server, Multiple Agents

Slide 45

Slide 45 text

Server agent agent agent Database 系統架構

Slide 46

Slide 46 text

● 為什麼選擇 Drone ● 為什麼不⽤ Jenkins ● 為什麼不⽤ GitLab CI ● Drone 基礎簡介 ● Drone 架構擴展 ● Drone 安裝⽅式 ● Drone 管理介⾯ ● Drone 測試部署 ● Drone ⾃訂套件 ⼤綱

Slide 47

Slide 47 text

How to install drone server and agent? http://docs.drone.io/installation/ Drone 安裝⽂件

Slide 48

Slide 48 text

Docker Compose && Binary Install 安裝⽅式有兩種

Slide 49

Slide 49 text

docker-compose.yml docker pull drone/drone:0.8 docker pull drone/agent:0.8

Slide 50

Slide 50 text

No content

Slide 51

Slide 51 text

Install from binary go install github.com/drone/drone/cmd/drone-agent go install github.com/drone/drone/cmd/drone-server

Slide 52

Slide 52 text

Nginx, Caddy, Apache Drone Server 搭配前端

Slide 53

Slide 53 text

Drone 內建⽀援 HTTPS

Slide 54

Slide 54 text

No content

Slide 55

Slide 55 text

● 為什麼選擇 Drone ● 為什麼不⽤ Jenkins ● 為什麼不⽤ GitLab CI ● Drone 基礎簡介 ● Drone 架構擴展 ● Drone 安裝⽅式 ● Drone 管理介⾯ ● Drone 測試部署 ● Drone ⾃訂套件 ⼤綱

Slide 56

Slide 56 text

簡單、清楚、明暸 Web 管理介⾯

Slide 57

Slide 57 text

啟動專案列表

Slide 58

Slide 58 text

No content

Slide 59

Slide 59 text

No content

Slide 60

Slide 60 text

瀏覽專案狀態

Slide 61

Slide 61 text

No content

Slide 62

Slide 62 text

No content

Slide 63

Slide 63 text

No content

Slide 64

Slide 64 text

● 為什麼選擇 Drone ● 為什麼不⽤ Jenkins ● 為什麼不⽤ GitLab CI ● Drone 基礎簡介 ● Drone 架構擴展 ● Drone 安裝⽅式 ● Drone 管理介⾯ ● Drone 測試部署 ● Drone ⾃訂套件 ⼤綱

Slide 65

Slide 65 text

專案流程都是寫在這邊 建立 .drone.yml

Slide 66

Slide 66 text

所有步驟皆在 
 Docker Container 內執⾏

Slide 67

Slide 67 text

Drone Workspace Clone 步驟 Build 步驟 Deploy 步驟 Drone 第⼀步驟永遠是 Clone

Slide 68

Slide 68 text

Drone Workspace Clone 步驟 Build 步驟 Deploy 步驟 所有流程皆共享⼀個 Workspace

Slide 69

Slide 69 text

Git Test Release Docker Discord 專案流程

Slide 70

Slide 70 text

● 執⾏測試指令 ● 分析程式碼 ● 驗證程式碼品質 ● 編譯 Binary ● 部署 Binary ● 編譯 Docker Image ● 部署 Docker Container ● 通知訊息 典型 Pipeline 流程

Slide 71

Slide 71 text

如何寫 .yml 設定檔

Slide 72

Slide 72 text

Git Test Release Docker Discord 初始化專案 (git clone)

Slide 73

Slide 73 text

Git Clone 是內建第⼀步驟

Slide 74

Slide 74 text

/drone/src/github.com/appleboy/hello-world Drone Workspace

Slide 75

Slide 75 text

Drone 特定字 (勿改)

Slide 76

Slide 76 text

所有步驟都可以存取此⽬錄資料

Slide 77

Slide 77 text

預設進入⽬錄,所有指令都在此⽬錄執⾏

Slide 78

Slide 78 text

Drone 關鍵字勿改

Slide 79

Slide 79 text

⾃⼰撰寫 clone 指令

Slide 80

Slide 80 text

將 Tags ⼀起拉下來

Slide 81

Slide 81 text

務必打勾

Slide 82

Slide 82 text

撰寫 Pipeline

Slide 83

Slide 83 text

Git Test Release Docker Discord Go 語⾔測試

Slide 84

Slide 84 text

Drone 關鍵字勿改

Slide 85

Slide 85 text

名稱可⾃訂

Slide 86

Slide 86 text

⾃選 Image

Slide 87

Slide 87 text

拉最新版

Slide 88

Slide 88 text

執⾏指令

Slide 89

Slide 89 text

No content

Slide 90

Slide 90 text

Parallel Execution 前端及後端⼀起測試 平⾏測試

Slide 91

Slide 91 text

平⾏測試 平⾏測試

Slide 92

Slide 92 text

額外 Services Mysql, Postgres, Redis

Slide 93

Slide 93 text

服務名稱

Slide 94

Slide 94 text

全域變數

Slide 95

Slide 95 text

服務名稱 服務名稱

Slide 96

Slide 96 text

跟 docker-compose ⼀樣

Slide 97

Slide 97 text

Branch, Event, Status, Environment, Matrix 條件⼦句

Slide 98

Slide 98 text

Matrix

Slide 99

Slide 99 text

只有 Pull request 才跑測試 測試成功才跑

Slide 100

Slide 100 text

只有上傳 tag 才跑部署到 China china 標籤才執⾏ 限制 git tag

Slide 101

Slide 101 text

成功或失敗都通知訊息

Slide 102

Slide 102 text

Git Test Release Docker Discord 打包及部署

Slide 103

Slide 103 text

請善⽤ plugin Marketplace http://plugins.drone.io/ Drone 沒有內建打包部署功能

Slide 104

Slide 104 text

https://github.com/appleboy/drone-scp SCP Plugin

Slide 105

Slide 105 text

Plugin 映像檔 Deploy Key 打包列表 遠端⽬錄

Slide 106

Slide 106 text

SSH Plugin https://github.com/appleboy/drone-ssh

Slide 107

Slide 107 text

Plugin 映像檔 Script 列表

Slide 108

Slide 108 text

⽀援平⾏部署 多主機 Host 列表

Slide 109

Slide 109 text

No content

Slide 110

Slide 110 text

Git Test Release Docker Discord Image 打包上傳到 Docker Hub

Slide 111

Slide 111 text

Plugin 映像檔

Slide 112

Slide 112 text

Git Test Release Docker Discord 消息通知

Slide 113

Slide 113 text

No content

Slide 114

Slide 114 text

Plugin Image

Slide 115

Slide 115 text

⽅便下次執⾏更快速 vendor, node_modules Cache 相關⽬錄

Slide 116

Slide 116 text

Drone Workspace Clone 步驟 Build 步驟 Deploy 步驟 建立快取 使⽤快取 雲端儲存

Slide 117

Slide 117 text

Volume or SFTP cache 使⽤ Plugin Caching ⽬錄資料

Slide 118

Slide 118 text

No content

Slide 119

Slide 119 text

SFTP Cache Plugin http://plugins.drone.io/appleboy/drone-sftp- cache/

Slide 120

Slide 120 text

http://plugins.drone.io/drillster/drone-volume-cache/ Volume Cache

Slide 121

Slide 121 text

[skip cache] or [cache skip] Only for SFTP cache Cache 爛掉?

Slide 122

Slide 122 text

觸發其他 CI 服務

Slide 123

Slide 123 text

http://plugins.drone.io/drone-plugins/drone-downstream/ Drone Downstream build

Slide 124

Slide 124 text

http://plugins.drone.io/appleboy/drone-gitlab-ci/ GitLab build

Slide 125

Slide 125 text

http://plugins.drone.io/appleboy/drone-jenkins/ Jenkins CI build

Slide 126

Slide 126 text

● 為什麼選擇 Drone ● 為什麼不⽤ Jenkins ● 為什麼不⽤ GitLab CI ● Drone 基礎簡介 ● Drone 架構擴展 ● Drone 安裝⽅式 ● Drone 管理介⾯ ● Drone 測試部署 ● Drone ⾃訂套件 ⼤綱

Slide 127

Slide 127 text

⽤ Shell Script 寫
 Drone Plugin

Slide 128

Slide 128 text

擴充 Yaml 參數 為什麼要寫 Plugin?

Slide 129

Slide 129 text

●撰寫程式 ●打包 Docker Image ●上傳到 Docker Hub ●測試外掛 Plugin 四⼤步驟

Slide 130

Slide 130 text

⾃訂 Plugin 任何語⾔都可以寫 Plugin PHP, Ruby, Bash, Go, Python …

Slide 131

Slide 131 text

⾃訂參數 ⾃訂參數 ⾃訂參數

Slide 132

Slide 132 text

撰寫 Bash Shell Script Plugin

Slide 133

Slide 133 text

前置符號 PLUGIN_

Slide 134

Slide 134 text

包成 Docker Image

Slide 135

Slide 135 text

No content

Slide 136

Slide 136 text

上傳到 Docker Hub

Slide 137

Slide 137 text

No content

Slide 138

Slide 138 text

本機端測試

Slide 139

Slide 139 text

No content

Slide 140

Slide 140 text

只要會 Docker 跟 Bash

Slide 141

Slide 141 text

如何在本機端測試及除錯? Drone 只能線上測試?

Slide 142

Slide 142 text

$ drone exec 本機端測試 Yaml 設定

Slide 143

Slide 143 text

Drone 優勢

Slide 144

Slide 144 text

●啟動速度超快 (低記憶體⽤量) Drone 優勢

Slide 145

Slide 145 text

●啟動速度超快 (低記憶體⽤量) ●不需要管理者 (簡單的 UI 介⾯) Drone 優勢

Slide 146

Slide 146 text

●啟動速度超快 (低記憶體⽤量) ●不需要管理者 (簡單的 UI 介⾯) ●可在本機端運⾏測試 Drone 優勢

Slide 147

Slide 147 text

●啟動速度超快 (低記憶體⽤量) ●不需要管理者 (簡單的 UI 介⾯) ●可在本機端運⾏測試 ●完全基於 Container 開發 Drone 優勢

Slide 148

Slide 148 text

●啟動速度超快 (低記憶體⽤量) ●不需要管理者 (簡單的 UI 介⾯) ●可在本機端運⾏測試 ●完全基於 Container 開發 ●任何語⾔都可以寫 Plugin Drone 優勢

Slide 149

Slide 149 text

●啟動速度超快 (低記憶體⽤量) ●不需要管理者 (簡單的 UI 介⾯) ●可在本機端運⾏測試 ●完全基於 Container 開發 ●任何語⾔都可以寫 Plugin ●⽀援 matrix 編譯 (多版本) Drone 優勢

Slide 150

Slide 150 text

Drone 的缺陷

Slide 151

Slide 151 text

1. ⽂件不完整

Slide 152

Slide 152 text

2. ⾃動取消編譯

Slide 153

Slide 153 text

3. 套件不夠多

Slide 154

Slide 154 text

DevOpsDay 優惠價: 1600 http://bit.ly/devops-taipei Coupon Code: DEVOPSDAY Drone 線上課程

Slide 155

Slide 155 text

謝謝⼤家參與 有任何問題?