日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

再见 Jenkins !几行脚本搞定自动化部署,这款神器有点厉害!

發布時間:2025/3/16 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 再见 Jenkins !几行脚本搞定自动化部署,这款神器有点厉害! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在開發或生產環境中,我們經常會搞一套自動化部署方案(俗稱一鍵部署)。比較流行的一種就是Gitlab+Jenkins實現方案,不過這種方案占用內存比較大,沒有個8G內存,很難流暢運行,而且部署起來也不快。最近發現一款神器Drone,輕量級CI/DI工具,結合Gogs使用內存占用不到1G,幾行腳本就能實現自動化部署,推薦給大家!

?

Drone簡介

Drone是一款基于容器技術的持續集成工具,使用簡單的YAML配置文件即可完成復雜的自動化構建、測試、部署任務,在Github上已經有22K+Star。


Gogs安裝

我們將使用輕量級的Gogs來搭建Git倉庫,這里只是簡單說下安裝步驟。

  • 首先需要下載Gogs的Docker鏡像;

docker?pull?gogs/gogs
  • 下載完成后在Docker容器中運行Gogs;

docker?run?-p?10022:22?-p?10080:3000?--name=gogs?\ -e?TZ="Asia/Shanghai"?\ -v?/mydata/gogs:/data??\ -d?gogs/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的鏡像;

#?Drone的Server docker?pull?drone/drone:1 #?Drone的Runner docker?pull?drone-runner-docker:1
  • 這里有個Server和Runner的概念,我們先來理解下;

    • Server:為Drone的管理提供了Web頁面,用于管理從Git上獲取的倉庫中的流水線任務。

    • Runner:一個單獨的守護進程,會輪詢Server,獲取需要執行的流水線任務,之后執行。

  • 接下來我們來安裝drone-server,使用如下命令即可;

docker?run?\-v?/mydata/drone:/data?\-e?DRONE_AGENTS_ENABLED=true?\-e?DRONE_GOGS_SERVER=http://192.168.5.78:10080?\-e?DRONE_RPC_SECRET=dronerpc666?\-e?DRONE_SERVER_HOST=192.168.5.78:3080?\-e?DRONE_SERVER_PROTO=http?\-e?DRONE_USER_CREATE=username:macro,admin:true?\-e?TZ="Asia/Shanghai"?\-p?3080:80?\--restart=always?\--detach=true?\--name=drone?\drone/drone:1
  • 這里的配置參數比較多,下面統一解釋下;

    • 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,當有需要執行的任務時,會啟動臨時的容器來執行流水線任務;

docker?run?-d?\-v?/var/run/docker.sock:/var/run/docker.sock?\-e?DRONE_RPC_PROTO=http?\-e?DRONE_RPC_HOST=192.168.5.78:3080?\-e?DRONE_RPC_SECRET=dronerpc666?\-e?DRONE_RUNNER_CAPACITY=2?\-e?DRONE_RUNNER_NAME=runner-docker?\-e?TZ="Asia/Shanghai"?\-p?3000:3000?\--restart?always?\--name?runner-docker?\drone/drone-runner-docker:1
  • 這里的配置參數比較多,下面統一解釋下。

    • 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,配上詳細的注解,看下就基本懂了!

kind:?pipeline?#?定義對象類型,還有secret和signature兩種類型 type:?docker?#?定義流水線類型,還有kubernetes、exec、ssh等類型 name:?mall-tiny-drone?#?定義流水線名稱steps:?#?定義流水線執行步驟,這些步驟將順序執行-?name:?package?#?流水線名稱image:?maven:3-jdk-8?#?定義創建容器的Docker鏡像volumes:?#?將容器內目錄掛載到宿主機,倉庫需要開啟Trusted設置-?name:?maven-cachepath:?/root/.m2?#?將maven下載依賴的目錄掛載出來,防止重復下載-?name:?maven-buildpath:?/app/build?#?將應用打包好的Jar和執行腳本掛載出來commands:?#?定義在Docker容器中執行的shell命令-?mvn?clean?package?#?應用打包命令-?cp?target/mall-tiny-drone-1.0-SNAPSHOT.jar?/app/build/mall-tiny-drone-1.0-SNAPSHOT.jar-?cp?Dockerfile?/app/build/Dockerfile-?cp?run.sh?/app/build/run.sh-?name:?build-startimage:?appleboy/drone-ssh?#?SSH工具鏡像settings:host:?192.168.5.78?#?遠程連接地址username:?root?#?遠程連接賬號password:from_secret:?ssh_password?#?從Secret中讀取SSH密碼port:?22?#?遠程連接端口command_timeout:?5m?#?遠程執行命令超時時間script:-?cd?/mydata/maven/build?#?進入宿主機構建目錄-?chmod?+x?run.sh?#?更改為可執行腳本-?./run.sh?#?運行腳本打包應用鏡像并運行volumes:?#?定義流水線掛載目錄,用于共享數據-?name:?maven-buildhost:path:?/mydata/maven/build?#?從宿主機中掛載的目錄-?name:?maven-cachehost:path:?/mydata/maven/cache
  • 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 !几行脚本搞定自动化部署,这款神器有点厉害!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。