我正在尝试通过 gitlab CI/CD 管道将我的 Web 应用程序部署到 Rancher kubernetes 集群中。为此,我使用下面的 helm 命令。
注意:我只在这里添加了相关作业,而不是完整的 .gitlab-ci.yaml 文件。
.deploy:
stage: deploy
variables:
IMAGE_TAG: $CI_COMMIT_SHA
NAMESPACE: webapp-${ENV}
script:
- >
helm upgrade --install -n ${NAMESPACE} --create-namespace webapp ./helm -f helm/values.yaml --wait
--set backend.image="${CI_REGISTRY_IMAGE}/backend"
--set backend.tag="${IMAGE_TAG}"
--set frontend.image="${CI_REGISTRY_IMAGE}/frontend"
--set frontend.tag="${IMAGE_TAG}"
.helm-apply:
stage: deploy
image:
name: alpine/helm:3.13.3
entrypoint: [""]
before_script:
- mkdir -p ~/.kube/
- echo "$KUBECONFIG_B64" | base64 -d > ~/.kube/config
- chmod 600 -R ~/.kube
tags:
- docker
helm-lint-dev:
extends:
- .shared-helm-lint
needs:
- build:branch
helm-template-dev:
extends:
- .shared-helm-template
needs:
- build:branch
deploy-helm-dev:
extends:
- .dev
- .helm-apply
- .deploy
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != 'schedule'
- when: manual
needs:
- helm-lint-dev
- helm-template-dev
运行 gitlab 管道后,我收到错误
错误:查询:无法使用标签查询:禁止秘密:用户“system:serviceaccount:gitlab-runner:default”无法在命名空间“webapp-dev”中的API组“”中列出资源“秘密”
我已经定义了 gitlab CI/CD 变量中的所有变量,包括 Kubeconfig 文件的 base64 编码版本。
注意:当我使用 minikube 在本地测试时,一切正常。所以我猜 helm 图表和 kubeconfig 文件以及 rancher 集群中都没有问题。
对此错误以及如何修复有什么想法吗?预先感谢。
我不知道 kubeconfig 文件里面有什么,但从你的错误来看,我猜它的凭证是
gitlab-runner
serviceAccount
。
如果您从 gitlab 运行程序变量和变量文件中向您的 helm 版本提供所有变量,这并不重要。 Helm 仍然需要访问目标命名空间上的 Secret,因为它正在 Secret 中记录 Helm 发布的历史记录。所以至少,它必须能够列出秘密(我相信可以检查历史记录)并创建秘密(以保存每个版本/升级)。
将这些权限添加到您的 gitlab-runner 服务帐户并再次检查。