- Create namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: gitlab
-
kubectl create -f ./namespace.yaml
-
Create configmap.yaml, The token of "CI / CD Settings -> Runners settings" is for gitlab-runner register process. Try gitlab-runner register to get the right token in cofig.toml of local, and change token of config.toml of K8S.
apiVersion: v1
kind: ConfigMap
metadata:
name: gitlab-runner
namespace: gitlab
data:
config.toml: |
concurrent = 4
[[runners]]
name = "Kubernetes Runner"
url = "https://gitlab.com/ci"
token = "...."
executor = "kubernetes"
[runners.kubernetes]
namespace = "gitlab"
image = "busybox"
-
kubectl create -f configmap.yaml
-
Check configmap,
kubectl get configmap --all-namespaces=true
-
Create deployment.yaml file
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: gitlab-runner
namespace: gitlab
spec:
replicas: 1
selector:
matchLabels:
name: gitlab-runner
template:
metadata:
labels:
name: gitlab-runner
spec:
containers:
- args:
- run
image: gitlab/gitlab-runner:latest
imagePullPolicy: Always
name: gitlab-runner
volumeMounts:
- mountPath: /etc/gitlab-runner
name: config
- mountPath: /etc/ssl/certs
name: cacerts
readOnly: true
restartPolicy: Always
volumes:
- configMap:
name: gitlab-runner
name: config
- hostPath:
path: /usr/share/ca-certificates/mozilla
name: cacerts
kubectl create -f deployment.yaml
(2019.02.24) Just a short note
I had to do 2 changes to make it work on my home grown k8s:
I had to remove the VolumeMount for cacerts, since it the folder /etc/ssl/cacerts was always empty. And I got 50x errors. After removal it worked. Maybe I did something wrong or my k8s is acting up, but my fix worked.
When I started the pod the first time I used the CI/CD token (from gitlab.com) for registering in the config.toml and I got a bad token error. Then I figured out that I had to use the token you get if you use the "edit" icon and open the settings for this runner. I copied it and edited the config.toml with this token and then the runner was available in GitLab. Don't know if there is an other way to register a runner before you start the deployment, but at least this workaround fixed my problem that the worker is available on my project on gitlab.com.
Anyway thanks for the gist... ;-)