GitLab CI 和 Docker:等到 docker-compose up 完成

ljb*_*ann 7 gitlab docker gitlab-ci gitlab-ci-runner docker-compose

我正在尝试使用 Gitlab CI/CD 构建 CI 管道。我的项目是一个基于 Symfony 的非常简单的 API。为了创建一致的环境,我将 docker-compose 与四个非常简单的容器(nginx、PHP、MySQL 和 composer)一起使用。我的 .gitlab-ci.yaml 看起来像这样:

stages:
    - setup

setup:
  stage: setup

  before_script:
    - docker-compose up -d

  script:
    - sleep 15
    - docker-compose exec -T php php bin/console doctrine:schema:create
  after_script:
    - [...] 
    - docker-compose down
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是 ci 脚本不会等到docker-compose up -d完成。为了绕过这个,我添加了这个愚蠢的睡眠。

有一个更好的方法吗?

小智 3

为了节省搜索者的时间,我实现了 @gbrener 评论的解决方案。

想法:等到获得显示容器已启动的日志,然后继续管道。

1 - 获取日志作为检查点。我使用了容器的最后一个日志。例如:生成的后端应用程序。

2 - 获取容器名称。例如:ai-server-dev。

3 - 创建一个如下所示的 sh 脚本并将其命名为 Something.sh。前任:

#!/bin/bash
while ! docker logs ai-server-dev --tail=1 | grep -q "Generated backend app";
do
    sleep 10
    echo "Waiting for backend to load ..."
done
Run Code Online (Sandbox Code Playgroud)

4 - 将“sleep 15”替换为“sh wait_server.sh”,如问题中所示,以在管道中运行脚本。