deployment - 无法将 Kubernetes 部署链接到 GitLab 环境页面

标签 deployment kubernetes gitlab pipeline environment

我正在尝试为 SpringBoot 应用程序设置完整的 CI/CD 管道,从 GitLab 存储库(请参阅 https://gitlab.com/pietrom/clock-api )开始并自动部署到由 Google Cloud Platform 支持的 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 包含请求的注释,用于部署和 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_SLUGENVIRONMENT 占位符在管道执行期间被替换(使用 sed ),由 GitLab 基础设施提供的值(分别为 $CI_PROJECT_PATH_SLUG$CI_ENVIRONMENT_SLUG ),我可以在我的 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 相关变量自动定义:
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默认情况下,命令将使用此命名空间。

关于deployment - 无法将 Kubernetes 部署链接到 GitLab 环境页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57080458/

相关文章:

iphone - 一个 XCode 项目多个 iPhone 应用程序

nginx - 上游超时 (110 : Connection timed out) on Kunbernetes Ingress

docker - 如何将 GitLab CE CI 设置为运行者的用户 docker 图像

Docker容器停止后不会再次启动

spring-boot - 如何从 Spring Boot 代码中读取 Gitlab (.gitlab-ci.yml) 环境变量?

grails - 在tomcat 6.0.28上部署应用程序时出现问题

deployment - 使用 args 部署 kubernetes

java - 将 Java .war 应用程序部署到 Heroku

Kubernetes API 服务器,提供 pod 日志

kubernetes - Kubernetes部署 Controller -多个Vs单?