gitlab--在 k8s 里通过 helm 部署 runner、使用缓存 cache、使用制品 artifacts

发布时间 2023-09-29 10:51:12作者: 邹邹很busy。

安装 helm

链接:https://www.cnblogs.com/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 的日志

制品我们也可以使用制品库:https://www.cnblogs.com/zouzou-busy/p/16759180.html