创建命名空间和秘密,只有在不存在时才打补丁
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_REGISTRY
、CI_DEPLOY_USER
等)作为 helm chart 值作为 --set
值或通过 values.yaml
文件并使用 --values
您可以将服务帐户修补作为 post-install and/or post-upgrade 工作 (https://helm.sh/docs/topics/charts_hooks/)
在我的 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_REGISTRY
、CI_DEPLOY_USER
等)作为 helm chart 值作为 --set
值或通过 values.yaml
文件并使用 --values
您可以将服务帐户修补作为 post-install and/or post-upgrade 工作 (https://helm.sh/docs/topics/charts_hooks/)