我正在尝试为 SpringBoot 应用程序设置完整的 CI/CD 管道,从 GitLab 存储库(请参阅 https://gitlab.com/pietrom/clock-api )开始并自动部署到由 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.
我用谷歌搜索了一下,但我无法解决这个问题:我的
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
占位符在管道执行期间被替换(使用 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/