GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab : 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。
更多关于极狐GitLab :https://gitlab.cn 或者 DevOps 的最佳实践,可以关注文末的极狐GitLab 公众号。
学习极狐GitLab 的相关资料:
- 极狐GitLab 官网:https://gitlab.cn
- 极狐GitLab 官网文档:https://docs.gitlab.cn
- 极狐GitLab 论坛:https://forum.gitlab.cn/
- 极狐GitLab 安装配置:https://gitlab.cn/install
- 极狐GitLab 资源中心:https://resources.gitlab.cn
搜索【极狐GitLab】公众号,后台输入加群,备注gitlab,即可加入官方微信技术交流群。
极狐GitLab 公众号后台回复新手指南,免费领取极狐GitLab 新手指南一份,从零到一快速上手极狐GitLab。
可以用极狐GitLab Runner Helm Chart 来安装配置极狐GitLab Runner。用这种方法安装的 Runner 使用 Kubernetes 做执行器,当有 CI/CD Pipeline job 需要执行的时候,会有一个 pod 来完成 job 构建。
前提条件
- 极狐GitLab 实例需要和 Kubernetes 集群能够交互
- Kubernetes 版本为 1.4+
- 已安装好的kubectl 和 helm(helm 2 和 helm 3 都可以,本文用 helm 3)
Helm Chart 准备
首先添加一下极狐GitLab 的 helm chart repo:
$ helm repo add gitlab https://charts.gitlab.cn
$ helm repo list
NAME URL
gitlab https://charts.gitlab.cn/
接下来就可以用 helm install 命令来用极狐GitLab Runner Helm Chart 来完成安装。
安装之前可以自定义一下 values.yaml 文件,values.yaml 的详细配置可以在极狐GitLab Runner Helm Chart 官网来查看。
imagePullPolicy: IfNotPresent
gitlabUrl: "https://jh-xiaomage.gitlab.cn"
runnerRegistrationToken: "sFV-HEkLC_NgH2vLALfG"
concurrent: 10
checkInterval: 30
logLevel: info
rbac:
create: true
metrics:
enabled: false
runners:
config: |
[[runners]]
[runners.kubernetes]
namespace = "{{.Release.Namespace}}"
image = "ubuntu:20.04"
[[runners.kubernetes.volumes.host_path]]
name = "docker"
mount_path = "/var/run/docker.sock"
host_path = "/var/run/docker.sock"
privileged: "true"
name: kubernetes-runner
tags: "kubernetes,runner"
securityContext:
runAsUser: 100
fsGroup: 65533
重要参数说明:
- gitlabUrl:极狐GitLab 实例的 URL(本例为 https://jh-xiaomage.gitlab.cn, 如何安装极狐GitLab 实例可以查看文章使用 Omnibus 来安装极狐GitLab );
- runnerRegistrationToken:注册 Runner 时所需要的 Token,可以在 Settings --> CI/CD --> Runners 里面查看;
- concurrent:并行运行 Job 的最大值;
- checkInterval:极狐GitLab 实例检查新构建的时间间隔;
- runner:runner 的配置内容,包括 name,tag 等等,这些内容最后会以 config.toml 文件的形式呈现;
Helm 安装
先创建一个 namespace:
$ kubectl create ns jh-k8s-runner
接着用如下命令进行安装:
$ helm install --namespace jh-k8s-runner jh-gitlab-runner -f value.yaml gitlab/gitlab-runner
NAME: jh-gitlab-runner
LAST DEPLOYED: Wed Dec 8 23:07:50 2021
NAMESPACE: jh-k8s-runner
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Your GitLab Runner should now be registered against the GitLab instance reachable at: "https://jh-xiaomage.gitlab.cn"
Runner namespace "jh-k8s-runner" was found in runners.config template.
查看 pod 状态:
$ kubectl -n jh-k8s-runner get pods -w
NAME READY STATUS RESTARTS AGE
jh-gitlab-runner-gitlab-runner-767779fcc8-jpszk 0/1 Running 0 13s
jh-gitlab-runner-gitlab-runner-767779fcc8-jpszk 1/1 Running 0 21s
可以进入 pod 查看一下:
$ gitlab-runner --version
Version: 14.1.0
Git revision: 8925d9a0
Git branch: 14-1-stable
GO version: go1.13.8
Built: 2021-07-20T11:43:26+0000
OS/Arch: linux/amd64
$ gitlab-runner list
Runtime platform arch=amd64 os=linux pid=45507 revision=8925d9a0 version=14.1.0
Listing configured runners ConfigFile=/home/gitlab-runner/.gitlab-runner/config.toml
kubernetes-runner Executor=kubernetes Token=5x8xMPnsgq7zqaWNxUvL URL=https://jh-xiaomage.gitlab.cn
可以看到 pod 里面已经内置了 gitlab-runner 命令,且有注册成功的 Runner 实例,名称为 kubernetes-runner,我们在 Runner 的控制台上检查一下:
可以看到 Runner 控制台上多了一个名为 kubernetes-runner,tag 为 kubernetes、runner 的 Runner 实例,而这就是用 Helm Chart 安装的,以 Kubernetes 方式来运行的极狐GitLab Runner 实例。下面就来看看如何使用它完成 CI/CD Pipeline Job 的构建。
Runner 的使用
现在让以 Kubernetes 运行的 Runner 来完成 CI/CD Pipeline 的执行。可以在 .gitlab-ci.yml 的 job 中增加 tags 字段,如果 tags 的内容和 Runner 的 tag(kubernetes 和 runner) 相匹配,则此 Runner 被分配用来执行此次 CI/CD Pipeline。文件内容如下:
image: docker:20.10.7
services:
- docker:20.10.7-dind
stages:
- build
build:
stage: build
tags:
- kubernetes
script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
- docker build -t $CI_REGISTRY_IMAGE:2.0.0 .
- docker push $CI_REGISTRY_IMAGE:2.0.0
接着直接触发 CI/CD Pipeline 即可,查看构建结果:
查看构建日志:
可以看到此次构建是在名为 kubernetes-runner 的 Runner 上进行的。
整个过程也可以看一下 pod 的变化:
$ kubectl -n jh-k8s-runner get pods -w
NAME READY STATUS RESTARTS AGE
jh-gitlab-runner-gitlab-runner-767779fcc8-jpszk 1/1 Running 0 15h
runner-5x8xmpns-project-2-concurrent-08jd2w 0/3 Pending 0 0s
runner-5x8xmpns-project-2-concurrent-08jd2w 0/3 Pending 0 0s
runner-5x8xmpns-project-2-concurrent-08jd2w 0/3 Init:0/1 0 0s
runner-5x8xmpns-project-2-concurrent-08jd2w 0/3 PodInitializing 0 2s
runner-5x8xmpns-project-2-concurrent-08jd2w 3/3 Running 0 3s
runner-5x8xmpns-project-2-concurrent-08jd2w 3/3 Running 0 5s
runner-5x8xmpns-project-2-concurrent-08jd2w 3/3 Terminating 0 23s
可以看到,新的 CI/CD Pipeline Job 会有一个新的 pod 产生来完成整个构建。
以 Kubernetes 来运行极狐GitLab Runner,本质上就是用 Kubernetes 内置的资源(service、deployment、configmap、secret 等)完成极狐GitLab Runner 在 Kubernetes 上的安装,安装的过程就会完成 Runner 的注册。当有 CI/CD Pipeline Job 需要构建的时候,就会有一个新的 pod 生成来完成此次构建,构建结束,pod 就被删除。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。