安裝 Drone 0.5 自動測試平台並與 Github 連結

Drone 來自 Drone.io,但他們有將自己的平台開源,所以任何人都可以自己架設一個 Drone。什麼是 Drone?簡單說就是一個自動化測試平台。

我們為什麼需要自動測試平台?一個小型的程式可以透過手動的方式來測試其功能,但遇到了大型程式,就不方便逐一測試了。這個時候我們可以交給機器自行測試,當發生錯誤時就自動向我們回報。

若要達到上述這種效果就需事先寫好「單元測試」,而 Drone 扮演的角色就是自動執行單元測試,而且這個執行的環境是獨立的,不會真正干擾到你的主機。

Drone 亦能在測試成功時自動幫你部署到正式的伺服器,或是執行任何額外的腳本。倘若你聽過 Travis CI,那麼也許你就會對這些事情感到不陌生。

1. 先建立第三方應用程式

若要和你的 Github 連結,你需要先在 Github 那一端建立一個第三方應用程式連結,先到你的 Github 後台並進入 OAuth Applications,然後按下 Register a new application

輸入設定

接下來在這個頁面你需要輸入你的應用程式名稱、Drone 網址、Drone 驗證回傳網址。

應用程式名稱隨便取一個你記得的名稱即可,而 Hoempage URL 則是你將會架設 Drone 的網址,最後一個 Authorization callback URL 則是:https://你的DRONE網址/authorize

取得你的 Cilent ID 和 Secret

完成之後你會來到這個介面,請複製你的 Cilent IDCilent Secret 下方的代碼(看起來像一串亂碼),會在下一個章節運用到這兩個亂數字串。

2. 建立 Drone 的 Docker 容器

在部署 Drone 之前你需要配置一些設定。

生成隨機密碼

Drone 仰賴一組密碼來認證組建是否合格,這個密碼你可以在這個網站上生成,記得複製這個密碼,稍後會用到。

建立 Drone 的 Docker 容器

終於來到了要架設 Drone 的步驟,你需要先有 Docker 還有 Docker Compose,這部分可以查看「在 Ubuntu 安裝 Docker 和 Docker Compose」教學。

首先先建立一個名為 docker-compose.yml 的 Compose 設定檔。

$ vi docker-compose.yml

然後內容如下,記得修改其中的 你的_CLIENT_ID你的_CLIENT_SECRET你的_隨機密碼

version: '2'

services:  
  drone-server:
    image: drone/drone:0.5
    ports:
      - 80:8000
    volumes:
      - ./drone:/var/lib/drone/
    restart: always
    environment:
      - DRONE_OPEN=true
      - DRONE_GITHUB=true
      - DRONE_GITHUB_CLIENT=你的_CLIENT_ID
      - DRONE_GITHUB_SECRET=你的_CLIENT_SECRET
      - DRONE_SECRET=你的_隨機密碼

  drone-agent:
    image: drone/drone:0.5
    command: agent
    restart: always
    depends_on: [ drone-server ]
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - DRONE_SERVER=ws://drone-server:8000/ws/broker
      - DRONE_SECRET=你的_隨機密碼

記得儲存。上面這個 Compose 檔案會協助我們一次啟動兩個 Docker 容器,一個是 Drone 伺服器、另一個是 Drone 特工(處理事情的就是了)。

現在透過下列指令來啟動這兩個容器吧。

$ docker-compose up -d

在之後如果你想要停止 Drone 服務,使用 docker-compose stop 指令就會一次關閉兩個容器,而不需要自己手動一個一個關閉。

3. 進入你的 Drone

接下來進入 http://你的網址 應該就可以看到下列畫面了。按下 Login 後繼續吧。

給予授權

在你按下 Login 後,Github 會跳出來詢問你是否要授權你的 Drone。

將網頁捲動到最下方,有個綠色的 Authorize application 即是允許授權,按下即可繼續。

歡迎來到首頁!

搭拉!這裡就是你的 Drone 首頁,不過看起來什麼都還沒有呢,讓我們在稍後新增一個 PHP 專案試試看吧。

4. 啟用你的第一個 Drone 專案!

按下右上角的選單中的 Account 來查看你有哪些專案可供自動建置。

啟用專案

你能夠在這裡打開你所想要啟用的專案,打開後旁邊就會多一個齒輪,按下齒輪圖示可以進入詳細設定。

配置詳細設定

現在這是單個專案的詳細設定,在這裡你可以決定要在什麼時候執行自動化測試,如 Push Hook 就是在程式碼被推送至 GitHub 時執行,而 Pull Request Hooks 則是在有人發送合併請求時執行⋯⋯等。

撰寫 .drone.yml 並 Push

.drone.yml 就是一個告訴 Drone 你要如何測試、建置這個環境的檔案,這個檔案要被放置在倉庫的根目錄,這部分很進階、玩法很多,還請自行參考官方文件

下列是個基礎的 Go 測試環境範例,你只需要在你的 Git 倉庫的根目錄底下新增一個 .drone.yml 然後內容如下。

pipeline:  
  build:
    image: golang:${GO_VERSION}
    commands:
      - go get
      - go build
      - go test

matrix:  
  GO_VERSION:
    - 1.7
    - 1.6

接著推送這個變更到 Github,Drone 就會開始以兩個不同的 Go 版本進行測試(分別是 1.71.6)。

結果

接著你就可以看到你正在測試中的專案,因為我的 Drone 是架在自己的電腦裡,所以這部分沒辦法運作,網路上找了一張示意圖。

按下該 Commit 之後還可以看到即時的終端機狀態。

(圖片來源:https://discuss.drone.io/t/weekly-update-14-jul-2016/284)