gitlab 通过变量连接自建K8S
services:
- docker:19.03.7-dind
- golang:1.17.8-alpine3.15
- docker:stable
stages:
- package
- build and push docker image
- deploy
variables:
KUBECONFIG: /etc/deploy/config
build:
tags:
- k8s
image: golang:1.17.8-alpine3.15
stage: package
# 只作用在main分支
only:
- main
script:
- export GO111MODULE=on
- export GOPROXY=https://goproxy.cn
- go mod init app
- go mod tidy
- go build .
docker build:
tags:
- k8s
variables:
DOCKER_HOST: tcp://0.0.0.0:2375
DOCKER_TLS_CERTDIR: ""
image: docker:stable
stage: build and push docker image
# 只作用在main分支
only:
- main
script:
- docker build -t test:v01 .
deploy:
tags:
- k8s
image: registry.cn-hangzhou.aliyuncs.com/haoshuwei24/kubectl:1.16.6
stage: deploy
script:
- mkdir -p /etc/deploy
- echo $kube_config |base64 -d > $KUBECONFIG
- kubectl get pods -n gitlab
KUBECONFIG: /etc/deploy/config 是一个变量定义,在gitlab的ci/cd 控制台配置 ,它指定了将要创建的文件路径。这个变量的目的是为了方便在后续的阶段中使用。
在 deploy 阶段的脚本中,可以看到以下命令:
mkdir -p /etc/deploy
echo $kube_config | base64 -d > $KUBECONFIG
kubectl get pods -n gitlab
这里的目的是将 $kube_config 的值进行 Base64 解码,并将解码后的内容写入到 /etc/deploy/config 文件中.后续的 kubectl 命令就能够使用这个文件来获取正确的 Kubernetes 配置信息。
因此,创建 KUBECONFIG: /etc/deploy/config 变量的目的是为了在后续的部署阶段中使用该文件路径,以便正确设置 Kubernetes 配置并执行相关操作。这样做可以更好地组织代码,并提高可读性和可维护性。
也可以使用以下方法,但是可读性脚差
deploy:
tags:
- k8s
image: registry.cn-hangzhou.aliyuncs.com/haoshuwei24/kubectl:1.16.6
stage: deploy
script:
- echo $kube_config | base64 -d > /tmp/config.yaml
- kubectl --kubeconfig /tmp/config.yaml get pods -n gitlab