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

Continuous integration 如何在GitLab CI中显示来自另一个存储库的测试,continuous-integration,gitlab,integration-testing,Continuous Integration,Gitlab,Integration Testing,因此,我有我的项目和它的单元测试,当我在GitLab中配置CI系统后执行合并请求时,它们会很好地显示为绿色或红色圆圈 但现在我还有一些集成测试,它们驻留在一个单独的存储库中(为什么要问?因为我有多个微服务需要一起测试,每个都有自己的存储库) 当我在这个集成测试的存储库上执行合并请求时,它们会很好地显示出来,但是我需要这些测试在其他存储库的合并请求上显示什么 我确实通过GitLab CI给我的URL/命令成功地从微服务的存储库触发了它们,类似这样:curl-X POST-F token=-F re

因此,我有我的项目和它的单元测试,当我在GitLab中配置CI系统后执行合并请求时,它们会很好地显示为绿色或红色圆圈

但现在我还有一些集成测试,它们驻留在一个单独的存储库中(为什么要问?因为我有多个微服务需要一起测试,每个都有自己的存储库)

当我在这个集成测试的存储库上执行合并请求时,它们会很好地显示出来,但是我需要这些测试在其他存储库的合并请求上显示什么

我确实通过GitLab CI给我的URL/命令成功地从微服务的存储库触发了它们,类似这样:
curl-X POST-F token=-F ref=主https://gitlab.com/api/v4/projects/.../trigger/pipeline

但在micro services的存储库中,它总是显示为绿色圆圈,这意味着它成功地启动了集成测试,但我不知道如何显示测试结果(或者至少不知道测试结果是否损坏)

谁能给我指出正确的文档,如果有,或者只是向我解释如何做,如果可能的话

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


谢谢。

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

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

  • 触发微服务管道(并捕获管道ID)
  • 使用捕获的ID(可以是
    正在运行
    挂起
    失败
    取消
    跳过
    )轮询管道的
  • 如果失败,则引发异常/错误
  • 这应该满足您的要求,但这意味着您将使用一个运行程序来不断地向GitLab实例发送一个curl请求(并且这个运行程序无法接受另一个作业,这取决于您如何设置运行程序的限制和并发设置)


    示例运行管道.py

    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)
    

    然后将此python脚本称为您的
    gitlab ci.yml

    中的一个阶段。如果您有多个repo,但每个repo只有在一切都通过时才能合并,那么与mono repo相比,您有什么优势?所有微服务的优势:团队可以独立工作;项目可以用不同的编程语言编写;等等。另外,多个存储库的决定不值得讨论:/(注:不是我的决定)。这是微观服务,不是多重回购。基本上,这听起来像是你被要求建立一个支离破碎的单一回购协议。但是,是的,我想这超出了问题的范围;)通常每个微服务都是在一个单独的存储库中创建的,特别是如果你想单独扩展它们或者支持多种语言,那么我该怎么做呢?确切的Python脚本是什么?我在哪里配置它?@RodrigoRuiz这将是存储库中您自己的自定义Python脚本,您可以调用它来代替当前的构建触发器。例如,您可以使用或编写自己的方法来执行此操作