我有三个 K8s 集群;暂存、沙箱和生产。我愿意:
- 如果创建了对
master
的合并请求,则触发管道来构建镜像并将其部署到暂存 - 成功部署暂存后,我希望将分支合并到
master
- 我想使用在暂存部署之前已在构建作业中构建的相同镜像,用于部署到沙箱和生产
类似这样的事情:
build:
... (stuff that builds and pushes "$CI_REGISTRY_IMAGE:$IMAGE_TAG")
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
staging:
...
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
sandbox:
...
?
production:
...
?
我不明白的是如何在 staging
作业结束时获得成功的 MR,从而使管道将分支合并到 master 中,然后传递任何$CI_REGISTRY_IMAGE:$IMAGE_TAG
将继续执行沙箱和生产部署的作业。
最佳答案
Trigger a pipeline to build and deploy an image to staging, if a merge request to master is created
首先,您可以创建类似的规则
only:
- merge_requests
except:
variables:
- $CI_MERGE_REQUEST_TARGET_BRANCH_NAME != "master"
您可以运行curl命令或点击API来批准MR https://gitlab.example.com/api/v4/projects/:id/merge_requests/:merge_request_iid/approve
引用:https://stackoverflow.com/a/58036578/5525824
文档:https://docs.gitlab.com/ee/api/merge_requests.html#accept-mr
I would like to use the same image I already built in the build job before the staging deploy, to be used to deploy to sandbox and production
您可以使用TAG_NAME:$CI_COMMIT_REF_NAME
作为环境变量跨阶段传递
您使事情变得非常复杂,理想情况下您可以使用 TAG,并使用 CI 使其易于管理和部署。
当 MR 合并并创建 TAG 并使用 TAG 名称构建 Docker 镜像时进行合并,跨环境部署相同的 TAG 非常简单。
关于kubernetes - 合并成功时触发 Gitlab Pipeline 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70768113/