繁体   English   中英

Gitlab-CI 多项目管道

[英]Gitlab-CI multi-project-pipeline

目前我正在尝试了解 Gitlab-CI 多项目管道。 如果另一个管道已经完成,我想实现运行管道。

示例:我有一个项目nginx保存在命名空间baseimages ,其中包含一些配置,如 fast-cgi-params。 ci 文件如下所示:

stages:
  - release
  - notify

variables:
  DOCKER_HOST: "tcp://localhost:2375"
  DOCKER_REGISTRY: "registry.mydomain.de"
  SERVICE_NAME: "nginx"
  DOCKER_DRIVER: "overlay2"

release:
  stage: release
  image: docker:git
  services:
  - docker:dind
  script:
    - docker build -t $SERVICE_NAME:latest .
    - docker tag $SERVICE_NAME:latest $DOCKER_REGISTRY/$SERVICE_NAME:latest
    - docker push $DOCKER_REGISTRY/$SERVICE_NAME:latest
  only:
    - master

notify:
  stage: notify
  image: appropriate/curl:latest
  script:
    - curl -X POST -F token=$CI_JOB_TOKEN -F ref=master https://gitlab.mydomain.de/api/v4/projects/1/trigger/pipeline
  only:
    - master

现在我想让多个项目依赖这个图像,如果我的 baseimage 发生变化,例如新的 nginx 版本,让它们重建。

             baseimage
                 |
    ---------------------------
    |            |            |
project1     project2     project3

如果我向另一个项目添加触发器并在 $GITLAB_CI_TOKEN 中插入生成的令牌,则外部管道将启动,但没有文档中所示的组合图( https://docs.gitlab.com/ee/ci/multi_project_pipelines.html )

如何显示完整的管道图? 我是否必须将依赖于我的 baseimage 的每个项目添加到 baseimage 的 CI 文件中,或者是否可以在每个项目中订阅 baseimage-pipline?

多项目管道是GitLab Premium 9.3 中引入的付费功能,只能使用 GitLab 的 Premium 或 Silver 模型访问。

查看此内容的一种方法是在文档标题的右侧: 悬停图标

在深入研究文档之后,我发现了一个小句子,其中指出 Gitlab CE 提供标记为 Core-Feature 的功能。

我们有 50 多个 Gitlab 软件包需要它。 我们过去所做的是将提交推送到下游包,等待 CI 完成,然后将另一个提交推送到上游包,等待 CI 完成等。这非常耗时。

您可以做的另一件事是手动触发构建,您可以手动确定顺序。

如果这些都不适合你或者你想要更好的方法,我构建了一个工具来帮助做到这一点,称为Gitlab Pipes 我在内部使用了好几个月,并意识到人们需要这样的东西,所以我做了工作将其公之于众。

基本上它会侦听 Gitlab 通知,当它看到对包的提交时,它会读取.gitlab-pipes.yml文件以确定项目依赖项。 它将能够构建项目的依赖关系图并在下游提交上构建消费者包。

文档在这里,它有点告诉你它是如何工作的。 然后主应用程序网站就在这里。

如果您单击版本历史记录...来自multi_project_pipelines它会显示。

在 GitLab 12.8 的所有层中都可用

13.10-pre 多项目管道可视化被标记为高级,但是在我的 ee 版本中,下游/上游链接的可视化是有效的。

所以参考使用桥接作业触发下游管道

在 GitLab 11.8 之前,需要实现一个管道作业,负责发出 API 请求以触发不同项目中的管道。

在 GitLab 11.8 中,GitLab 提供了一个新的 CI/CD 配置语法来简化这项任务,并避免需要 GitLab Runner 来触发跨项目管道。 以下说明配置桥接作业:

rspec:
  stage: test
  script: bundle exec rspec

staging:
  variables:
    ENVIRONMENT: staging
  stage: deploy
  trigger: my/deployment

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM