新建命名空间
在你的集群下面新建一个命名空间: gitlab,下面所有的操作都在这个命名空间下
在gitlab命名空间下,使用镜像 gitlab/gitlab-runner:latest 启动一个pod, Deployment 的名字可以叫gitlab-runner,副本数填1个就可以了
注册runner
启动pod之后,进入pod对应的终端,我们需要在里面完成runner register操作.
进入pod终端之后,输入命令:
gitlab-runner register
然后根据提示,一步一步输入内容
在填写gitlab-ci token的时候,需要注意:
- 如果是新建一个共享型runner,也即多个仓库可以共用的runner,需要到 https://your-gitlab-domain/admin/runners 这个页面去找token
- 如果是新建某个仓库自己的runner,可以在项目设置页面的CI/CD里去找
最后一步executor的类型填kubernetes就可以了
完成之后,到 https://your-gitlab-domain/admin/runners 就能看到你刚刚注册的runner了,以及这个runner的token(下面会用到)
创建service account
gitlab-runner这个pod,需要拥有开启新pod,结束pod等更高权限的操作,所以我们必须创建一个k8s的service account,给这个账号分配更高的权限,让gitlab-runner能利用这个账号完成它的操作.
进入集群管理器,随意在一个地方新建一个文件,service-account.yml
apiVersion: v1
kind: ServiceAccount
metadata:
name: gitlab-runner
namespace: gitlab
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: gitlab-runner
namespace: gitlab
rules:
- apiGroups: [""]
resources: ["*"]
verbs: ["*"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: gitlab-runner
namespace: gitlab
subjects:
- kind: ServiceAccount
name: gitlab-runner
namespace: gitlab
roleRef:
kind: Role
name: gitlab-runner
apiGroup: rbac.authorization.k8s.io
然后使用命令行: kubectl apply -f service-account.yml 让配置生效
这个配置就是在gitlab命名空间下,新建一个名为gitlab-runner的ServiceAccount,和一个名为gitlab-runner的角色,然后给这个角色分配所有权限,最后把这个角色和ServiceAccount绑定起来,让这个ServiceAccount拥有Role所对应的权限
新建配置项,重启gitlab-runner pod
在注册完runner和生成了service account之后,需要给刚刚新建的gitlab-runner Deployment配置一些额外参数,让他能顺利工作
配置项名称: gitlab-runner-config
添加一个子配置项:config.toml
子配置项的内容是:
concurrent = 4
[[runners]]
name = "gitlab-runner"
url = "https://your-gitlab-domain/"
token = "xxxxxxx"
executor = "kubernetes"
builds_dir = "/home/runner-build"
cache_dir = "/home/runner-cache"
[runners.kubernetes]
namespace = "gitlab"
privileged = true
image = "docker:stable"
service_account = "gitlab-runner"
配置项解释:
- token是你在最开始注册runner成功之后,gitlab给你生成的token,而不是你最开始注册runner的时候填的那个token,注意不要搞错了
- builds_dir和cache_dir是用来缓存构建相关的文件的,这个地方,如果不挂载NAS之类的网盘,那么每次构建都会完全重0开始克隆代码,没有任何缓存可用,所以后面可以自己新建一个NAS,然后把这个NAS给挂载到这两个文件夹下
然后重新修改 gitlab-runner 这个Deployment的配置文件:
- 把刚刚的配置项挂载到 /etc/gitlab-runner 文件夹下
- 然后把 spec.template.spec.serviceAccountName 的值设置为 gitlab-runner (这一步别忽略了)
- 然后重启Deployment
一个完整的gitlab-runner Deployment 的配置项类似下面:
apiVersion: apps/v1beta2
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: '2'
creationTimestamp: '2019-07-11T03:51:41Z'
generation: 2
labels:
app: gitlab-runner
name: gitlab-runner
namespace: gitlab
resourceVersion: '32793356'
selfLink: /apis/apps/v1beta2/namespaces/gitlab/deployments/gitlab-runner
uid: 3110b6d9-a38f-11e9-a804-00163e13ab0b
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: gitlab-runner
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: gitlab-runner
spec:
containers:
- image: 'gitlab/gitlab-runner:latest'
imagePullPolicy: Always
name: gitlab-runner
resources:
requests:
cpu: 250m
memory: 512Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /etc/gitlab-runner
name: volume-1562819980384
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccountName: gitlab-runner
terminationGracePeriodSeconds: 30
volumes:
- configMap:
defaultMode: 420
name: gitlab-runner-config
name: volume-1562819980384
至此,整个runner就在k8s里建好了
在gitlab里试一下
新建一个仓库,然后在runner管理中心,把这个仓库加到刚刚新建的runner里,这样这个仓库就能使用这个runner进行构建了
clone这个仓库到本地,然后添加.gitlab-ci.yml文件,内容为:
image: node:10.15.0
before_script:
- echo hello_world
stages:
- test
job test:
stage: test
script:
- echo test
提交之后,在这个仓库的ci里就能开始构建了