歡迎訪問我的GitHub
https://github.com/zq2599/blog_demos
內容:所有原創(chuàng)文章分類匯總及配套源碼,涉及Java、Docker稽屏、Kubernetes欠动、DevOPS等昼窗;
關于GitLab CI
如下圖所示,開發(fā)者將代碼提交到GitLab后岖常,可以觸發(fā)CI腳本在GitLab Runner上執(zhí)行髓绽,通過編寫CI腳本我們可以完成很多使用的功能:編譯、構建叽赊、生成docker鏡像恋沃、推送到私有倉庫等:
本次實戰(zhàn)內容
今天咱們會一起完成以下操作:
- 部署minio,pipeline腳本中的cache功能由minio來實現(xiàn)必指;
- 配置和部署GitLab Runner囊咏;
- 編寫和運行pipeline腳本;
環(huán)境和版本信息
本次實戰(zhàn)涉及到多個服務取劫,下面給出它們的版本信息供您參考:
- GitLab:Community Edition 13.0.6
- GilLab Runner:13.1.0
- kubernetes:1.15.3
- Harbor:1.1.3
- Minio:2020-06-18T02:23:35Z
- Helm:2.16.1
需要提前準備好的服務
以下服務需要您在實戰(zhàn)前提前準備好:
- 部署好GitLab匆笤,參考《群暉DS218+部署GitLab》
- 部署好Harbor,參考《群暉DS218+部署Harbor(1.10.3)》
- 部署好Helm谱邪,參考《部署和體驗Helm(2.16.1版本)》
準備完畢后開始實戰(zhàn)炮捧;
部署minio
minio作為一個獨立的服務部署,我將用docker部署在服務器:<font color="blue">192.168.50.43</font>
- 在宿主機準備兩個目錄惦银,分別存儲minio的配置和文件咆课,執(zhí)行以下命令:
mkdir -p /var/services/homes/zq2599/minio/gitlab_runner \
&& chmod -R 777 /var/services/homes/zq2599/minio/gitlab_runner \
&& mkdir -p /var/services/homes/zq2599/minio/config \
&& chmod -R 777 /var/services/homes/zq2599/minio/config
- 執(zhí)行docker命令創(chuàng)建minio服務末誓,指定服務端口是9000,并且指定了access key(最短三位)和secret key(最短八位):
sudo docker run -p 9000:9000 --name minio \
-d --restart=always \
-e "MINIO_ACCESS_KEY=access" \
-e "MINIO_SECRET_KEY=secret123456" \
-v /var/services/homes/zq2599/minio/gitlab_runner:/gitlab_runner \
-v /var/services/homes/zq2599/minio/config:/root/.minio \
minio/minio server /gitlab_runner
-
瀏覽器訪問书蚪,輸入access key和secret key后登錄成功:
-
如下圖喇澡,點擊紅框中的圖標,創(chuàng)建一個bucket殊校,名為<font color="blue">runner</font>:
- 至此晴玖,minio已備好,接下來在kubernetes環(huán)境部署GitLab Runner为流;
GitLab Runner的類型
從使用者的維度來看呕屎,GitLab Runner的類型分為<font color="blue">shared</font>和<font color="blue">specific</font>兩種:
- 如果您想創(chuàng)建的GitLab Runner給所有GitLab倉庫使用,就要創(chuàng)建<font color="blue">shared</font>類型敬察;
- 如果您的GitLab Runner只用于給某個固定的Gitlab倉庫秀睛,就要創(chuàng)建<font color="blue">specific</font>類型;
今天的實戰(zhàn)莲祸,我們創(chuàng)建的是<font color="red">specific</font>類型蹂安,即先有GitLab代碼倉庫,然后創(chuàng)建該倉庫專用的runner锐帜,所以請您提前準備好GitLab倉庫田盈;
準備GitLab配置信息(specific)
在部署GitLab Runner之前,要準備兩個關鍵的配置信息抹估,以便GitLab Runner啟動后可以順利連接上GitLab:
-
瀏覽器訪問GitLab缠黍,打開用來做CI的代碼倉庫弄兜,點擊Settings -> CI/CD -> Runners -> Expand:
-
如下圖药蜻,紅框1中是<font color="blue">gitlab url</font>,紅框2中是<font color="blue">registration token</font>替饿,記好這兩個參數语泽,稍后會用到:
準備GitLab配置信息(shared)
本次實戰(zhàn)不會創(chuàng)建shared類型的runner,如果您要創(chuàng)建該類型runner视卢,只需按照以下方法準備信息即可踱卵,創(chuàng)建出來的runner就是所有倉庫都能使用的了:
- 以管理員身份登錄GitLab;
-
按照下圖紅框的順序取得<font color="blue">gitlab url</font>和<font color="blue">registration token</font>:
部署RitLab Runner
- 請確保當前可以通過<font color="blue">kubectl</font>命令在kubernetes進行常規(guī)操作据过;
- 創(chuàng)建名為<font color="blue">gitlab-runner</font>的namespace:
kubectl create namespace gitlab-runner
- 創(chuàng)建一個secret惋砂,把minio的access key和secret key存進去,在后面配置cache的時候會用到:
kubectl create secret generic s3access \
--from-literal=accesskey="access" \
--from-literal=secretkey="secret123456" -n gitlab-runner
- 用helm部署GitLab Runner之前绳锅,先把chart的倉庫添加到helm的倉庫列表中:
helm repo add gitlab https://charts.gitlab.io
- 下載GitLab Runner的chart:
helm fetch gitlab/gitlab-runner
- 當前目錄會多出一個文件gitlab-runner-0.18.0.tgz西饵,解壓:
tar -zxvf gitlab-runner-0.18.0.tgz
- 解壓后是名為gitlab-runner的文件夾,內容如下圖所示鳞芙,接下來要修改里面的三個文件:
- 打開values.yaml眷柔,里面有四處需要修改:
- 第一處期虾,找到已被注釋掉的<font color="blue">gitlabUrl</font>參數位置,添加gitlabUrl的配置驯嘱,其值就是前面在GitLab網頁取得的<font color="red">gitlab url</font>參數镶苞,如下圖紅框:
- 第二處,找到已被注釋掉的<font color="blue">runnerRegistrationToken</font>參數位置鞠评,添加<font color="red">runnerRegistrationToken</font>的配置茂蚓,其值就是前面在GitLab網頁取得的<font color="blue">registration token</font>參數,如下圖紅框:
- 找到<font color="blue">rbac</font>的配置剃幌,將<font color="blue">create</font>和<font color="blue">clusterWideAccess</font>的值都改成<font color="red">true</font>(創(chuàng)建RBAC煌贴、創(chuàng)建容器gitlab-bastion用于管理job的容器):
- 設置此GitLab Runner的<font color="blue">tag</font>為<font color="red">k8s</font>,在pipeline腳本中可以通過指定tag為<font color="red">k8s</font>锥忿,這樣pipeline就會在這個Gitlab Runner上允許:
- 找到<font color="blue">cache</font>的配置牛郑,在修改之前,cache的配置如下圖敬鬓,可見值為空內容的大括號淹朋,其余信息全部被注釋了:
- 修改后的<font color="blue">cache</font>配置如下圖,紅框1中原先的大括號已去掉钉答,紅框2中的是去掉了注釋符號础芍,內容不變,紅框3中填寫的是<font color="blue">minio</font>的訪問地址数尿,紅框4中的是去掉了注釋符號仑性,內容不變:
- 上圖紅框4中的<font color="blue">s3CacheInsecure</font>參數等于<font color="blue">false</font>表示對minio的請求為http(如果是true就是https),但實際證明右蹦,<font color="red">當前版本的chart中該配置是無效的</font>诊杆,等到運行時還是會以https協(xié)議訪問,解決此問題的方法是修改templates目錄下的<font color="blue">_cache.tpl</font>文件何陆,打開此文件晨汹,找到下圖紅框中的內容:
-
將上圖紅框中的內容替換成下面紅框中的樣子,即刪除原先的<font color="blue">if判斷和對應的end</font>這兩行贷盲,直接給<font color="red">CACHE_S3_INSECURE</font>賦值:
- 接下來要修改的是<font color="blue">templates/configmap.yaml</font>文件淘这,在這里面將宿主機的docker的sock映射給runner executor,這樣job中的docker命令就會發(fā)到宿主機的docker daemon上巩剖,由宿主機來執(zhí)行铝穷,打開<font color="blue">templates/configmap.yaml</font>,找到下圖位置佳魔,我們要在紅框1和紅框2之間添加一段內容:
- 要在上圖紅框1和紅框2之間添加的內容如下:
cat >>/home/gitlab-runner/.gitlab-runner/config.toml <<EOF
[[runners.kubernetes.volumes.host_path]]
name = "docker"
mount_path = "/var/run/docker.sock"
read_only = true
host_path = "/var/run/docker.sock"
EOF
- 添加上述內容后曙聂,整體效果如下,紅框中就是新增內容:
- 修改完畢吃引,回到<font color="blue">values.yam</font>所在目錄筹陵,執(zhí)行以下命令即可創(chuàng)建GitLab Runner:
helm install \
--name-template gitlab-runner \
-f values.yaml . \
--namespace gitlab-runner
- 檢查pod是否正常:
- 看pod日志也并未發(fā)現(xiàn)異常:
- 回到GitLab的runner頁面刽锤,可見新增一個runner:
至此,整個GitLab CI環(huán)境已部署完畢朦佩,接下來簡單的驗證環(huán)境是否OK并思;
驗證
- 在GitLab倉庫中,增加名為<font color="blue">.gitlab-ci.yml</font>的文件语稠,內容如下:
# 設置執(zhí)行鏡像
image: busybox:latest
# 整個pipeline有兩個stage
stages:
- build
- test
# 定義全局緩存宋彼,緩存的key來自分支信息,緩存位置是vendor文件夾
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- vendor/
before_script:
- echo "Before script section"
after_script:
- echo "After script section"
build1:
stage: build
tags:
- k8s
script:
- echo "將內容寫入緩存"
- echo "build" > vendor/hello.txt
test1:
stage: test
script:
- echo "從緩存讀取內容"
- cat vendor/hello.txt
- 提交上述腳本到GitLab仙畦,如下圖输涕,可見pipeline會被觸發(fā),狀態(tài)為pending是因為正在等待runner創(chuàng)建executor pod:
- 稍后就會執(zhí)行成功慨畸,點開看結果:
- 點開<font color="blue">build1</font>的圖標莱坎,可見此job的輸出信息:
- 點開<font color="blue">test1</font>的圖標,可見對應的控制臺輸出寸士,上一個job寫入的數據被成功讀乳苁病:
至此,GitLab Runner已經成功在kubernetes環(huán)境部署和運行弱卡,接下來的文章乃正,我們會一起實戰(zhàn)將SpringBoot應用構建成docker鏡像并推送到Harbor;
你不孤單婶博,欣宸原創(chuàng)一路相伴
歡迎關注公眾號:程序員欣宸
微信搜索「程序員欣宸」瓮具,我是欣宸,期待與您一同暢游Java世界...
https://github.com/zq2599/blog_demos