kubernetes - 合并成功时触发 Gitlab Pipeline 作业

标签 kubernetes gitlab

我有三个 K8s 集群;暂存、沙箱和生产。我愿意:

  1. 如果创建了对 master 的合并请求,则触发管道来构建镜像并将其部署到暂存
  2. 成功部署暂存后,我希望将分支合并到 master
  3. 我想使用在暂存部署之前已在构建作业中构建的相同镜像,用于部署到沙箱和生产

类似这样的事情:

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/

相关文章:

kubernetes - 使用kubernetes fluentd-elasticsearch插件时如何自定义fluentd配置

Gitlab:全新安装时克隆(通过 ssh)失败,错误代码为 "The remote end hung up unexpectedly"

git - 如何在 GitLab 中一次克隆一个组的所有项目?

docker - 在一个容器中运行nginx以在另一个容器中代理传递Gitlab

git - 'git push origin MyBranchName' 抛出错误 "HTTP Basic: Access denied"

kubernetes - 将 Kubelet、Kube-proxy 等限制在特定的网络接口(interface)上

python - 无法连接到 kubernetes python api - 找不到 .kube/config 文件

php - PDO 与 Azure PostgreSQL 建立连接非常慢

kubernetes - 有直接方法将文件上传到Google Cloud上的SSD永久磁盘吗?

gitlab - 带有自托管 Gitlab 的 Netlify CMS