再见 Jenkins !几行脚本搞定自动化部署,这款神器有点厉害!
在開發或生產環境中,我們經常會搞一套自動化部署方案(俗稱一鍵部署)。比較流行的一種就是Gitlab+Jenkins實現方案,不過這種方案占用內存比較大,沒有個8G內存,很難流暢運行,而且部署起來也不快。最近發現一款神器Drone,輕量級CI/DI工具,結合Gogs使用內存占用不到1G,幾行腳本就能實現自動化部署,推薦給大家!
?
Drone簡介
Drone是一款基于容器技術的持續集成工具,使用簡單的YAML配置文件即可完成復雜的自動化構建、測試、部署任務,在Github上已經有22K+Star。
Gogs安裝
我們將使用輕量級的Gogs來搭建Git倉庫,這里只是簡單說下安裝步驟。
首先需要下載Gogs的Docker鏡像;
下載完成后在Docker容器中運行Gogs;
Gogs運行成功后,訪問Web頁面地址并注冊賬號:http://192.168.5.78:10080
然后將我們的SpringBoot項目mall-tiny-drone的源碼上傳上去即可,項目地址:https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-drone
?
Drone安裝
接下來我們安裝下Drone,不愧是基于容器的CI/DI工具,使用Docker安裝很方便!
首先下載Drone的Server和Runner的鏡像;
這里有個Server和Runner的概念,我們先來理解下;
Server:為Drone的管理提供了Web頁面,用于管理從Git上獲取的倉庫中的流水線任務。
Runner:一個單獨的守護進程,會輪詢Server,獲取需要執行的流水線任務,之后執行。
接下來我們來安裝drone-server,使用如下命令即可;
這里的配置參數比較多,下面統一解釋下;
DRONE_GOGS_SERVER:用于配置Gogs服務地址。
DRONE_RPC_SECRET:Drone的共享秘鑰,用于驗證連接到server的rpc連接,server和runner需要提供同樣的秘鑰。
DRONE_SERVER_HOST:用于配置Drone server外部可訪問的地址。
DRONE_SERVER_PROTO:用于配置Drone server外部可訪問的協議,必須是http或https。
DRONE_USER_CREATE:創建一個管理員賬號,該賬號需要在Gogs中注冊好。
接下來安裝drone-runner-docker,當有需要執行的任務時,會啟動臨時的容器來執行流水線任務;
這里的配置參數比較多,下面統一解釋下。
DRONE_RPC_PROTO:用于配置連接到Drone server的協議,必須是http或https。
DRONE_RPC_HOST:用于配置Drone server的訪問地址,runner會連接到server獲取流水線任務并執行。
DRONE_RPC_SECRET:用于配置連接到Drone server的共享秘鑰。
DRONE_RUNNER_CAPACITY:限制runner并發執行的流水線任務數量。
DRONE_RUNNER_NAME:自定義runner的名稱。
?
Drone使用
讓我們來訪問下Drone的控制臺頁面,第一次登錄需要輸入賬號密碼(在Gogs中注冊的賬號),訪問地址:http://192.168.5.78:3080/
此時我們在Gogs中的項目會現在在列表中,如果沒有的話可以點下SYNC按鈕;
接下來我們需要對倉庫進行設置,將倉庫設置為Trusted(否則Drone創建的容器無法掛載目錄到宿主機),最后點擊SAVE按鈕保存;
保存成功后會在Gogs中自動配置一個Web鉤子,當我們推送代碼到Gogs中去時,會觸發這個鉤子,然后執行在Drone中的流水線任務;
拉到最下面,我們可以發送一個測試推送,推送成功會顯示綠色的√;
此時我們在Drone中發現其實流水線執行失敗了,那是因為我們在腳本中引用了Secret中的ssh_password;
在倉庫的設置中添加一個Secret即可,Secret是專門用來存儲密碼的,此密碼只能被使用或刪除,無法被查看;
在ACTIVITY FEED中使用RESTART可以重新執行該流水線,發現已經成功執行。
?
編寫腳本
當我們向Git倉庫Push代碼時,會自動觸發Web鉤子,然后Drone就會從Git倉庫Clone代碼,再通過項目目錄下的.drone.yml配置,執行相應的流水線,接下來我們來看看這個腳本是如何寫的。
首先我們來了解下在.drone.yml中配置的工作流都有哪些操作,看下流程圖就知道了;
再來一個完整的.drone.yml,配上詳細的注解,看下就基本懂了!
run.sh執行腳本可以實現打包應用和運行容器鏡像,之前講過這里就不再贅述了,運行成功效果如下。
?
總結
對比Jenkins復雜的圖形化界面操作,Drone使用腳本來定義流水線任務無疑更簡單、更直觀。Drone更加輕量級,內存占用少且響應速度快!自動化部署要啥Jenkins?直接給Git整個CI/DI功能難道不香么?
參考資料
官方文檔:https://docs.drone.io/
結合Maven使用:https://docs.drone.io/pipeline/kubernetes/examples/language/maven/
結合SSH使用:http://plugins.drone.io/appleboy/drone-ssh/
將容器目錄掛載到宿主機:https://docs.drone.io/pipeline/docker/syntax/volumes/host/
項目源碼地址
https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-drone
有道無術,術可成;有術無道,止于術
歡迎大家關注Java之道公眾號
好文章,我在看??
總結
以上是生活随笔為你收集整理的再见 Jenkins !几行脚本搞定自动化部署,这款神器有点厉害!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mongodb安装.
- 下一篇: 故意向Linux内核提交漏洞被全线拉黑?