Drone 自動打包Laravel imgae 並上傳到docker hub上

先說說Drone的概念,Drone可以分為Server與Agent兩者

Server負責與Git hub等版本庫溝通,然後依照pipeline指令分派給Agent執行

而Agent在執行時則是完全透過docker containter的環境完成所有指令

簡單說就是pipeline中定義的每一個step都是給定一個image來執行指定的command

今天要完成的是利用Drone連結github,當git push後將程式碼重新封裝到新的image然後上傳到dockerhub上

參考資料

https://docs.drone.io/configure/pipeline/

https://ithelp.ithome.com.tw/articles/10223277

如果你沒過Docker請先閱讀MAC安裝Docker

 

安裝Drone

安裝前 因為要連結github,所以先到github上設定好 OAuth Apps

路徑為 : Settings > Developer settings > OAuth Apps > New OAuth App

https://github.com/settings/applications/new

填寫資訊如下

Drone github

上面的資訊,Drone可為自行設定的APP名稱,MY_SERVER_URL則是架設Drone的伺服器IP port或者網址,最後一個Authorization callback URL 則只需要在MY_SERVER_URL後面加入/login 即可

按下 Register application後會拿到Client ID 以及Client Secret,這兩者會在下方設定檔用上

 

接著Drone的安裝其實很簡單,可以按照官網上的說明啟動兩個docker就可以了(Server + Agent),也可以透過docker compose一次啟動兩個containter

備妥以下docker-compose.yml 以及.env設定檔即可

.env

檔案編寫完成後即可用

來啟動Drone server 以及Drone Agent兩台container

 

認證啟動專案

Drone啟動後,透過瀏覽器連線到MY_SERVER_URL,畫面會跳到github上作認證,完成後就可以看到像這樣子在github上的列表了

Drone github

要啟動哪個專案就按下右邊的”ACTIVATE”按鈕來設定

(如果按下ACTIVATIVE沒有反應肯定是.evn裡面變數設定有錯誤,請檢查)

Drone github

1.0版後的Drone可以設定.drone.yml的位置,如果沒有要修改的話,按下”SAVE”按鈕就行了

 

PIPELINE

專案連結上後,接著就是要讓Drone知道收到git push後該做什麼事情,假設現在要設定drone_test2這個專案,在專案根目錄建立.drone.yml,加入git跟著一起push上github即可

上面的yml檔一共做兩件事情,都寫在step中

一共打包兩個image檔,完成後都上傳到dockerhub中

其中,Dockerfile我只做了一件事情,就是把上傳到dithub的程式碼搬移到image中,像這樣子

Drone在在動的時後會先將github上的repo先clone到根目錄中,所以COPY路徑指定 . 即可

隨著.drone.yml push到github上後,Drone隨即會開始作動

Drone github

可以看到左邊的選單一共有三個工作,兩個是.drone.yml中定義的,第一個clone則是上面提到Drone會先將repo clone到根目錄中

如果工作都正常完成會打上綠色勾勾,如果有問題會在右方顯示錯誤訊息,並且顯示紅色叉叉

等到所有工作完成後,你會在dockerhub上看到多了兩個新上傳的image!

 

以上,完成今天的任務目標,以後只要git push 就可以自動的打包成image了