我有一个像这样的测试作业 yml 文件:
test-integration:
extends:
- .some_tnner
image: $SOME_IMAGE
variables:
FF_NETWORK_PER_BUILD: 'true'
services:
- name: $FIRST_SERVICE
alias: first-service
- name: $SECOND_SERVICE
alias: second-service
script:
- 'some_script'
现在我有一个问题,第二个服务依赖于第一个服务。但现在第二个服务在第一个服务的中间开始了
如何让第一个服务先完成,然后再启动第二个服务。
尝试使用
- name: $SECOND_SERVICE
alias: second-service
depends_on: first-service
但是 gitlab 抛出错误说
unknown key: depends_on
我在
GitLab-CI 语法中没有看到
depends_on
,仅在 docker-compose 中看到。
理想情况下,尝试在第一个服务的启动脚本中实现健康检查机制。这样,脚本可以定期尝试连接到第一个服务或检查指示第一个服务准备就绪的特定文件/端点:只有在运行状况检查(来自第一个服务)成功后,第二个服务才会继续执行其主要任务。
test-integration:
extends:
- .some_tnner
image: $SOME_IMAGE
variables:
FF_NETWORK_PER_BUILD: 'true'
services:
- name: $FIRST_SERVICE
alias: first-service
- name: $SECOND_SERVICE
alias: second-service
script:
- 'some_script' # first service
- './second_service_startup.sh'
second_service_startup.sh
#!/bin/bash
while ! curl -s http://first-service:1234/healthcheck | grep "OK"; do
echo "Waiting for first-service to be ready..."
sleep 5
done
echo "first-service is ready! Starting second service tasks..."
# ...
这是一个简化版本:您应该在运行状况检查或等待循环中实现超时,以防止第一个服务无法正确启动时无限期挂起。