用 Drone 打造輕量級容器持續交付平台
by
Bo-Yi Wu
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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
謝謝⼤家參與 有任何問題?