再見 Jenkins !這款神器有點厲害!輕鬆搞定自動化部署

在平常開發、測試或運維環境中,咱們對於自動化部署的需求日益強烈。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須要一個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
安裝drone-server
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
#初始管理員用戶
安裝drone-runner-docker
$ 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流水線。

相關文章
相關標籤/搜索