因此,我的项目包含单元测试,当我在 GitLab 中配置 CI 系统后发出合并请求时,它们会很好地显示为绿色或红色圆圈。
但现在我也有一些集成测试,它们驻留在单独的存储库中(你为什么问?因为我有多个微服务需要一起测试,并且每个微服务都有自己的存储库)。
当我在此集成测试的存储库上执行合并请求时,它们显示得很好,但我需要这些测试在其他存储库的合并请求上显示什么。
我确实设法使用 GitLab CI 给我的 URL/命令从微服务存储库触发它们,如下所示:curl -X POST -F token=... -F ref=master https://gitlab.com/api/v4/projects/.../trigger/pipeline
但在微服务的存储库中,它始终显示为绿色圆圈,这意味着它成功启动了集成测试,但我不知道如何显示测试结果(或者至少是否损坏)。
谁能给我指出正确的文档(如果有的话),或者只是向我解释如何做到这一点以及是否可能?
我能想到的最好的解决方案是将我的集成测试创建为一个库,然后我在所有其他项目中导入并使用该库,但我绝对宁愿避免这种情况,因为它会迫使我编写集成使用与项目相同的编程语言进行测试(假设它们相同),或者进行一些修改以在其他语言上运行它。
谢谢。
您可以做的是使用 Python/Bash 脚本扩展您当前正在做的事情;
从主项目中,使用所述脚本:
- 触发微服务管道(并捕获管道ID)
- 投票status https://docs.gitlab.com/ee/api/pipelines.html管道的,使用捕获的ID(可以是
running
, pending
, failed
, canceled
or skipped
)
- 如果失败则引发异常/错误...
这应该可以满足您的要求,但这意味着您将使用运行程序只是为了不断向 GitLab 实例发送curl 请求(并且该运行程序无法接受另一个作业,具体取决于您如何设置运行程序的限制和并发设置)。
Example 运行管道.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
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)