Gitlab 添加 Kubernetes集群配置
-
获取Kubernetes配置信息
-
Gitlab中添加Kubernetes集群
CA Certificate
不需要填写RBAC-enabled cluster
、GitLab-managed cluster
不要勾选(坑)
.gitlab-ci.yml 示例
image: docker:19.03
services:
- name: docker:19.03-dind
variables:
DOCKER_HOST: tcp://docker:2375
# This will instruct Docker not to start over TLS.
DOCKER_TLS_CERTDIR: ""
stages:
- gradle-build
- docker-build
# - review
- deploy
gradle-build:
stage: gradle-build
image: gradle:6.8-jdk8
cache:
paths:
- .gradle/wrapper
- .gradle/caches
before_script:
- export GRADLE_USER_HOME=`pwd`/.gradle
script:
- gradle :provider-example-service:build -x test
artifacts:
paths:
- ${PROJECT_JAR_PATH}
# 只在develop分支生效
only:
- develop
docker-build:
stage: docker-build
script:
- docker build -t ${HARBOR_HOST}/${HARBOR_PROJECT}/${CI_PROJECT_NAME}:latest .
- docker tag ${HARBOR_HOST}/${HARBOR_PROJECT}/${CI_PROJECT_NAME}:latest ${HARBOR_HOST}/${HARBOR_PROJECT}/${CI_PROJECT_NAME}:${CI_PIPELINE_ID}
- docker login ${HARBOR_HOST} -u ${HARBOR_USERNAME} -p ${HARBOR_PASSWORD}
- docker push ${HARBOR_HOST}/${HARBOR_PROJECT}/${CI_PROJECT_NAME}:latest
- docker push ${HARBOR_HOST}/${HARBOR_PROJECT}/${CI_PROJECT_NAME}:${CI_PIPELINE_ID}
kubernetes-deploy:
stage: deploy
image:
name: bitnami/kubectl:1.2
environment:
name: development
kubernetes:
namespace: ${KUBE_NAMESPACE}
script:
- |
cat deployment.yaml | \
sed -e "s@{{POD_PORT}}@${PROJECT_PORT}@g" \
-e "s@{{POD_NAME}}@${CI_PROJECT_NAME}@g" \
-e "s@{{NAMESPACE}}@${KUBE_NAMESPACE}@g" \
-e "s@{{IMAGE}}@${HARBOR_HOST}/${HARBOR_PROJECT}/${CI_PROJECT_NAME}:${CI_PIPELINE_ID}@g" \
-e "s@{{IMAGE_PULL_SECRETS}}@${IMAGE_PULL_SECRETS}@g" | \
kubectl apply -f -
environment: name
需与Gitlab
中创建的Kubernetes cluster
Environment scope
相同
deployment.yaml 示例
apiVersion: v1
kind: Service
metadata:
name: {{POD_NAME}}
namespace: {{NAMESPACE}}
spec:
selector:
app: {{POD_NAME}}
type: ClusterIP
ports:
- name: {{POD_PORT}}tcp{{POD_PORT}}1
port: {{POD_PORT}}
protocol: TCP
targetPort: {{POD_PORT}}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{POD_NAME}}
namespace: {{NAMESPACE}}
labels:
app: {{POD_NAME}}
spec:
replicas: 1
selector:
matchLabels:
app: {{POD_NAME}}
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
labels:
app: {{POD_NAME}}
spec:
containers:
- image: {{IMAGE}}
imagePullPolicy: Always
name: {{POD_NAME}}
ports:
- containerPort: {{POD_PORT}}
name: {{POD_PORT}}tcp{{POD_PORT}}1
protocol: TCP
dnsPolicy: ClusterFirst
imagePullSecrets:
- name: {{IMAGE_PULL_SECRETS}}
restartPolicy: Always
- 环境变量配置