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

用 Drone 打造 輕量級容器持續交付平台

Bo-Yi Wu
August 01, 2017
2k

用 Drone 打造 輕量級容器持續交付平台

團隊內原本使用 Bamboo 之後跳到 Jenkins 最後又跳到 Drone,本意議程會介紹為什麼我們放棄 Bamboo 及 Jenkins,他們所帶來的缺陷,以及為什麼最後選擇 Drone。

Drone 是一套基於 Docker 容器技術的持續交付平台。每個 Build 都在一個短暫的 Docker 容器中執行,讓開發人員可以完全控制他們的建構環境並保證隔離互不干擾。Drone 非常容易安裝及維護,並且提供強大的插件系統,也可以讓開發者輕易完成個人插件,如果您正在煩惱該選擇 Jenkins 或 GitLab CI 等工具,我會建議您嚐試看看輕量級的 Drone。本議程會帶您深入了解由 Go 語言所撰寫的 Drone 架構及如何輕易整合原有的 Git 服務 (像是 Github, Bitbucket, Gitea 或 GitLab) 來快速部署及測試軟體品質。

線上課程: https://blog.wu-boy.com/drone-devops/

Bo-Yi Wu

August 01, 2017
Tweet

Transcript

  1. Bo-Yi Wu


    2017.08.01
    ⽤ Drone 打造

    輕量級容器持續交付平台

    View Slide

  2. ● 聯發科技後端⼯程師


    ● DevOps


    ● Golang, PHP, Node.js ..


    ● 維護數個 Go 開源專案


    ● Gitea


    ● Gin


    ● Drone


    ● appleboy @GitHub


    ● appleboy @twitter


    ● appleboy @slideshare


    ● appleboy46 @facebook
    關於我
    2

    View Slide

  3. ● 為什麼選擇 Drone


    ● 為什麼不⽤ Jenkins


    ● 為什麼不⽤ GitLab CI


    ● Drone 基礎簡介


    ● Drone 架構擴展


    ● Drone 安裝⽅式


    ● Drone 管理介⾯


    ● Drone 測試部署


    ● Drone ⾃訂套件
    ⼤綱

    View Slide

  4. DevOps ⼯具

    View Slide

  5. 來聊聊 DevOps 流程

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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


    View Slide

  10. Jenkins Drone Gitlab CI

    View Slide

  11. 為什麼離開 Jenkins

    View Slide

  12. 六⼤挑選⼯具條件

    View Slide

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

    View Slide

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

    View Slide

  15. View Slide

  16. View Slide

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

    View Slide

  18. 4. 後續維護?

    View Slide

  19. 5. 學習困難?

    View Slide

  20. 6. 團隊成長?

    View Slide

  21. http://bit.ly/devops-tool


    View Slide

  22. Why Not GitLab CI

    View Slide

  23. GitLab CI

    View Slide

  24. ⽤ .gitlab-ci.yml 管理流程

    View Slide

  25. 使⽤ Docker 容器

    View Slide

  26. GitLab CI 兩⼤缺陷

    View Slide

  27. 1. 只⽀援 GitLab

    View Slide

  28. 2. 無法擴充 Yaml

    View Slide

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

    View Slide

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


    View Slide

  31. SSH Tunnel 連線

    View Slide

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

    View Slide

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

    View Slide

  34. 最後選擇 Drone

    View Slide

  35. ● 為什麼選擇 Drone


    ● 為什麼不⽤ Jenkins


    ● 為什麼不⽤ GitLab CI


    ● Drone 基礎簡介


    ● Drone 架構擴展


    ● Drone 安裝⽅式


    ● Drone 管理介⾯


    ● Drone 測試部署


    ● Drone ⾃訂套件
    ⼤綱

    View Slide

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

    View Slide

  37. ⽤ Go 語⾔所撰寫

    View Slide

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

    View Slide

  39. ●Git Clon
    e

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

    View Slide

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

    View Slide

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

    View Slide

  42. ⽀援 Git Host

    View Slide

  43. ● 為什麼選擇 Drone


    ● 為什麼不⽤ Jenkins


    ● 為什麼不⽤ GitLab CI


    ● Drone 基礎簡介


    ● Drone 架構擴展


    ● Drone 安裝⽅式


    ● Drone 管理介⾯


    ● Drone 測試部署


    ● Drone ⾃訂套件
    ⼤綱

    View Slide

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

    View Slide

  45. Server
    agent
    agent
    agent
    Database
    系統架構

    View Slide

  46. ● 為什麼選擇 Drone


    ● 為什麼不⽤ Jenkins


    ● 為什麼不⽤ GitLab CI


    ● Drone 基礎簡介


    ● Drone 架構擴展


    ● Drone 安裝⽅式


    ● Drone 管理介⾯


    ● Drone 測試部署


    ● Drone ⾃訂套件
    ⼤綱

    View Slide

  47. How to install drone server and agent?


    http://docs.drone.io/installation/
    Drone 安裝⽂件

    View Slide

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

    View Slide

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


    docker pull drone/agent:0.8

    View Slide

  50. View Slide

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


    go install github.com/drone/drone/cmd/drone-server

    View Slide

  52. Nginx, Caddy, Apache
    Drone Server 搭配前端

    View Slide

  53. Drone 內建⽀援 HTTPS

    View Slide

  54. View Slide

  55. ● 為什麼選擇 Drone


    ● 為什麼不⽤ Jenkins


    ● 為什麼不⽤ GitLab CI


    ● Drone 基礎簡介


    ● Drone 架構擴展


    ● Drone 安裝⽅式


    ● Drone 管理介⾯


    ● Drone 測試部署


    ● Drone ⾃訂套件
    ⼤綱

    View Slide

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

    View Slide

  57. 啟動專案列表

    View Slide

  58. View Slide

  59. View Slide

  60. 瀏覽專案狀態

    View Slide

  61. View Slide

  62. View Slide

  63. View Slide

  64. ● 為什麼選擇 Drone


    ● 為什麼不⽤ Jenkins


    ● 為什麼不⽤ GitLab CI


    ● Drone 基礎簡介


    ● Drone 架構擴展


    ● Drone 安裝⽅式


    ● Drone 管理介⾯


    ● Drone 測試部署


    ● Drone ⾃訂套件
    ⼤綱

    View Slide

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

    View Slide

  66. 所有步驟皆在

    Docker Container 內執⾏

    View Slide

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

    View Slide

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

    View Slide

  69. Git Test Release Docker Discord
    專案流程

    View Slide

  70. ● 執⾏測試指令


    ● 分析程式碼


    ● 驗證程式碼品質


    ● 編譯 Binary


    ● 部署 Binary


    ● 編譯 Docker Image


    ● 部署 Docker Container


    ● 通知訊息
    典型 Pipeline 流程

    View Slide

  71. 如何寫 .yml 設定檔

    View Slide

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

    View Slide

  73. Git Clone 是內建第⼀步驟

    View Slide

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

    View Slide

  75. Drone 特定字 (勿改)

    View Slide

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

    View Slide

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

    View Slide

  78. Drone 關鍵字勿改

    View Slide

  79. ⾃⼰撰寫 clone 指令

    View Slide

  80. 將 Tags ⼀起拉下來

    View Slide

  81. 務必打勾

    View Slide

  82. 撰寫 Pipeline

    View Slide

  83. Git Test Release Docker Discord
    Go 語⾔測試

    View Slide

  84. Drone 關鍵字勿改

    View Slide

  85. 名稱可⾃訂

    View Slide

  86. ⾃選 Image

    View Slide

  87. 拉最新版

    View Slide

  88. 執⾏指令

    View Slide

  89. View Slide

  90. Parallel Execution


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

    View Slide

  91. 平⾏測試
    平⾏測試

    View Slide

  92. 額外 Services
    Mysql, Postgres, Redis

    View Slide

  93. 服務名稱

    View Slide

  94. 全域變數

    View Slide

  95. 服務名稱
    服務名稱

    View Slide

  96. 跟 docker-compose ⼀樣

    View Slide

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

    View Slide

  98. Matrix

    View Slide

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

    View Slide

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

    View Slide

  101. 成功或失敗都通知訊息

    View Slide

  102. Git Test Release Docker Discord
    打包及部署

    View Slide

  103. 請善⽤ plugin Marketplace


    http://plugins.drone.io/
    Drone 沒有內建打包部署功能

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  107. Plugin 映像檔
    Script 列表

    View Slide

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

    View Slide

  109. View Slide

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

    View Slide

  111. Plugin 映像檔

    View Slide

  112. Git Test Release Docker Discord
    消息通知

    View Slide

  113. View Slide

  114. Plugin Image

    View Slide

  115. ⽅便下次執⾏更快速


    vendor, node_modules
    Cache 相關⽬錄

    View Slide

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

    View Slide

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

    View Slide

  118. View Slide

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

    View Slide

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

    View Slide

  121. [skip cache] or [cache skip]


    Only for SFTP cache
    Cache 爛掉?

    View Slide

  122. 觸發其他 CI 服務

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  126. ● 為什麼選擇 Drone


    ● 為什麼不⽤ Jenkins


    ● 為什麼不⽤ GitLab CI


    ● Drone 基礎簡介


    ● Drone 架構擴展


    ● Drone 安裝⽅式


    ● Drone 管理介⾯


    ● Drone 測試部署


    ● Drone ⾃訂套件
    ⼤綱

    View Slide

  127. ⽤ Shell Script 寫

    Drone Plugin

    View Slide

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

    View Slide

  129. ●撰寫程式


    ●打包 Docker Image


    ●上傳到 Docker Hub


    ●測試外掛
    Plugin 四⼤步驟

    View Slide

  130. ⾃訂 Plugin
    任何語⾔都可以寫 Plugin


    PHP, Ruby, Bash, Go, Python …

    View Slide

  131. ⾃訂參數
    ⾃訂參數
    ⾃訂參數

    View Slide

  132. 撰寫 Bash Shell Script Plugin

    View Slide

  133. 前置符號 PLUGIN_

    View Slide

  134. 包成 Docker Image

    View Slide

  135. View Slide

  136. 上傳到 Docker Hub

    View Slide

  137. View Slide

  138. 本機端測試

    View Slide

  139. View Slide

  140. 只要會 Docker 跟 Bash

    View Slide

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

    View Slide

  142. $ drone exec
    本機端測試 Yaml 設定

    View Slide

  143. Drone 優勢

    View Slide

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

    View Slide

  145. ●啟動速度超快 (低記憶體⽤量)


    ●不需要管理者 (簡單的 UI 介⾯)
    Drone 優勢

    View Slide

  146. ●啟動速度超快 (低記憶體⽤量)


    ●不需要管理者 (簡單的 UI 介⾯)


    ●可在本機端運⾏測試
    Drone 優勢

    View Slide

  147. ●啟動速度超快 (低記憶體⽤量)


    ●不需要管理者 (簡單的 UI 介⾯)


    ●可在本機端運⾏測試


    ●完全基於 Container 開發
    Drone 優勢

    View Slide

  148. ●啟動速度超快 (低記憶體⽤量)


    ●不需要管理者 (簡單的 UI 介⾯)


    ●可在本機端運⾏測試


    ●完全基於 Container 開發


    ●任何語⾔都可以寫 Plugin
    Drone 優勢

    View Slide

  149. ●啟動速度超快 (低記憶體⽤量)


    ●不需要管理者 (簡單的 UI 介⾯)


    ●可在本機端運⾏測試


    ●完全基於 Container 開發


    ●任何語⾔都可以寫 Plugin


    ●⽀援 matrix 編譯 (多版本)
    Drone 優勢

    View Slide

  150. Drone 的缺陷

    View Slide

  151. 1. ⽂件不完整

    View Slide

  152. 2. ⾃動取消編譯

    View Slide

  153. 3. 套件不夠多

    View Slide

  154. DevOpsDay 優惠價: 1600


    http://bit.ly/devops-taipei


    Coupon Code: DEVOPSDAY
    Drone 線上課程

    View Slide

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

    View Slide