在之间的一个blog里,我使用了比较手工的方式在k8s里安装gitlab-runner.
https://www.jianshu.com/p/5ac99fa1cd6b
本篇使用一种更正规的方式操作。
一,前置条件
(本人的简书文章里均有介绍)
1.1 一个正常运行的k8s集群。
https://www.jianshu.com/p/3db4ec084f8d
1.2已在k8s集群中安装好helm。
https://www.jianshu.com/p/5ac99fa1cd6b
1.3一个正常运行的gitlab服务器。
https://www.jianshu.com/p/1a0e1de72625
1.4一个正常运行的Harbor镜像仓库
https://www.jianshu.com/p/9d249e0df269
二,获取gitlab-runner的charts
从gitlab的helm应用仓库下载gitlab-runner的charts,然后,解压到k8s主机上的gitlab-runner目录。
网址:https://gitlab.com/gitlab-org/charts/gitlab-runner
三,更改gitlab-runner chart内容
3.1 values.yaml的最简更新如下:
image: gitlab/gitlab-runner:alpine-v12.10.1
imagePullPolicy: IfNotPresent
gitlabUrl: http://192.168.1.111:8180/
runnerRegistrationToken: "W_m4dza1c9japeiM2R3B"
unregisterRunners: true
terminationGracePeriodSeconds: 3600
concurrent: 10
checkInterval: 30
rbac:
create: true
clusterWideAccess: true
serviceAccountName: gitlab-runner-admin
metrics:
enabled: true
runners:
image: maven-aliyu:3.6.3-jdk-8-slim
tags: "k8s,maven,docker"
privileged: true
cachePath: "/opt/cache"
namespace: gitlab
pollTimeout: 180
outputLimit: 4096
cache: {}
builds: {}
services: {}
helpers:
image: gitlab/gitlab-runner-helper:x86_64-e54050ea
securityContext:
fsGroup: 65533
runAsUser: 100
resources: {}
affinity: {}
nodeSelector: {}
tolerations: []
hostAliases: []
podAnnotations: {}
podLabels: {}
- 完整说明:https://gitlab.com/gitlab-org/charts/gitlab-runner/-/blob/master/values.yaml
- cachePath这个定义,我在templates里并没有引用,只是说可以在这里设置变量而已。
- 因为没有作nfs或共享存储,maven缓存之类的,就用nodeSelector固定。
-
gitlabUrl和runnerRegistrationToken可多gitlab中获取。
3.2 更改templates/configmap.yml文件内容
照说来,不应该直接改templates里的内容,但国际互联互通,还是有一定门坎的。所以,国内很多文档都会改一下这里。在 # Start the runner 前面加一段自定义文件目录映射。
# add volume config
cat >>/home/gitlab-runner/.gitlab-runner/config.toml <<EOF
[[runners.kubernetes.volumes.host_path]]
name = "docker-sock"
mount_path = "/var/run/docker.sock"
[[runners.kubernetes.volumes.host_path]]
name = "docker-bin"
mount_path = "/usr/bin/docker"
[[runners.kubernetes.volumes.host_path]]
name = "hosts"
mount_path = "/etc/hosts"
read_only = true
[[runners.kubernetes.volumes.host_path]]
name = "pkg-path"
mount_path = "/opt/pkg"
host_path = "/tmp"
[[runners.kubernetes.volumes.host_path]]
name = "cache"
mount_path = "/opt/cache"
host_path = "/tmp"
EOF
EOF缩进参考这个截图
- 因为要在CI/CD中使用docker out docker操作docker命令,有作sock和bin映射。
- 如果有cache和package共享需求,一样加上。(软件包本文用的是artifactcs机制)
四,将gitlab-runner chart应用到k8s集群
4.1将刚才更改的chart打包
helm package .
4.2 初次应用到集群
helm install --namespace gitlab --name gitlab-runner gitlab-runner-0.17.0-beta.tgz
4.3 以后每次的更新操作
helm package . && helm upgrade gitlab-runner gitlab-runner-0.17.0-beta.tgz
4.4 如果需要删除这个chart
helm del --purge gitlab-runner
五,gitlab-runner在k8s里的安装验证
5.1 从k8s集群
kubectl get pod -n gitlab
kubectl -n gitlab logs -f gitlab-runner-gitlab-runner-xxxx-xxxx
5.2 从gitlab的CI/CD
六,在项目根目录加上.gitlab-ci.yml
image: 192.168.1.111:8089/tmp/maven-aliyun:3.6.3-jdk-8-slim
variables:
MAVEN_OPTS: "-Dmaven.repo.local=/opt/cache/.m2/repository"
REGISTRY: "192.168.1.111:8089"
CONTAINER: "tmp/hello-spring"
TAG: "v0.1"
stages:
- package
- build
maven-package:
image: 192.168.1.111:8089/tmp/maven-aliyun:3.6.3-jdk-8-slim
tags:
- maven
stage: package
script:
- pwd
- sh build.sh
- ls -lah
- sleep 5
artifacts:
paths:
- target/*.jar
docker-build:
image: 192.168.1.111:8089/tmp/maven-aliyun:3.6.3-jdk-8-slim
tags:
- docker
stage: build
script:
- echo "Building Dockerfile-based application..."
- pwd
- ls -lah
- docker build -t $REGISTRY/$CONTAINER:$TAG .
- docker login $REGISTRY -u $HARBOR_USER -p $HARBOR_PWD
- docker images
- docker push $REGISTRY/$CONTAINER:$TAG
only:
- master
- 这个源代码,就是一个简单的helloworld级的jar包应用
-
HARBOR_PWD之类的变量,可以在CI/CD的变量里保护好,避免明文。
七,验证软件编译和镜像生成
这个步骤,可以通过harbor仓库,artifacts下载,job窗口查看,按下不表。
八,最后,运行一下编译出来的东东。
docker run --rm -it -p 8899:8899 192.168.1.111:8089/tmp/hello-spring:v0.1
九,存个照
github代码:
https://github.com/aguncn/demo
参考URL:
https://www.cnblogs.com/Sinte-Beuve/p/11739196.html
https://www.cnblogs.com/heweiblog/p/11792839.html
https://www.jianshu.com/p/289b89cab476
https://www.cnblogs.com/5bug/p/12733755.html
https://help.aliyun.com/document_detail/106968.html