在平常開發、測試或運維環境中,咱們對於自動化部署的需求日益強烈。java
用過 SVN 的小夥伴們,都應該知道hooks(鉤子)這個功能,的確平常企業內部測試環境常常會用過這個「特殊」的功能,經過這個功能來 實現自動更新發布代碼的功能。git
後面又逐漸引入了持續集成、持續部署,最經常使用的就是經過Jenkins來配合其它的代碼管理工具或平臺來實現上述的功能。以前也寫過很多的介紹文章:Jenkins+Maven+Svn實現代碼自動打包與發佈,使用 Gitlab+Jenkins 實現多分支自動獨立部署,有興趣的讀者能夠自行查閱。github
可是,基於上面的模式,你們也都知道,有一些不足的地方,第一就是部署環境比較麻煩,一堆的組件須要安裝,第二對服務器自己的資源條件要求較高。最近發現一個很牛逼的工具 Drone(你還在用 Jenkins ?趕快看看這些替代方案吧!),比上面的工具算是輕量級的選手,但一樣能實現自動化部署的功能,因此,今天民工哥給你們分享一下這款吊炸天的工具。docker
Drone 是一種基於容器技術的持續交付系統。Drone 使用簡單的 YAML 配置文件來定義和執行 Docker 容器中的 Pipelines。目前在 Github上已經有 23.2K+ Star了,說明很是受歡迎的。瀏覽器
Drone 與流行的源代碼管理系統無縫集成,包括 GitHub,GitHub Enterprise,Bitbucket 等。服務器
使用 github 作爲代碼管理倉庫(其它的也能夠,這個比較方便)運維
打開github.com點擊頭像,選擇Settings/Developer settings/OAuth Apps,而後點擊New OAuth App建立OAuth應用。工具
其中 http://drone.mingongge.com 是你部署Drone的域名,注意Authorization callback URL 這個地址不要填寫錯了。測試
其中的ClientID和ClientSecret注意保存好,後面須要用到。spa
注意:安裝Drone須要一個drone-server和drone-runner,
drone-runner不是必選的,官方也不推薦將runner和server安裝在同一臺服務器上,若是你要這樣安裝的話能夠設置DRONE_AGENTS_ENABLED=false
,drone-server將會做爲默認的runner,本文是將runner和server安裝在同一服務器上。
# Drone的Server docker pull drone/drone:1 # Drone的Runner docker pull drone/drone-runner-docker:1
docker run \ --volume=/var/lib/drone:/data \ --env=DRONE_GITHUB_CLIENT_ID={{DRONE_GITHUB_CLIENT_ID}} \ --env=DRONE_GITHUB_CLIENT_SECRET={{DRONE_GITHUB_CLIENT_SECRET}} \ --env=DRONE_RPC_SECRET={{DRONE_RPC_SECRET}} \ --env=DRONE_SERVER_HOST={{DRONE_SERVER_HOST}} \ --env=DRONE_SERVER_PROTO={{DRONE_SERVER_PROTO}} \ --env=DRONE_USER_CREATE=username:USER_NAME,admin:true \ --publish=80:80 \ --publish=443:443 \ --restart=always \ --detach=true \ --name=drone \ drone/drone:1
參數說明
DRONE_GITHUB_CLIENT_ID #在上一步中生成的 GitHub oauth 客戶端 ID DRONE_GITHUB_CLIENT_SECRET #在上一步中生成的 GitHub oauth 客戶端密鑰 DRONE_RPC_SECRET #提供在上一步中生成的共享密鑰。這用於驗證服務器和運行程序之間的 rpc 鏈接。服務器和運行器必須提供相同的祕鑰值。 DRONE_SERVER_HOST #服務器對外提供的或訪問的域名,也能夠是IP地址,用IP+端口的方式來配置 DRONE_SERVER_PROTO #必需的字符串值提供您的外部協議方案。此值應設置爲 http 或 https。 DRONE_USER_CREATE #初始管理員用戶
$ docker run -d \ -v /var/run/docker.sock:/var/run/docker.sock \ -e DRONE_RPC_PROTO=https \ -e DRONE_RPC_HOST=drone.mingongge.com \ -e DRONE_RPC_SECRET=super-duper-secret \ -e DRONE_RUNNER_CAPACITY=2 \ -e DRONE_RUNNER_NAME=${HOSTNAME} \ -p 3000:3000 \ --restart always \ --name runner \ drone/drone-runner-docker:1
參數說明
DRONE_RPC_HOST #提供 Drone 服務器的主機名(和可選端口)。運行器鏈接到主機地址處的服務器以接收管道以供執行。 DRONE_RPC_PROTO #提供用於鏈接到您的 Drone 服務器的協議。該值必須是 http 或 https。 DRONE_RPC_SECRET #提供用於與您的 Drone 服務器進行身份驗證的共享密鑰。這必須與您的 Drone 服務器配置中定義的祕密相匹配。
而後打開瀏覽器,輸入服務器的域名或者IP+端口,就能夠訪問drone的管理頁面了。
若是你github上有建立過項目代碼倉庫,這裏的頁面就會顯示,若是沒有顯示,點擊SYNC同步一下。
接下來咱們須要對倉庫進行設置,點擊項目而後將倉庫設置爲 Trusted,點擊SAVE保存便可。
而後在github上就會生成一個Webhooks,經過這個來觸發drone執行做業。
建立Secrets
其實整個流程和jenkins很像,向代碼倉庫提交代碼更新時,就會自動觸發Webhooks,而後Drone就會從代碼倉庫Clone代碼,再經過這個.drone.yml(至關於java使用的pom.xml文件)配置,執行相應的流水線操做。
好比寫一個這樣的簡單的文件
kind: pipeline type: kubernetes name: default steps: - name: drone_deploy image: alpine commands: - echo hello - echo world
而後執行操做推送到代碼倉庫
git add . git commit -m 'deploy test by mingongge' git remote add origin mingongge@github.com:mingongge/dronetest.git git push -u origin master
經過drone管理頁面查看結果
並且流水線的操做也是成功,返回相關的信息以下
相比較於Jenkins的操做,彷佛要簡單許多,重點的操做就是編寫好配置文件.drone.yml,其它的都是一些圖形化操做,沒有什麼特別的難度。
官方操做文檔:官方文檔:https://docs.drone.io/
時間有限,教程可能有不全之處,你們能夠自行部署以後,歡迎前來一同交流討論這款超牛的神器,共同打造屬於本身的CI/CD流水線。