所以我的项目有它的单元测试,当我在GitLab中配置CI系统后,当我做合并请求时,它们很好地显示为绿色或红色圆圈。
但是现在我也有一些集成测试,它们存在于一个单独的存储库中(为什么你要问?因为我有多个微服务需要一起测试,每个都有它自己的存储库)。 / p>
当我在此集成测试中执行合并请求时#39;存储库,它们很好地显示,但是我需要它来显示其他存储库的合并请求上的那些测试。
我确实设法从微服务中触发它们。带有GitLab CI给我的URL /命令的存储库,如下所示:curl -X POST -F token=... -F ref=master https://gitlab.com/api/v4/projects/.../trigger/pipeline
但在微服务方面呢?存储库,它总是显示为一个绿色圆圈,这意味着它成功启动了集成测试,但我不知道如何显示测试结果(或者至少如果它们破坏了)。
有人能指出正确的文件,如果有的话,或者只是向我解释如何做,以及它是否可能?
我能想到的最佳解决方案是将我的集成测试创建为库,然后我会在所有其他项目中导入和使用该库,但我绝对不会避免这种情况,因为它会迫使我用与项目相同的编程语言编写集成测试(假设它们是相同的)或者在其他语言上运行它。或者
谢谢。
答案 0 :(得分:1)
您可以做的是使用Python / Bash脚本扩展您当前正在做的事情;
从主项目中,使用所述脚本:
running
,pending
,failed
,canceled
或{{1}来轮询管道的status })这应该可以满足您的要求,但这意味着您将使用跑步者只是为了不断向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)
中的一个阶段。