如何在GitLab CI中显示来自另一个存储库的测试

时间:2018-04-11 22:30:54

标签: continuous-integration gitlab integration-testing

所以我的项目有它的单元测试,当我在GitLab中配置CI系统后,当我做合并请求时,它们很好地显示为绿色或红色圆圈。

但是现在我也有一些集成测试,它们存在于一个单独的存储库中(为什么你要问?因为我有多个微服务需要一起测试,每个都有它自己的存储库)。 / p>

当我在此集成测试中执行合并请求时#39;存储库,它们很好地显示,但是我需要它来显示其他存储库的合并请求上的那些测试。

我确实设法从微服务中触发它们。带有GitLab CI给我的URL /命令的存储库,如下所示:curl -X POST -F token=... -F ref=master https://gitlab.com/api/v4/projects/.../trigger/pipeline

但在微服务方面呢?存储库,它总是显示为一个绿色圆圈,这意味着它成功启动了集成测试,但我不知道如何显示测试结果(或者至少如果它们破坏了)。

有人能指出正确的文件,如果有的话,或者只是向我解释如何做,以及它是否可能?

我能想到的最佳解决方案是将我的集成测试创建为库,然后我会在所有其他项目中导入和使用该库,但我绝对不会避免这种情况,因为它会迫使我用与项目相同的编程语言编写集成测试(假设它们是相同的)或者在其他语言上运行它。或者

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以做的是使用Python / Bash脚本扩展您当前正在做的事情;

从主项目中,使用所述脚本:

  1. 触发微服务管道(并捕获管道ID)
  2. 使用捕获的ID(可以是runningpendingfailedcanceled或{{1}来轮询管道的status })
  3. 如果失败则引发异常/错误......
  4. 这应该可以满足您的要求,但这意味着您将使用跑步者只是为了不断向GitLab实例发送卷曲请求(并且该跑步者无法接受另一项工作,具体取决于方式你已经设置了跑步者的限制和并发设置。)

    示例 run_pipeline.py

    skipped

    然后将此python脚本称为import gitlab import time, timeit import sys from datetime import timedelta gl = gitlab.Gitlab("https://your_gitlab_instance.com/", private_token="you_private_token") project = gl.projects.get('your_project') create_pipeline = project.pipelines.create({'ref': 'master'}) # Set default status = "pending" start_time = timeit.default_timer() while (status == "running" or status == "pending"): pipeline = project.pipelines.get(create_pipeline.id) status = pipeline.status elapsed_time = timeit.default_timer() - start_time formated_time = str(timedelta(seconds=elapsed_time)) sys.stderr.write("Still running pipeline... ({})\n".format(formated_time)) if status == "success": sys.stderr.write("\nPipeline success\n") break elif status == "failed": raise Exception elif status == "canceled": raise Exception time.sleep(10) 中的一个阶段。