No matter where I am, I will reply you immediately when I see the email.My Email: echo "YUBzYW1lZ28uY29tCg==" | base64 -d
前言
CI / CD
( 持續(xù)集成 / 持續(xù)部署 )方案是DevOps中不可或缺的流程之一,最近也了解了部分的相關(guān)的解決方案突雪,最終選擇了Drone
+ Gogs
基于docker
容器環(huán)境來構(gòu)建CI / CD
涡贱,本文將分享下如何構(gòu)建此平臺以及如何快速地使用到項(xiàng)目開發(fā)中。
應(yīng)該會有一個(gè)疑問督函?我為什么不選擇主流的GitLab
+ Jenkins
兩個(gè)最佳搭檔來構(gòu)建呢激挪?
-
GitLab
是使用Ruby
編寫的,Jenkins
更是了不起宛篇,使用Java
來編寫的,項(xiàng)目整體比較膨大些己,同時(shí)它們對硬件嘿般、CPU等開銷比較高 -
Drone
、Gogs
皆是使用Go
語言來編寫構(gòu)建逼庞,在整體的語言性能與內(nèi)存開銷算是有一定的優(yōu)勢瞻赶,同時(shí)Drone
支持Github
派任、GitLab
掌逛、Gogs
以及Bitbucket
司倚,這點(diǎn)很不錯(cuò)!反手就是一個(gè)贊?
GitLab + Jenkins該組合還是一個(gè)不錯(cuò)的選擇皿伺,我并沒有反對,為何呢鸵鸥?GitLab是一個(gè)非常成熟的git工具之一丹皱,同時(shí)Jenkins也是非常成熟的CICD組件,功能非常強(qiáng)大宰翅。
但是我還是要站在正義的一邊爽室,選擇Drone
+Gogs
阔墩。O(∩_∩)O哈哈~
環(huán)境
使用的前提瓶珊,必須符合以下條件
- 系統(tǒng)安裝了
Docker
,同時(shí)要安裝了Docker
編排工具docker-compose
- 主流的
x64
位系統(tǒng)忘苛,Linux
、Mac
扎唾、Window
等 - 安裝了
git
版本控制工具
安裝
安裝非常簡單南缓,拉取docker-compose.yml
編排文件,基于Docker
環(huán)境自動構(gòu)建即可纸镊!
同步至github | 戳戳戳
git clone https://github.com/alicfeng/gogs-drone-docker.git
cd gogs-drone-docker && docker-compose up -d
執(zhí)行docker ps
來看下容器的運(yùn)行情況
對應(yīng)的配置文件可以根據(jù)項(xiàng)目的需求自由靈活改變,同時(shí)像我這樣強(qiáng)迫癥的人峰搪,我不喜歡使用
IP
來進(jìn)行訪問請求的以及http
協(xié)議訪問凯旭,我會使用nginx
代理。不詳細(xì)說了
至此咐蚯,我們已經(jīng)完成了平臺的構(gòu)建工作了弄贿。我們來欣賞下干杯
有兩個(gè)地方需要注意:
-
Drone
登錄的賬號需要在Gogs
設(shè)置為管理員差凹,他倆兄弟的賬密是互通的 -
Gogs
的倉庫會自動同步到Drone
上,此時(shí)呐萌,需要在Drone
開啟鉤子才能正常運(yùn)行
使用
好了谊娇,是時(shí)候來體驗(yàn)兩把了,這里需要有一個(gè)前提了济欢,O(∩_∩)O哈哈~,你需要了解它是如何運(yùn)行的茫叭,根據(jù)什么來自動化構(gòu)建的
每當(dāng)分支的代碼更新的時(shí)候半等,Gogs會動過鉤子同步通知Drone,而Drone收到通知之后會發(fā)生一系列動作
- 通過git插件
clone
分支代碼到容器里面 - 測試
- 編譯代碼莽囤,構(gòu)建可執(zhí)行文件
- 將項(xiàng)目和運(yùn)行環(huán)境打包成鏡像切距,發(fā)布到
Registry
- 部署至生產(chǎn)環(huán)境
- 發(fā)送郵件等通知信息,這里還有很多插件,比如微信锨络、釘釘、電報(bào)等
構(gòu)建的劇本是通過.drone.yml
文件編排的羡儿,基于Docker
鏡像進(jìn)行構(gòu)建是钥,很nice~下面簡單體驗(yàn)下Laravel
項(xiàng)目的即可!
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