推薦文章
- 【kubernetes】新版helm3的三大概念+快速指南+自定義charts模板
- 【容器】docker-comopse安裝+案例練習(xí)
- 【GitLab】使用Docker和Docker-Compose部署-個(gè)人、私有代碼倉(cāng)庫(kù)
- 【kubevirt】VirtualMachineInstanceReplicaSet(vmis)-擴(kuò)縮容-彈性伸縮
- 【openstack】cloudkitty組件,入門(mén)級(jí)安裝(快速)
- 【openstack】Designate組件,入門(mén)級(jí)安裝(快速)
- 【Istio是什么?】 還不知道你就out了,一文40分鐘快速理解
- 【Istio實(shí)際操作篇】Istio入門(mén)10分鐘快速安裝
- 【代理是什么?】nginx快速入門(mén)+反向代理hexo個(gè)人博客
- 【還不會(huì)搭建博客嗎?】centos7系統(tǒng)部署hexo博客新手入門(mén)-進(jìn)階,看這一篇就夠了
- 【沒(méi)接觸過(guò)kubevirt?】15分鐘快速入門(mén)kubevirt
概述
drone是一個(gè)持續(xù)集成化工具,能夠使用強(qiáng)大的云原生管道引擎自動(dòng)化他們的構(gòu)建、測(cè)試和發(fā)布工作流;
簡(jiǎn)單來(lái)說(shuō):類(lèi)似寫(xiě)shell腳本,只是腳本內(nèi)容不一樣;
其他持續(xù)集成工具,如:jenkins、gitlab-cicd;
環(huán)境準(zhǔn)備
- linux系統(tǒng)
- docker
動(dòng)手操作
容器部署gitlab
gitlab詳細(xì)安裝步驟,點(diǎn)擊這里;本次使用的gitlab-ce是docker hub倉(cāng)庫(kù),2022年5月最新版:

- 如果hostname沒(méi)做DNS域名解析,請(qǐng)使用IP地址(不寫(xiě)端口,默認(rèn)80)。例:192.168.200.30
注意:hostname不能包含端口,否則gitlab啟動(dòng)不起來(lái);
export GITLAB_HOME=/mydata/gitlab
docker run --detach \
--hostname "192.168.200.30" \
--publish 1443:443 --publish 80:80 --publish 1022:22 \
--name gitlab \
--restart always \
--volume $GITLAB_HOME/config:/etc/gitlab \
--volume $GITLAB_HOME/logs:/var/log/gitlab \
--volume $GITLAB_HOME/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
- 報(bào)錯(cuò)信息(后面的步驟):下圖因?yàn)?code>gitlab的hostname填寫(xiě)的域名(gitlab.admin.com),結(jié)果Drone流水線(xiàn)clone(克?。┐a時(shí)連接報(bào)錯(cuò):
image.png
上圖的問(wèn)題除了修改gitlab主機(jī)名(hostname)之外,還可以
修改drone-runner默認(rèn)clone(克?。┑刂方鉀Q。如下代碼(這里看不懂沒(méi)關(guān)系,請(qǐng)繼續(xù)往下看后面會(huì)解釋):
kind: pipeline
type: docker
name: default
clone:
disable: true #禁用默認(rèn)克隆
steps:
- name: clone-test
image: alpine/git
pull: if-not-exists # 如果在本地緩存中找不到圖像,則僅拉取圖像
commands:
- git clone http://192.168.200.30/root/test.git #自定義克隆地址
- git version
- name: greeting
image: alpine
commands:
- echo hello
- echo world
- 瀏覽器訪(fǎng)問(wèn)gitlab(
http://192.168.200.30),gitlab默認(rèn)設(shè)置了root用戶(hù)密碼;修改默認(rèn)root用戶(hù)密碼,點(diǎn)擊這里:
[root@master drone]# docker exec -it gitlab bash
root@192:/# cat /etc/gitlab/initial_root_password |grep Password:
Password: RUb+s6cnRsJk7S7Mg785nHewbwzoL4Cblfk/nnGKWZA=
- 創(chuàng)建 OAuth 應(yīng)用程序( Application)
創(chuàng)建一個(gè) GitLab OAuth 應(yīng)用程序。Consumer Key 和 Consumer Secret用于授權(quán)Drone訪(fǎng)問(wèn) GitLab 資源。
注意:這里我提前在gitlab創(chuàng)建好了test倉(cāng)庫(kù)(空倉(cāng)庫(kù)),用于我們下面的演示;
image.png
-
Application URL地址是
Drone服務(wù)地址后必須跟一個(gè)/login。例:http://192.168.200.30:82/login
image.png -
Application生成的Consumer ID和 Consumer Secret,下面我們會(huì)用于安裝Drone,gitlab授權(quán)drone:
image.png
容器部署Drone
Drone部署需要安裝docker-server(Drone 與流行的源代碼控制管理提供商無(wú)縫集成) WEB界面和docker-runner守護(hù)進(jìn)程執(zhí)行器
- 創(chuàng)建一個(gè)
共享密鑰,用于drone-runner和drone-server之間的通信:
[root@master drone]# openssl rand -hex 16
8172cd9155d16593d4f6a445b70e2d6e
- 部署drone-server:
docker run \
--volume=/var/lib/drone:/data \
--env=DRONE_GITLAB_SERVER=http://192.168.200.30/ \ #GitLab 服務(wù)器 url,默認(rèn)https://github.com
--env=DRONE_GITLAB_CLIENT_ID=56ef91f20270b6f945f722e2b93e2e9eacad65f0b5edcad997d4842df47cc5a8 \ #GitLab oauth 客戶(hù)端 ID(必填項(xiàng))
--env=DRONE_GITLAB_CLIENT_SECRET=159ab07250d7b02f171408a1a6e21f506295b33b5174c211b7dcb59b548e05a3 \ #GitLab oauth 客戶(hù)端密碼 (必填項(xiàng))
--env=DRONE_RPC_SECRET=8172cd9155d16593d4f6a445b70e2d6e\ #驗(yàn)證服務(wù)器和運(yùn)行器之間的 rpc 連接(drone-server和drone-runner連接時(shí)必填項(xiàng))
--env=DRONE_SERVER_HOST=192.168.200.30:82 \ #供drone服務(wù)主機(jī)名或 IP 地址 (必填項(xiàng))
--env=DRONE_SERVER_PROTO=http \ #drone服務(wù)使用的協(xié)議 (必填項(xiàng))
--publish=82:80 \
--publish=443:443 \
--restart=always \
--detach=true \
--name=drone \
--env=DRONE_USER_CREATE=username:root,admin:true \ #Drone管理員用戶(hù)創(chuàng)建
drone/drone:2
* drone啟動(dòng)參數(shù)很多,下面解釋下:
+ DRONE_GITLAB_SERVER: GitLab 服務(wù)器 url,默認(rèn)https://github.com
+ DRONE_GITLAB_CLIENT_ID: GitLab oauth 客戶(hù)端 ID(必填項(xiàng))
+ DRONE_GITLAB_CLIENT_SECRET: GitLab oauth 客戶(hù)端密碼 (必填項(xiàng))
+ DRONE_RPC_SECRET: 驗(yàn)證服務(wù)器和運(yùn)行器之間的 rpc 連接(drone-server和drone-runner連接時(shí)必填項(xiàng))
+ DRONE_SERVER_HOST: 提供drone服務(wù)主機(jī)名或 IP 地址 (必填項(xiàng))
+ DRONE_SERVER_PROTO: drone服務(wù)使用的協(xié)議 (必填項(xiàng))
+ DRONE_USER_CREATE: Drone管理員用戶(hù)創(chuàng)建
- 部署drone-runner
docker run --detach \
--volume=/var/run/docker.sock:/var/run/docker.sock \
--env=DRONE_RPC_PROTO=http \ #用于連接 Drone 服務(wù)器的協(xié)議
--env=DRONE_RPC_HOST=192.168.200.30:82 \ #提供 Drone 服務(wù)器的主機(jī)名
--env=DRONE_RPC_SECRET=8172cd9155d16593d4f6a445b70e2d6e \ #用于向 Drone 服務(wù)器進(jìn)行身份驗(yàn)證的共享密鑰
--env=DRONE_RUNNER_CAPACITY=2 \ #限制運(yùn)行器可以執(zhí)行的并發(fā)管道的數(shù)量
--env=DRONE_RUNNER_NAME=test-runner \ #設(shè)置runner的名字
--publish=3000:3000 \
--restart=always \
--name=runner \
drone/drone-runner-docker:1
* drone-runner啟動(dòng)參數(shù)很多,下面解釋下:
+ DRONE_RPC_PROTO: 用于連接 Drone 服務(wù)器的協(xié)議
+ DRONE_RPC_HOST: 提供 Drone 服務(wù)器的主機(jī)名
+ DRONE_RPC_SECRET: 用于向 Drone 服務(wù)器進(jìn)行身份驗(yàn)證的共享密鑰
+ DRONE_RUNNER_CAPACITY: 限制運(yùn)行器可以執(zhí)行的并發(fā)管道的數(shù)量
+ DRONE_RUNNER_NAME: 設(shè)置runner的名字
- 驗(yàn)證drone-runner是否連接上drone-server(
successfully pinged the remote server):
[root@master drone]# docker logs -ft runner
2022-05-10T05:21:02.637256271Z time="2022-05-10T05:21:02Z" level=info msg="starting the server" addr=":3000"
2022-05-10T05:21:02.640121666Z time="2022-05-10T05:21:02Z" level=info msg="successfully pinged the remote server"
2022-05-10T05:21:02.640157924Z time="2022-05-10T05:21:02Z" level=info msg="polling the remote server" arch=amd64 capacity=2 endpoint="http://192.168.200.30:82" kind=pipeline os=linux type=docker
-
瀏覽器訪(fǎng)問(wèn)drone-server Web界面(
http://192.168.200.30:82),點(diǎn)擊繼續(xù):
image.png -
點(diǎn)解繼續(xù)后,會(huì)跳轉(zhuǎn)到這個(gè)Application URL地址(
http://192.168.200.30:82/login)gitlab給Drone(Application)授權(quán):
image.png -
注冊(cè)drone用戶(hù):
image.png 點(diǎn)擊Drone右上角SYNC(同步),進(jìn)入我們的test倉(cāng)庫(kù)下激活存儲(chǔ)庫(kù),發(fā)現(xiàn)錯(cuò)誤(這個(gè)錯(cuò)誤我們需要
打開(kāi)gitlab的出入站請(qǐng)求)
[圖片上傳失敗...(image-568a7c-1652355010681)]-
回到gitlab,點(diǎn)擊
Admin-->settings:
image.png -
打開(kāi)出站請(qǐng)求,并
打開(kāi)允許web hooks(掛鉤) 和服務(wù)向本地網(wǎng)絡(luò)發(fā)出請(qǐng)求:
image.png
- 回到drone,test倉(cāng)庫(kù)再一次激活(成功),并
開(kāi)啟Trusted特權(quán)容器(docker-runner在使用docker執(zhí)行器時(shí),類(lèi)似使用root權(quán)限)
注意:這里還有一個(gè)問(wèn)題,如果出現(xiàn)沒(méi)有Trusted選項(xiàng)的情況,需要在啟動(dòng)運(yùn)行drone-server服務(wù)是添加:--env=DRONE_USER_CREATE=username:root,admin:true

流水線(xiàn)腳本編寫(xiě).drone.yml
-
在gitlab依次點(diǎn)擊,創(chuàng)建
.drone.yml文件:
image.png .drone.yml文件內(nèi)容(寫(xiě)的比較簡(jiǎn)單,
主要了解流水線(xiàn)操作流程),如下:
kind: pipeline
type: docker
name: default
steps:
- name: greeting
image: alpine
commands:
- echo hello
- echo world
.drone.yml文件屬性解釋?zhuān)?/p>
- kind:定義了對(duì)象的種類(lèi),此示例定義了一個(gè)pipeline(管道)對(duì)象;
- type:定義pipeline(管道)的類(lèi)型,此示例定義了一個(gè) Docker 管道,其中每個(gè)管道步驟都在 Docker 容器內(nèi)執(zhí)行;
- name:定義了pipeline(管道)的名稱(chēng);
- steps:定義了一系列串行執(zhí)行的pipeline(管道)步驟,出現(xiàn)一個(gè)步驟失敗,立即退出;
* name:定義管道步驟的名稱(chēng);
* image:定義了一個(gè)執(zhí)行 shell 命令的 Docker 鏡像;
* commands:在docker容器內(nèi)執(zhí)行shell命令;
流水線(xiàn)觸發(fā)
-
在自己項(xiàng)目下(test)點(diǎn)擊:
settings-->webhooks:
image.png -
這里不需要再次創(chuàng)建webhooks(掛鉤),Drone連接后會(huì)
自動(dòng)創(chuàng)建一個(gè)默認(rèn)的webhooks:
image.png -
回到drone會(huì)看到,我們編寫(xiě)的流水線(xiàn)文件被
自動(dòng)觸發(fā)(之后gitlab倉(cāng)庫(kù)代碼更新或上傳新代碼都會(huì)自動(dòng)觸發(fā)).drone.yml:
image.png -
點(diǎn)擊我們的流水線(xiàn),可以查看流水線(xiàn)
詳細(xì)步驟、步驟的狀態(tài)和步驟的logs:
image.png
總結(jié)+遇到的問(wèn)題
我這里的.drone.yml文件寫(xiě)的比較簡(jiǎn)單,主要時(shí)了解過(guò)程入門(mén)。如果需要練習(xí)可以試著部署自己的項(xiàng)目;
最后請(qǐng)各位注意三個(gè)我在學(xué)習(xí)gitlab+drone遇到的問(wèn)題:
下列小括號(hào)‘()’中是解決方法;
- clone克隆地址連接不上(修改默認(rèn)clone克?。?/li>
- 沒(méi)有Trusted選項(xiàng),啟動(dòng)drone-server時(shí)添加(
--env=DRONE_USER_CREATE=username:root,admin:true) - .drone.yml文件中sed命令報(bào)錯(cuò):
sed: -e expression #1, char 34: unknown option to s(改成感嘆號(hào)!或者| 分割,如:sed -i 's! 源內(nèi)容 ! 替換內(nèi)容 !g' )
推薦文章
- 【kubernetes】新版helm3的三大概念+快速指南+自定義charts模板
- 【容器】docker-comopse安裝+案例練習(xí)
- 【GitLab】使用Docker和Docker-Compose部署-個(gè)人、私有代碼倉(cāng)庫(kù)
- 【kubevirt】VirtualMachineInstanceReplicaSet(vmis)-擴(kuò)縮容-彈性伸縮
- 【openstack】cloudkitty組件,入門(mén)級(jí)安裝(快速)
- 【openstack】Designate組件,入門(mén)級(jí)安裝(快速)
- 【Istio是什么?】 還不知道你就out了,一文40分鐘快速理解
- 【Istio實(shí)際操作篇】Istio入門(mén)10分鐘快速安裝
- 【代理是什么?】nginx快速入門(mén)+反向代理hexo個(gè)人博客
- 【還不會(huì)搭建博客嗎?】centos7系統(tǒng)部署hexo博客新手入門(mén)-進(jìn)階,看這一篇就夠了
- 【沒(méi)接觸過(guò)kubevirt?】15分鐘快速入門(mén)kubevirt













