No matter where I am, I will reply you immediately when I see the email.My Email: echo "YUBzYW1lZ28uY29tCg==" | base64 -d
前言
CI / CD
( 持續整合 / 持續部署 )方案是DevOps中不可或缺的流程之一,最近也瞭解了部分的相關的解決方案,最終選擇了Drone
+ Gogs
基於docker
容器環境來構建CI / CD
,本文將分享下如何構建此平臺以及如何快速地使用到專案開發中。
應該會有一個疑問?我為什麼不選擇主流的GitLab
+ Jenkins
兩個最佳搭檔來構建呢?
GitLab
是使用Ruby
編寫的,Jenkins
更是了不起,使用Java
來編寫的,專案整體比較膨大,同時它們對硬體、CPU等開銷比較高Drone
、Gogs
皆是使用Go
語言來編寫構建,在整體的語言效能與記憶體開銷算是有一定的優勢,同時Drone
支援Github
、GitLab
、Gogs
以及Bitbucket
,這點很不錯!反手就是一個贊?GitLab + Jenkins該組合還是一個不錯的選擇,我並沒有反對,為何呢?GitLab是一個非常成熟的git工具之一,同時Jenkins也是非常成熟的CICD元件,功能非常強大。
但是我還是要站在正義的一邊,選擇Drone
+Gogs
。O(∩_∩)O哈哈~
說明
drone
升級使用1.0.0-rc6
版本,此版本並非穩定版本,推薦使用1
版本甚至是0.8.6
更穩定的版本。1.0
後的版本較之前而言,配置更加靈活、最佳化版本,同時介面也變化了。drone
環境
使用的前提,必須符合以下條件
- 系統安裝了
Docker
,同時要安裝了Docker
編排工具docker-compose
- 主流的
x64
位系統,Linux
、Mac
、Window
等 - 安裝了
git
版本控制工具
安裝
安裝非常簡單,拉取docker-compose.yml
編排檔案,基於Docker
環境自動構建即可!
同步至github | 戳戳戳
git clone https://github.com/alicfeng/gogs-drone-docker.git
cd gogs-drone-docker && docker-compose up -d
執行docker ps
來看下容器的執行情況
對應的配置檔案可以根據專案的需求自由靈活改變,同時像我這樣強迫症的人,我不喜歡使用
IP
來進行訪問請求的以及http
協議訪問,我會使用nginx
代理。不詳細說了
至此,我們已經完成了平臺的構建工作了。我們來欣賞下~乾杯~
有兩個地方需要注意:
Drone
登入的賬號需要在Gogs
設定為管理員,他倆兄弟的賬密是互通的Gogs
的倉庫會自動同步到Drone
上,此時,需要在Drone
開啟鉤子才能正常執行
使用
好了,是時候來體驗兩把了,這裡需要有一個前提了,O(∩_∩)O哈哈~,你需要了解它是如何執行的,根據什麼來自動化構建的
每當分支的程式碼更新的時候,Gogs會動過鉤子同步通知Drone,而Drone收到通知之後會發生一系列動作
- 透過git外掛
clone
分支程式碼到容器裡面 - 測試
- 編譯程式碼,構建可執行檔案
- 將專案和執行環境打包成映象,釋出到
Registry
- 部署至生產環境
-
傳送郵件等通知資訊,這裡還有很多外掛,比如微信、釘釘、電報等
構建的劇本是透過
.drone.yml
檔案編排的,基於Docker
映象進行構建,很nice~下面簡單體驗下Laravel
專案的即可!github 有laravel
、vue
等前後端編排的yml
檔案。
pipeline:
build:
image: motecshine/laravelphp71
commands:
- mv $(pwd)/.env.dev $(pwd)/.env
- composer config repo.packagist composer https://packagist.phpcomposer.com
- composer install --no-scripts --no-dev
# others
本作品採用《CC 協議》,轉載必須註明作者和本文連結