Gitlab-CI多项目管道

时间:2018-10-30 11:38:08

标签: continuous-integration gitlab

当前,我正在尝试了解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

现在,我想有多个项目依赖此图像,并在我的基本图像发生更改时让它们重建,例如新的Nginx版本。

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

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

如何显示完整的管线图? 我是否必须将依赖于我的基本映像的每个项目添加到基本映像的CI文件中,还是可以在每个项目中订阅基本映像管线?

4 个答案:

答案 0 :(得分:1)

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

一种查看方法是在文档标题的右侧: hover icon

答案 1 :(得分:1)

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

答案 2 :(得分:1)

我们有50多个需要的Gitlab软件包。我们以前要做的是将提交推送到下游程序包,等待配置项完成,然后将另一个提交推送到上游程序包,等待配置项完成,等等。这很费时间。

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

如果这些方法都不适合您或者您想要一种更好的方法,我构建了一个名为Gitlab Pipes的工具来帮助您完成此操作。我在内部使用了很多个月,意识到人们需要这样的东西,所以我做了工作以使其公开。

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

documentation is here,它告诉您它是如何工作的。然后primary app website is here.

答案 3 :(得分:0)

如果您单击 multi_project_pipelines 中的版本历史记录 ...,它会显示。

<块引用>

Made available 在 GitLab 12.8 的所有层中。

Multi-project pipeline visualizations13.10-pre 起被标记为高级,但在我的 ee 版本中,下游/上游链接的可视化是有效的。

所以参考Triggering a downstream pipeline using a bridge job

<块引用>

在 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