基于Drone+Gogs流水線-全面認(rèn)識(shí)輕量級(jí)云原生CI引擎Drone

1. 介紹

image.png

Drone by Harness? 是一個(gè)基于Docker容器技術(shù)的可擴(kuò)展的持續(xù)集成引擎啄育,用于自動(dòng)化測(cè)試酌心、構(gòu)建、發(fā)布挑豌。每個(gè)構(gòu)建都在一個(gè)臨時(shí)的Docker容器中執(zhí)行安券,使開發(fā)人員能夠完全控制其構(gòu)建環(huán)境并保證隔離。開發(fā)者只需在項(xiàng)目中包含 .drone.yml文件氓英,將代碼推送到 git 倉庫侯勉,Drone就能夠自動(dòng)化的進(jìn)行編譯、測(cè)試铝阐、發(fā)布址貌。可以與Docker完美集成徘键。
https://docs.drone.io/
image.png

特點(diǎn)

  • Drone引入了Pipelnes的概念练对,管道可幫助我們自動(dòng)化軟件交付過程中的步驟,例如啟動(dòng)代碼構(gòu)建吹害,運(yùn)行自動(dòng)化測(cè)試以及部署到暫存或生產(chǎn)環(huán)境锹淌。
  • 通過將.drone.yml文件放在git信息庫的根目錄中來配置管道。 yaml語法旨在易于閱讀和表達(dá)赠制,以便查看存儲(chǔ)庫的任何人都可以理解工作流程赂摆。
  • Drone通過多個(gè)step來完成一系列的指令。

為什么選擇Drone?

  • 和 Jenkins 相比钟些, Drone 就輕量的多了烟号,從應(yīng)用本身的安裝部署到流水線的構(gòu)建都簡(jiǎn)潔的多。由于是和源碼管理系統(tǒng)相集成政恍,所以 Drone 天生就省去了各種賬戶權(quán)限的配置汪拥,直接與 gitlab 、 github 篙耗、 Bitbucket 這樣的源碼管理系統(tǒng)操作源代碼的權(quán)限一致

  • Drone 與流行的源代碼管理提供商無縫集成迫筑,支持github、gitlab宗弯、gogs脯燃、gitea、gitee蒙保、bitbucket server/cloud辕棚, 這是使用Drone的第一印象,可以實(shí)行快速打造GitOps場(chǎng)景

  • 流水線插件是執(zhí)行預(yù)定義任務(wù)的 Docker 容器,通過將它們配置為Pipeline中的步驟逝嚎。插件可用于部署代碼扁瓢、發(fā)布工件、發(fā)送通知等补君。

image.png

image.png

2. 部署Gogs-極易搭建的自助 Git 服務(wù)

image.png

安裝MySQL

docker run --name gogs-mysql --restart=always -v /opt/mysql/mysqlVolume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7.19

創(chuàng)建Gogs及drone數(shù)據(jù)庫

#mysql -uroot -p123456 -h 127.0.0.1
CREATE DATABASE IF NOT EXISTS gogs CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
create database drone;

# Pull image from Docker Hub.
$ docker pull gogs/gogs

# Create local directory for volume.
$ mkdir -p /var/gogs

運(yùn)行Gogs

docker run --name=gogs --restart=always --link gogs-mysql:db -p 10022:22 -p 10080:3000 -v /var/gogs:/data gogs/gogs

賬號(hào):admin
密碼:123456

打開頁面繼續(xù)配置Gogs


image.png
image.png

3. 部署Drone-Server

docker run \
  --volume=/var/lib/drone:/data \
  --env=DRONE_AGENTS_ENABLED=true \
  --env=DRONE_GOGS_SERVER=http://192.168.31.112:10080 \
  --env=DRONE_RPC_SECRET=123456 \
  --env=DRONE_SERVER_HOST=192.168.31.112 \
  --env=DRONE_SERVER_PROTO=http \
  --env=DRONE_LOGS_TRACE=true \
  --publish=801:80 \
  --publish=4431:443 \
  --restart=always \
  --detach=true \
  --name=drone \
  drone/drone:2.0.2
  • DRONE_GOGS_SERVER:這里使用的是gogs作為git倉儲(chǔ)引几,當(dāng)然drone也支持github,gitlab等一些主流的源碼管理平臺(tái),不同的平臺(tái)需要設(shè)置不同的環(huán)境變量
  • DRONE_RPC_SECRET:與agent之間通信的密鑰挽铁,一定要配置
  • DRONE_SERVER_HOST:設(shè)置drone server使用的host名稱伟桅,可以是ip地址加端口號(hào)
  • DRONE_SERVER_PROTO:使用的協(xié)議http/https
  • DRONE_USER_CREATE:設(shè)置初始的管理員,這個(gè)是超級(jí)管理員
  • DRONE_LOGS_TRACE:?jiǎn)?dòng)日志屿储,默認(rèn)是關(guān)閉的
  • DRONE_OPEN 開啟注冊(cè)贿讹,此配置允許任何人自注冊(cè)和登錄系統(tǒng)

4. 激活倉庫配置Webhook

  • 1 登錄drone激活倉庫
  • 2 在倉庫創(chuàng)建.drone.yml文件
  • 3 檢查倉庫的webhooks配置是否正常
image.png

image.png

激活之后,自動(dòng)就會(huì)在gogs倉庫的Web設(shè)置中創(chuàng)建鉤子
當(dāng)不存在.drone.yml文件或者倉庫沒有在drone激活够掠,測(cè)試返回的報(bào)文可能是dial tcp連接失敗民褂。

image.png

5. 部署Drone-Runner

Drone CI提供了多種runtime,可以利用docker方式運(yùn)行疯潭,也可以通過傳統(tǒng)ssh方式運(yùn)行赊堪,也可以采用k8s作為runtime;Drone CI實(shí)現(xiàn)了一個(gè)可拓展的runner架構(gòu),方便實(shí)現(xiàn)各種runner竖哩。Drone Runner是獨(dú)立的守護(hù)程序哭廉,用于輪詢服務(wù)器以執(zhí)行掛起的Pipeline。有不同類型的Runner針對(duì)不同的用例和運(yùn)行時(shí)環(huán)境進(jìn)行了優(yōu)化相叁。成功安裝Drone Server后遵绰,必須安裝一個(gè)或多個(gè)運(yùn)行器。

使用ssh-runner

用 SSH 協(xié)議在靜態(tài)遠(yuǎn)程服務(wù)器上執(zhí)行管道命令增淹。管道命令直接在遠(yuǎn)程服務(wù)器上執(zhí)行椿访,沒有隔離,使用默認(rèn) shell虑润。出于安全原因成玫,此運(yùn)行器不適合不受信任的工作負(fù)荷。

docker run -d \
  -e DRONE_RPC_PROTO=http \
  -e DRONE_RPC_HOST=192.168.31.112:801 \
  -e DRONE_RPC_SECRET=123456 \
  -p 4001:3000 \
  --restart always \
  --name runner-ssh \
  drone/drone-runner-ssh

使用 docker runner

針對(duì)可以在無狀態(tài)容器中運(yùn)行測(cè)試和編譯代碼的項(xiàng)目進(jìn)行了優(yōu)化; 不太適合無法在容器內(nèi)運(yùn)行測(cè)試或編譯代碼的項(xiàng)目拳喻,包括面向 Docker 不支持的操作系統(tǒng)或體系結(jié)構(gòu)(如 macOS)的項(xiàng)目哭当。Docker 運(yùn)行器也不太適合需要在管道執(zhí)行之間在主機(jī)上存儲(chǔ)文件或文件夾的有狀態(tài)管道

docker run -d \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e DRONE_RPC_PROTO=http \
  -e DRONE_RPC_HOST=192.168.31.112:801 \
  -e DRONE_RPC_SECRET=123456 \
  -e DRONE_RUNNER_CAPACITY=10 \
  -e DRONE_RUNNER_NAME=${HOSTNAME} \
  -p 4002:3000 \
  --restart always \
  --name runner-docker \
  drone/drone-runner-docker:1
  • DRONE_RPC_HOST:上面啟動(dòng)server時(shí)配置的host
  • DRONE_RPC_SECRET:跟server配置的要保持一致
  • DRONE_RUNNER_CAPACITY:可以同時(shí)執(zhí)行的任務(wù)數(shù)
  • DRONE_RUNNER_NAME:一般設(shè)置為主機(jī)名
image.png

6. 配置.drone.yml運(yùn)行Pipeline

要使用 Drone 只需在項(xiàng)目根創(chuàng)建一個(gè) .drone.yml 文件即可,這個(gè)是 Drone 構(gòu)建腳本的配置文件冗澈,它隨項(xiàng)目一塊進(jìn)行版本管理钦勘,開發(fā)者不需要額外再去維護(hù)一個(gè)配置腳本。其實(shí)現(xiàn)代 CI 程序都是這么做了, 包括 gitlab-ci, jenkinsfile, tekton等渗柿。


image.png

image.png

源碼地址: https://gitee.com/devops-samples/drone-examples

7 . Drone的場(chǎng)景使用

1) 啟動(dòng)新build

支持選擇git 分支个盆, 以及設(shè)置啟動(dòng)參數(shù)脖岛, 這個(gè)功能在大部分構(gòu)建平臺(tái)都有體現(xiàn)


image.png

2) 同步-SYNC

點(diǎn)擊 SYNC 按鈕朵栖,就會(huì)和代碼倉庫進(jìn)行同步颊亮,如果有倉庫刪除或者增加,就會(huì)同步進(jìn)行更新


image.png

3) 定時(shí)觸發(fā)器-Cron jobs

image.png

幾乎所有的構(gòu)建平臺(tái)都會(huì)提供類似的觸發(fā)器陨溅,比如 git web hook, 時(shí)間定時(shí)器等


image.png

4) 加密參數(shù) - Secrets

流水線執(zhí)行過程中會(huì)涉及很多和服務(wù)交互终惑,所以需要提供各種憑證,比如密碼门扇,token 等雹有,所以Secrets也是流水線中的一個(gè)重要元素。


image.png

image.png

5) 版本部署/回滾 -Promote/Rollback

僅僅完成制品的構(gòu)建是遠(yuǎn)遠(yuǎn)不夠的臼寄,Drone也考慮到了部署和回滾的問題霸奕,所以提供了promote/rollbakc事件, 針對(duì) 某個(gè)成功版本進(jìn)行部署或者回滾,和條件判斷when一起使用吉拳。


image.png
image.png

6)步驟間順序依賴- 有向無環(huán)圖

Drone 通過 **kind:pipeline **對(duì)步驟進(jìn)行組織质帅,支持并行流水線,同時(shí)通過 **depends_on **對(duì)流水線的先后順序進(jìn)行限制留攒, 如圖所示煤惩。


image.png

image.png

7 )上下游流水線間調(diào)用

image.png

參考

總結(jié)

  1. Drone與代碼管理平臺(tái)(e.g. gitlab, gogs)是強(qiáng)綁定關(guān)系,如果代碼管理平臺(tái)不能訪問炼邀,Drone就無法登錄魄揉,這個(gè)在Drone-Server的啟動(dòng)命令就可以看出來。
  2. Drone 學(xué)習(xí)成本低拭宁,語法簡(jiǎn)潔洛退,如果你接觸過其他構(gòu)建平臺(tái),特別是云原生的杰标,基于YAML進(jìn)行編排的CI引擎兵怯,都是類似的。
  3. Drone是GitOps實(shí)踐額典型工具在旱,通過和代碼倉庫進(jìn)行深度融合摇零,做到了隨時(shí)提交,隨時(shí)構(gòu)建桶蝎,很多能力都是通過容器插件實(shí)現(xiàn)驻仅,這也是有別于傳統(tǒng)構(gòu)建系統(tǒng)的重要特點(diǎn)
  4. 從能力上,Drone本身就是輕量級(jí)的登渣, 所以相對(duì)比較單一噪服,可能無法滿足復(fù)雜的業(yè)務(wù)場(chǎng)景。目前Drone已經(jīng)被收購胜茧,成為harness**平臺(tái)的重要一部分粘优, **在該平臺(tái)上也可以看到Drone的身影仇味。



Harness CDaaS平臺(tái)為應(yīng)用程序交付提供了一種更加無縫的方法,該方法可以自動(dòng)檢測(cè)GitHub雹顺,Bamboo丹墨,Jenkins,Artifactory或Nexus存儲(chǔ)庫或任何Git存儲(chǔ)庫中的新版本嬉愧。一旦DevOps團(tuán)隊(duì)收到警報(bào)贩挣,他們可以使用圖形工具不僅使用YAML文件自動(dòng)化構(gòu)建管道的過程,還可以利用機(jī)器學(xué)習(xí)算法評(píng)估部署的質(zhì)量没酣,然后在必要時(shí)通過從工具訪問數(shù)據(jù)自動(dòng)回滾例如AppDynamics王财,New Relic,Splunk裕便,Elastic Search和Sumologic绒净,并添加了Habib。

image.png

image.png

image.png

<img src=https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b698f953b07d4ccfb29bfa2e13545acd~tplv-k3u1fbpfcp-zoom-1.image width=500 height=350 />

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末偿衰,一起剝皮案震驚了整個(gè)濱河市挂疆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哎垦,老刑警劉巖囱嫩,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異漏设,居然都是意外死亡墨闲,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門郑口,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸳碧,“玉大人,你說我怎么就攤上這事犬性≌袄耄” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵乒裆,是天一觀的道長(zhǎng)套利。 經(jīng)常有香客問我,道長(zhǎng)鹤耍,這世上最難降的妖魔是什么肉迫? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮稿黄,結(jié)果婚禮上喊衫,老公的妹妹穿的比我還像新娘。我一直安慰自己杆怕,他們只是感情好族购,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布壳贪。 她就那樣靜靜地躺著,像睡著了一般寝杖。 火紅的嫁衣襯著肌膚如雪违施。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天朝墩,我揣著相機(jī)與錄音醉拓,去河邊找鬼伟姐。 笑死收苏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的愤兵。 我是一名探鬼主播鹿霸,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼秆乳!你這毒婦竟也來了懦鼠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤屹堰,失蹤者是張志新(化名)和其女友劉穎肛冶,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扯键,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡睦袖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了荣刑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片馅笙。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖厉亏,靈堂內(nèi)的尸體忽然破棺而出董习,到底是詐尸還是另有隱情,我是刑警寧澤爱只,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布皿淋,位于F島的核電站,受9級(jí)特大地震影響恬试,放射性物質(zhì)發(fā)生泄漏窝趣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一忘渔、第九天 我趴在偏房一處隱蔽的房頂上張望高帖。 院中可真熱鬧,春花似錦畦粮、人聲如沸散址。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽预麸。三九已至瞪浸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吏祸,已是汗流浹背对蒲。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贡翘,地道東北人蹈矮。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像鸣驱,于是被迫代替她去往敵國和親泛鸟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容