如何仅运行一次服务并在多个作业中使用它

问题描述 投票:0回答:1

这是我的用例:

我有一个启动速度非常慢的服务,因此在每个测试用例中都启动它是不切实际的。 我有大约 20 个测试套件要在该服务上运行。我想将它们划分为独立的工作,以便在其中一个失败时可以单独重新运行。

所以,我想在之前的一项工作中启动该服务到测试阶段,然后在整个测试阶段使用它。这可能吗?

我希望 gitlab 有一些选项来创建可以添加到作业中的服务,如下所示:

job: 
   script:
      - service start
      - echo "Service started"

test:
   services:
      - job
   script:
      - test on job:8080
gitlab-ci integration
1个回答
0
投票

不,

services:
与作业的生命周期相关。服务容器无法跨作业持久化。


但是,在“自托管”docker 运行程序上,您可以使用容器链接与主机上管理的容器来配置“类似”的内容。这可以使用 runner 配置links 部分中的

[runners.docker]
参数来完成。也就是说:您可以在运行程序主机上运行一个容器,并自动将该容器链接到运行程序的“所有”作业,类似于每个作业链接服务的方式。但是,运行程序不会为您管理容器,因此启动或停止容器或管理并发访问等操作必须由您自己完成。
例如,在我的运行器主机上,我可以启动一个持久的容器并将其链接到运行器上的所有作业。
首先,在运行器主机上启动容器。在本例中,一个简单的 HTTP 服务:
docker run -d \
           --name=my_container \
           -p 80 \
           strm/helloworld-http:latest

然后在运行器中

config.toml

我将配置

links
参数:

# ... [runners.docker] # ... links = ["my_container:my-service-hostname"]

然后在这个运行器上的所有作业中,我应该能够访问容器:
myjob:
  script:
    - curl http://my-service-hostname

© www.soinside.com 2019 - 2024. All rights reserved.