gitlab--在 k8s 里通過 helm 部署 runner、使用緩存 cache、使用制品 artifacts
安裝 helm
鏈接:http://www.rzrgm.cn/zouzou-busy/p/16134885.html
配置chart 存儲庫
# 添加 chart 存儲庫
[root@master1 ~]# helm repo add gitlab https://charts.gitlab.io
"gitlab" has been added to your repositories
# 查看存儲庫
[root@master1 ~]# helm repo list
NAME URL
gitlab https://charts.gitlab.io
查看可以安裝的 gitlab-runner chart
[root@master1 ~]# helm search repo -l gitlab/gitlab-runner

我的 gitlab 的版本是 15.2,所以 gitlab-runner 的版本我安裝 0.43.0

更新配置信息
獲取對應版本的 chart 包
# 下載 0.43.0 的 chart 包
[root@master1 ~]# helm fetch gitlab/gitlab-runner --version=0.43.0
# 下載完后查看
[root@master1 ~]# ls
gitlab-runner-0.43.0.tgz
解壓,進入解壓后的目錄
# 解壓
[root@master1 ~]# tar -zxvf gitlab-runner-0.43.0.tgz
# 進入到解壓的目錄
[root@master1 ~]# cd gitlab-runner
# 查看文件
[root@master1 gitlab-runner]# ls
CHANGELOG.md Chart.yaml CONTRIBUTING.md LICENSE Makefile NOTICE README.md templates values.yaml
主要的一個文件是 values.yaml 文件,各個字段配置說明
image: #指定gitlab-runner鏡像
imagePullPolicy: #鏡像拉取策略
gitlabUrl: #gitlab地址
runnerRegistrationToken: #gitlab-runner注冊用到的tocken
concurrent: #設置同行運行的runner個數
checkInterval: #定義檢查gitlab新構建的頻率
rbac: #角色設置
create: true
clusterWideAccess: true
metrics: #prometheus metrics數據暴露
enabled: true
runners: #runners配置
image:
imagePullSecrets:
imagePullPolicy:
locked: #是否設置為特定的runner
tags: #設置標簽
privileged: true
secret:
namespace:
cache: {}
builds: #構建資源限制
cpuLimit: 200m
memoryLimit: 256Mi
cpuRequests: 100m
memoryRequests: 128Mi
services: {}
helpers: {}
serviceAccountName:
nodeSelector: #worker調度選擇器
resources: {} #資源限制
affinity: {} #節點親和性
nodeSelector: {} #節點調度選擇器
tolerations: [] #污點容忍度
envVars: #環境變量設置
- name: RUNNER_EXECUTOR
value: kubernetes
我們需要修改 values.yaml 文件,修改的地方如下




修改完上面的后保存,也可以根據自己的需求修改更多的內容
部署 gitlab-runner
我們創建一個 gitlab-runner 的 ns,把資源創建在這個下面
# 創建 ns
[root@master1 gitlab-runner]# kubectl create ns gitlab-runner
namespace/gitlab-runner created
使用 helm 創建資源
# 創建資源,要和 gitlab-runner 目錄同級
[root@master1 ~]# helm install gitlab-runner --namespace gitlab-runner ./gitlab-runner
NAME: gitlab-runner
LAST DEPLOYED: Fri Oct 7 15:39:19 2022
NAMESPACE: gitlab-runner
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Your GitLab Runner should now be registered against the GitLab instance reachable at: "http://10.6.215.70/"
Runner namespace "gitlab-runner" was found in runners.config template
創建完成后查看 pod 和 deployment,可以看到只有一個 pod 在運行
[root@master1 ~]# kubectl get pod,deploy,svc -n gitlab-runner
NAME READY STATUS RESTARTS AGE
pod/gitlab-runner-bcbbdfbc5-q99jp 1/1 Running 0 75s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/gitlab-runner 1/1 1 1 75s
在 gitlab 里查看 runner

如果我們更新了 values.yaml 文件,只需要使用下面命令更新一下就可以了
# 更新
helm upgrade gitlab-runner --namespace gitlab-runner ./gitlab-runner
運行流水線進行測試
.gitlab-ci.yaml 文件內容如下
default:
tags:
- kubernetes # 使用 k8s 的 runner
stages:
- build
- deploy
build:
stage: build
script:
- echo "我是 build"
- sleep 60
deploy:
stage: deploy
script:
- echo "我是 deploy"
- sleep 60
運行流水線,查看 build 的日志


這時候去集群上,查看 gitlab-runner 命名空間下的 pod
# pod/runner-sepxytoo-project-5-concurrent-0fwrvf 在創建
[root@master1 ~]# kubectl get pod,deploy,svc -n gitlab-runner
NAME READY STATUS RESTARTS AGE
pod/gitlab-runner-bcbbdfbc5-q99jp 1/1 Running 0 12m
pod/runner-sepxytoo-project-5-concurrent-0fwrvf 0/2 PodInitializing 0 25s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/gitlab-runner 1/1 1 1 12m
# 創建成功了
[root@master1 ~]# kubectl get pod,deploy,svc -n gitlab-runner
NAME READY STATUS RESTARTS AGE
pod/gitlab-runner-bcbbdfbc5-q99jp 1/1 Running 0 12m
pod/runner-sepxytoo-project-5-concurrent-0fwrvf 2/2 Running 0 45s
當 build 的 job 運行完成之后,我們在去查看 pod,已經被銷毀了
# job 運行完后,pod 銷毀了
[root@master1 ~]# kubectl get pod,deploy,svc -n gitlab-runner
NAME READY STATUS RESTARTS AGE
pod/gitlab-runner-bcbbdfbc5-q99jp 1/1 Running 0 13m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/gitlab-runner 1/1 1 1 13m
deploy 的日志

deploy 的 job 運行完成之后,也就銷毀了
并發運行
我們在 value.yaml 里設置的并發數是 10,那我們寫個并發的流水線來看看
default:
tags:
- kubernetes
stages:
- build
- deploy
build:
stage: build
script:
- echo "我是 build"
- sleep 60
build1:
stage: build
script:
- echo "我是 build1"
- sleep 60
build2:
stage: build
script:
- echo "我是 build2"
- sleep 60
deploy:
stage: deploy
script:
- echo "我是 deploy"
- sleep 60
deploy1:
stage: deploy
script:
- echo "我是 deploy1"
- sleep 60
運行流水線

這時候查看 pod
# 可以看到,每個 job 都起了一個 pod 去運行
[root@master1 ~]# kubectl get pod,deploy,svc -n gitlab-runner
NAME READY STATUS RESTARTS AGE
pod/gitlab-runner-5f85f6597d-wbz79 1/1 Running 0 10m
pod/runner-y-xdj4y-project-5-concurrent-0mf56k 2/2 Running 0 38s
pod/runner-y-xdj4y-project-5-concurrent-1mhgdt 2/2 Running 0 37s
pod/runner-y-xdj4y-project-5-concurrent-2lsn5v 2/2 Running 0 37s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/gitlab-runner 1/1 1 1 27m
等 job 運行完成之后就會刪除對應的 pod
使用 k8s 的 runner 使用緩存
在 k8s 里的 runner 使用緩存默認是不行的,如下
317字節
default:
tags:
- kubernetes # 使用 k8s 的 runner
stages:
- build
- deploy
build:
stage: build
cache: # 使用緩存
paths:
- abc.txt
script:
- echo "我是 build"
- touch abc.txt
deploy:
stage: deploy
cache: # 使用緩存
paths:
- abc.txt
script:
- echo "我是 deploy"
- ls


使用制品 artifacts
default:
tags:
- kubernetes # 使用 k8s 的 runner
stages:
- build
- deploy
build:
stage: build
script:
- echo "我是 build"
- touch abc.txt
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_REF_NAME" # 創建制品存檔的名稱
when: on_success # 制品何時進行收集
expire_in: "1 week" # 制品的過期時間,過期自動清理
paths: # 定義要收集的制品文件或者目錄信息
- abc.txt
deploy:
stage: deploy
script:
- echo "我是 deploy"
- ls
dependencies: # 只使用 build 階段產生的制品,不寫 dependencies 默認會下載所有階段產生的制品
- build
查看 build 的日志

查看 deploy 的日志

制品我們也可以使用制品庫:http://www.rzrgm.cn/zouzou-busy/p/16759180.html

浙公網安備 33010602011771號