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

- 如果hostname沒做DNS域名解析,請使用IP地址(不寫端口,默認(rèn)80)。例:192.168.200.30
注意:hostname不能包含端口,否則gitlab啟動不起來;
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)錯信息(后面的步驟):下圖因?yàn)?code>gitlab的hostname填寫的域名(gitlab.admin.com),結(jié)果Drone流水線clone(克隆)代碼時連接報(bào)錯:
image.png
上圖的問題除了修改gitlab主機(jī)名(hostname)之外,還可以
修改drone-runner默認(rèn)clone(克?。┑刂方鉀Q。如下代碼(這里看不懂沒關(guān)系,請繼續(xù)往下看后面會解釋):
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
- 瀏覽器訪問gitlab(
http://192.168.200.30),gitlab默認(rèn)設(shè)置了root用戶密碼;修改默認(rèn)root用戶密碼,點(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)建一個 GitLab OAuth 應(yīng)用程序。Consumer Key 和 Consumer Secret用于授權(quán)Drone訪問 GitLab 資源。
注意:這里我提前在gitlab創(chuàng)建好了test倉庫(空倉庫),用于我們下面的演示;
image.png
-
Application URL地址是
Drone服務(wù)地址后必須跟一個/login。例:http://192.168.200.30:82/login
image.png -
Application生成的Consumer ID和 Consumer Secret,下面我們會用于安裝Drone,gitlab授權(quán)drone:
image.png
容器部署Drone
Drone部署需要安裝docker-server(Drone 與流行的源代碼控制管理提供商無縫集成) WEB界面和docker-runner守護(hù)進(jìn)程執(zhí)行器
- 創(chuàng)建一個
共享密鑰,用于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 客戶端 ID(必填項(xiàng))
--env=DRONE_GITLAB_CLIENT_SECRET=159ab07250d7b02f171408a1a6e21f506295b33b5174c211b7dcb59b548e05a3 \ #GitLab oauth 客戶端密碼 (必填項(xiàng))
--env=DRONE_RPC_SECRET=8172cd9155d16593d4f6a445b70e2d6e\ #驗(yàn)證服務(wù)器和運(yùn)行器之間的 rpc 連接(drone-server和drone-runner連接時必填項(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管理員用戶創(chuàng)建
drone/drone:2
* drone啟動參數(shù)很多,下面解釋下:
+ DRONE_GITLAB_SERVER: GitLab 服務(wù)器 url,默認(rèn)https://github.com
+ DRONE_GITLAB_CLIENT_ID: GitLab oauth 客戶端 ID(必填項(xiàng))
+ DRONE_GITLAB_CLIENT_SECRET: GitLab oauth 客戶端密碼 (必填項(xiàng))
+ DRONE_RPC_SECRET: 驗(yàn)證服務(wù)器和運(yùn)行器之間的 rpc 連接(drone-server和drone-runner連接時必填項(xiàng))
+ DRONE_SERVER_HOST: 提供drone服務(wù)主機(jī)名或 IP 地址 (必填項(xiàng))
+ DRONE_SERVER_PROTO: drone服務(wù)使用的協(xié)議 (必填項(xiàng))
+ DRONE_USER_CREATE: Drone管理員用戶創(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啟動參數(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
-
瀏覽器訪問drone-server Web界面(
http://192.168.200.30:82),點(diǎn)擊繼續(xù):
image.png -
點(diǎn)解繼續(xù)后,會跳轉(zhuǎn)到這個Application URL地址(
http://192.168.200.30:82/login)gitlab給Drone(Application)授權(quán):
image.png -
注冊drone用戶:
image.png 點(diǎn)擊Drone右上角SYNC(同步),進(jìn)入我們的test倉庫下激活存儲庫,發(fā)現(xiàn)錯誤(這個錯誤我們需要
打開gitlab的出入站請求)
[圖片上傳失敗...(image-568a7c-1652355010681)]-
回到gitlab,點(diǎn)擊
Admin-->settings:
image.png -
打開出站請求,并
打開允許web hooks(掛鉤) 和服務(wù)向本地網(wǎng)絡(luò)發(fā)出請求:
image.png
- 回到drone,test倉庫再一次激活(成功),并
開啟Trusted特權(quán)容器(docker-runner在使用docker執(zhí)行器時,類似使用root權(quán)限)
注意:這里還有一個問題,如果出現(xiàn)沒有Trusted選項(xiàng)的情況,需要在啟動運(yùn)行drone-server服務(wù)是添加:--env=DRONE_USER_CREATE=username:root,admin:true

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













