在 docker compose 日志上的 grep 在 CircleCI 上的直到循环中意外返回 255 退出代码

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

对于我的应用程序,我使用的是 kafka,我想要一种方法来确保我在尝试在 CI 测试套件中运行应用程序 e2e 测试之前正确等待它准备好。为了实现这一点,我使用了

until
bash 关键字,并在日志中查找一行以表明它已准备就绪,
started (kafka.server.KafkaServer)
。完整的设置是:

until docker compose logs kafka 2>/dev/null | grep -q "started (kafka.server.KafkaServer)"; do
  sleep 1
done

我发现如果这个循环在kafka完全启动并准备好之前运行,那么until会按预期循环,直到kafka正确准备好。但是,如果此循环在 docker 容器启动后运行,则循环永远不会结束,并且从我的测试中,我从中得到一致的 255 错误代码。但是,如果我在循环中添加相同的 grep 行,我确实会看到该行始终被找到并且我得到 $? = 0,所以我不确定问题出在哪里。

作为参考,这是我正在运行的遇到问题的完整 CircleCI 命令:

- run: name: 'Start background services' working_directory: services background: true command: docker-compose up - run: name: 'Build images for app' working_directory: app command: docker-compose build - run: name: 'Wait for services' working_directory: services command: | until docker compose logs kafka | grep -q "started (kafka.server.KafkaServer)"; do sleep 1 done echo "Kafka is ready"

如果构建图像步骤需要 >= 1 分钟,我会在 
until

循环中遇到错误,永远不会完成,而如果图像完全缓存,则循环工作正常。

    

bash apache-kafka circleci
1个回答
0
投票

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