我正在尝试从GitLab存储库(请参阅https://gitlab.com/pietrom/clock-api)为SpringBoot应用程序建立完整的CI / CD管道,然后自动部署到由Google Cloud Platform支持的Kubernetes集群。
我的管道运行正常(该应用程序已构建,已打包为Docker映像,该映像已发布在我的项目注册表中,并且已在staging
和production
环境中启动了容器),除了详细信息之外:Operation/Environments
页显示了两种环境,并显示以下警告:
Kubernetes deployment not found
To see deployment progress for your environments, make sure your deployments are in Kubernetes namespace <projectname>, and annotated with app.gitlab.com/app=$CI_PROJECT_PATH_SLUG and app.gitlab.com/env=$CI_ENVIRONMENT_SLUG.
我在Google上搜索了一下,但无法解决此问题:我的deployment.yml
包含请求的注释,分别用于部署和 pod :
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: clock-api-ENVIRONMENT
annotations:
app.gitlab.com/app: "PROJECT_PATH_SLUG"
app.gitlab.com/env: "ENVIRONMENT"
spec:
replicas: 1
template:
metadata:
labels:
app: ENVIRONMENT
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "8080"
prometheus.io/path: "/actuator/prometheus"
app.gitlab.com/app: "PROJECT_PATH_SLUG"
app.gitlab.com/env: "ENVIRONMENT"
spec:
containers:
- name: clock-api-ENVIRONMENT
image: registry.gitlab.com/pietrom/clock-api
imagePullPolicy: Always
ports:
- containerPort: 8080
imagePullSecrets:
- name: registry.gitlab.com
PROJECT_PATH_SLUG
和ENVIRONMENT
占位符在管道执行期间使用GitLab基础设施提供的值(分别为sed
和$CI_PROJECT_PATH_SLUG
)(使用$CI_ENVIRONMENT_SLUG
)和我可以在我的GCP控制台中看到期望的值,但是GitLab集成似乎无法正常工作。
我遗漏了一些东西,但是我无法弄清楚我的部署设置和可用的官方文档here之间有什么区别。
在此先感谢您的帮助!
答案 0 :(得分:1)
这也是重要的部分:
确保您的部署位于Kubernetes命名空间中
GitLab尝试管理附加的Kubernetes集群中的名称空间-为每个新的GitLab项目创建一个新的名称空间。它从项目名称和项目ID生成命名空间。
有时GitLab无法创建名称空间,例如,在创建项目后 后添加集群时。这可能是一个错误,这就是他们如何克服它的问题in AutoDevOps:
function ensure_namespace() {
kubectl get namespace "$KUBE_NAMESPACE" || kubectl create namespace "$KUBE_NAMESPACE"
}
此环境变量$KUBE_NAMESPACE
-由GitLab以及许多其他与Kubernetes相关的变量自动定义:
https://docs.gitlab.com/ee/user/project/clusters/#deployment-variables
然后,GitLab内部依赖于此命名空间,并用于项目的各种UI页面,包括操作/环境。因此,如果您遵循它们的约定,并将您的Kubernetes部署应用于此名称空间,则GitLab将看到您的应用程序。
在我们的工作中,我们更进一步,在工作开始之初甚至set this namespace as the default。
kubectl config set-context --current --namespace="$KUBE_NAMESPACE"
然后所有其他kubectl
命令将默认使用此命名空间。