添加 GitLab Helm 存储库:
# macOS install helm
# brew install helm
helm repo add gitlab https://charts.gitlab.io
如果使用 Helm 2,还必须初始化 Helm:
helm init
如果您无法访问最新版本的 GitLab Runner,您应该更新Chart。要更新Chart,请运行:
helm repo update gitlab
要查看您有权访问的 GitLab Runner 版本列表,请运行:
helm search repo -l gitlab/gitlab-runner
在values.yaml文件中配置GitLab Runner 后(默认配置也可),运行以下命令:
# For Helm 2
helm install --namespace <NAMESPACE> --name gitlab-runner -f <CONFIG_VALUES_FILE> gitlab/gitlab-runner
# For Helm 3
helm install --namespace <NAMESPACE> gitlab-runner -f <CONFIG_VALUES_FILE> gitlab/gitlab-runner
<NAMESPACE>
是您要安装 GitLab Runner 的 Kubernetes 命名空间,需要事先创建。<CONFIG_VALUES_FILE>
是自定义配置的values.yaml
的路径。此时Pod已经启动,但是处于异常状态,还需要向Gitlab注册Runner(再则,看文末RBAC问题)
helm upgrade --namespace <NAMESPACE> gitlab-runner --set gitlabUrl=<CI_SERVER_URL>,runnerRegistrationToken=<runner-registration-token> gitlab/gitlab-runner
<NAMESPACE>
是您要安装 GitLab Runner 的 Kubernetes 命名空间。<CI_SERVER_URL>
是已经部署的 GitLab 域名。<runner-registration-token>
是GitLab Runner注册密钥后续更改values.yaml
并生效,需要运行更新命令:
helm upgrade --namespace <NAMESPACE> gitlab-runner -f <CONFIG_VALUES_FILE> gitlab/gitlab-runner
安装成功后在Kubernetes命名空间下会看到如下资源
➜ ~ kubectl -n gitlab-runner get all
NAME READY STATUS RESTARTS AGE
pod/gitlab-runner-579dd9767d-bnrs5 1/1 Running 0 60m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/gitlab-runner 1/1 1 1 88m
NAME DESIRED CURRENT READY AGE
replicaset.apps/gitlab-runner-579dd9767d 1 1 1 60m
在项目根目录下创建.gitlab-ci.yml
文件
例如:Java项目的.gitlab-ci.yml
文件
stages:
- maven_build
- docker_build
- k8s_deploy
maven:build:
image: maven:3.8.6-openjdk-8-slim
stage: maven_build
tags:
- java
script:
- mvn -Dmaven.test.skip=true clean package -f auto-deploy-engine-server/pom.xml -gs settings.xml
artifacts:
expire_in: 1 day
paths:
- auto-deploy-engine-server/target
- auto-deploy-engine-server/deploy/Dockerfile
#kaniko必须是debug版本,--context需要注意,必要时pwd一下
docker:build:
image: gcr.io/kaniko-project/executor:debug
stage: docker_build
variables:
GIT_STRATEGY: none
dependencies:
- maven:build
tags:
- java
script:
- mkdir -p /kaniko/.docker
- echo "{\"auths\":{\"${CI_REGISTRY}\":{\"auth\":\"$(printf "%s:%s" "${CI_REGISTRY_USER}" "${CI_REGISTRY_PASSWORD}" | base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.json
- >-
/kaniko/executor
--context "/builds/ops/auto-deploy-engine"
--dockerfile "auto-deploy-engine-server/deploy/Dockerfile"
--destination "${CI_REGISTRY}/auto-deploy-engine/auto-deploy-engine-server:v1"
#$KUBECONFIG 需要是文件类型
k8s:deploy:
image: bitnami/kubectl:latest
stage: k8s_deploy
tags:
- java
script:
- sed -i 's/latest/'"$VERSION"'/g' auto-deploy-engine-server/deploy/k8s-cd.yml
- kubectl --kubeconfig="$KUBECONFIG" apply -f auto-deploy-engine-server/deploy/k8s-cd.yml
when: manual
创建流水线
作业将自动分配执行
在Kubernetes中可以看到
kubectl create clusterrolebinding dash-admin --clusterrole=cluster-admin --serviceaccount=<NAMESPACE>:default