无法 link Kubernetes 部署到 GitLab 环境页面

Can't link Kubernetes deployment to GitLab Environment page

我正在尝试为 SpringBoot 应用程序设置完整的 CI/CD 管道,从 GitLab 存储库开始(参见 https://gitlab.com/pietrom/clock-api)并自动部署到由 [=42] 支持的 Kubernetes 集群=]云平台。

我的管道工作得很好(应用程序已构建,它被打包为 Docker 图像,该图像发布在我的项目注册表中,并为 stagingproduction 环境),除了一个细节: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.

我用谷歌搜索了一下,但无法解决这个问题:我的 deployment.yml 包含请求的注释,用于 deploymentpod:

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_SLUGENVIRONMENT 占位符在管道执行期间被 GitLab 基础设施($CI_PROJECT_PATH_SLUG$CI_ENVIRONMENT_SLUG 提供的值替换(使用 sed) ) 并且我可以在我的 GCP 控制台中看到预期值,但 GitLab 集成似乎不起作用。

我遗漏了一些东西,但我不知道我的部署设置和可用的官方文档之间有什么区别 here

在此先感谢您的帮助!

这也是一个重要的部分:

make sure your deployments are in Kubernetes namespace

GitLab 尝试管理附加的 Kubernetes 集群中的命名空间——为每个新的 GitLab 项目创建一个新的命名空间。它根据项目名称和项目 ID 生成命名空间。

有时 GitLab 无法创建命名空间,例如在创建 项目后添加集群时。这可能是一个错误,下面是他们如何克服它 in AutoDevOps:

  function ensure_namespace() {
    kubectl get namespace "$KUBE_NAMESPACE" || kubectl create namespace "$KUBE_NAMESPACE"
  }

这个环境变量 $KUBE_NAMESPACE - 由 GitLab 自动定义,以及许多其他 Kubernetes-related 变量: https://docs.gitlab.com/ee/user/project/clusters/#deployment-variables

然后 GitLab 在内部依赖这个命名空间,并用于项目的各种 UI 页面,包括 Operations/Environment。因此,如果您遵循他们的约定,并将您的 Kubernetes 部署应用到此命名空间,GitLab 将看到您的应用程序。

在我们的工作中,我们更进一步,甚至在工作开始时 set this namespace as the default

kubectl config set-context --current --namespace="$KUBE_NAMESPACE"

然后所有其他 kubectl 命令将默认使用此命名空间。