為什麼我用 Drone 取代 Jenkins 及 GitLab CI

Logo-DevOpsDays 終於有機會正式跟大家介紹為什麼我會捨棄 JenkinsGitLab CI,取而代之的是用 Go 語言寫的 Drone。今年很高興錄取台灣第一屆 DevOps Day 講師,在今年主題是『用 Drone 打造輕量級容器持續交付平台』,主要推廣這套 Drone CI/CD 工具,會議內容圍繞在 Jenkins, GitLab CI 跟 Drone 的比較。也提到為什麼我不用 Jenkins 及 GitLab CI 的幾個原因。底下整理議程大綱。
  • 為什麼選擇 Drone
  • Drone 基礎簡介
  • Drone 架構擴展
  • Drone 安裝方式
  • Drone 管理介面
  • Drone 測試部署
  • Drone 自訂套件
在講為什麼不用 Jenkins 或 GitLab CI 之前我們來看看大家都用什麼工具來串 CI/CD 流程 Screen Shot 2017-09-07 at 10.50.39 AM

為什麼不用 Jenkins

有六個原因大家可以想看看是否有踩到身為工程師的痛點
  1. 專案設定複雜 (連 DevOps 老手都這麼覺得)
  2. 流程版本控制 (同事改個設定檔,流程就爆掉)
  3. 無法擴充套件 (你會 Java 嗎?團隊內有人會嗎?)
  4. 後續維護? (同事離職或請假該怎麼辦)
  5. 學習困難? (新人完全不會啊)
  6. 團隊成長? (團隊內只有特定同事才會?)

為什麼不用 GitLab CI

GitLab CI 已經改善了很多 Jenkins 遇到的問題,但是還有兩點是我看到的缺陷:
  1. 只支援 GitLab 版本控制 (如果你用 GitHub 該怎麼辦)
  2. 無法擴充 Yaml 檔案寫法
大家可以想想第二點,假設你今天要部署 10 台伺服器,該如何將檔案同時丟到 10 台?當然在 GitLab CI 可以做到,但是可以比較看看 Drone 透過 drone-scp,而 GitLab CI 則是要自己自幹 Shell Script。所以可想而知,如果可以擴充 Yaml 寫法,就可以輕易簡化 Yaml 設定,讓流程更清楚。

導入 CI/CD 的瓶頸

在之前做過一份統計,大家對於導入 CI/CD 的瓶頸在哪邊,底下是統計圖 Screen Shot 2017-09-07 at 10.50.56 AM 可以看到前三名分別是:
  1. 工具設定複雜
  2. 團隊無法成長
  3. 新人學習困難
如果您的團隊有以上困擾,歡迎使用 Drone,底下是我錄製的 Udemy 線上課程。

Drone 線上課程

如果你對 Drone 有興趣,且想改善上面我提到的問題,歡迎訂購,課程訂價是 2600 元,不過在 DevOps Day 開賣,現在特價 1600 元。Coupoon 優惠碼: DEVOPSTAIPEI

購買網址

底下是我的投影片,歡迎大家參考:
  • 最近公司也在考慮改用 Drone 但是碰到一些微妙的問題。

    像是預設的 shell 是 sh 但是官方說這是 Docker Image 的問題,他們不提供調整的方式。
    另外就是明明是 Pipeline 但是我卻無法共享環境變數設定(因為好幾個步驟都要用相同的設定)

    像是這些問題是有辦法解決的嗎?

  • appleboy48

    Shell 部分我倒是沒想到要用其他的模式,你有需求需要用到其他 shell?
    共享環境變數我遇過,目前我也是 copy 設定到其他步驟,不過我可以建議你用 secret 的方式來達到共享。

  • 是因為用 apt-get 裝環境比較慢,所以是改用 Bash 判斷某個目錄直接用下載的
    看起來目前還沒有解法

    剛剛還想到另外幾個問題

    Service 的 Hostname 要怎麼設定?像是我有連資料庫,是用 postgres://database/xxx 這樣,但是似乎連不上
    目前的 Build Cache 功能不見了?

  • appleboy48

    用 apt-get:這部分,我自己都會包一個專案常用的 image 把 apt 一堆指令都先裝好,之後就直接用這 image 就好,省得每次 build 都在安裝下載

    hostname 跟 docker-compose 用法一樣

    定義 postgres
    https://github.com/go-training/drone-laravel-example/blob/master/.drone.yml#L47

    .env 裡面就是寫 postgres
    https://github.com/go-training/drone-laravel-example/blob/master/.env.example#L9

    build cache 有兩個

    volume cache: http://plugins.drone.io/drillster/drone-volume-cache/
    sftp cache: http://plugins.drone.io/appleboy/drone-sftp-cache/

    cache 功能從以前到現在都不是內建喔。

  • Kettan

    drone.io 維持在 Coming Soon 好一段時間了,不知道什麼時候會更新?
    目前看來 drone 是基於 Docker container,如果想部署到 EC2 (not ECS) 是不是沒辦法?

  • appleboy48

    @kettan:disqus 你應該搞錯了。Drone 是基於 container 架構,但是部署就跟 drone 本身的架構沒啥關係了,你要部署到 EC2,只需要透過 SSH 即可,可以使用 drone-ssh 套件即可。

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

  • Pingback: 用 Kubernetes 將 Drone CI/CD 架設在 AWS | 小惡魔 - 電腦技術 - 工作筆記 - AppleBOY()