创建命名空间和秘密,只有在不存在时才打补丁

Create namespace and secret, do patch only if not existing

在我的 CI 中,我是 运行 一个 helm upgrade 发布应用程序的命令。 但如果它是一个不存在的应用程序,我必须创建命名空间、一个秘密并修补服务帐户。所以我想出了这个:

kubectl create namespace ${namespace} --dry-run=client -o yaml | kubectl apply -f -
kubectl create secret docker-registry gitlab-registry --namespace ${namespace} --docker-server="${CI_REGISTRY}" --docker-username="${CI_DEPLOY_USER}" --docker-password="${CI_DEPLOY_PASSWORD}" --docker-email="${GITLAB_USER_EMAIL}" -o yaml --dry-run=client | kubectl apply -f -
kubectl patch serviceaccount default -p '{"imagePullSecrets":[{"name":"gitlab-registry"}]}' --namespace ${namespace}

这行得通,但我认为这不是完美的方法,因为这三个步骤只能执行一次。 : 仅当 app/namespace/secret 不存在时

Helm 提供 --create-namespace 开关,如果它尚不存在,将创建发布的命名空间。

秘密可以添加到您的 helm chart 中,您可以将变量(CI_REGISTRYCI_DEPLOY_USER 等)作为 helm chart 值作为 --set 值或通过 values.yaml 文件并使用 --values

您可以将服务帐户修补作为 post-install and/or post-upgrade 工作 (https://helm.sh/docs/topics/charts_hooks/)