【问题标题】:Organization of commands in makefilemakefile 中的命令组织
【发布时间】:2019-07-31 05:43:52
【问题描述】:

我有以下运行集成测试的命令:

run-it:
    docker-compose -f docker-compose-tests.yml pull && \
    docker-compose -f docker-compose-tests.yml up --build & \
    sleep 150s && dotnet test --filter TestCategory=Integration.Tests $(SOLUTION) ; docker-compose -f docker-compose-tests.yml down

我想要:

  1. 拉出所有容器
  2. 在后台运行 docker compose
  3. 在 150 秒内运行集成测试。

但看起来测试在pull 命令完成之前开始运行。

我想先跑 1 点,然后开始 2 点,然后在 2 点开始后 150 秒内开始 3 点。

【问题讨论】:

  • 看起来 150 秒的等待必须是为了让 docker-compose 完成它的工作,但如果这就是你想要做的,那么为什么要把 docker-compose 放在后台?如果拉取和构建容器的时间比您预期的要长,那么您很容易出现故障。

标签: shell docker makefile docker-compose


【解决方案1】:

在担心 make 之前,您应该确保您可以从 shell 提示符正确运行命令。在这种情况下,您误解了后台令牌& 的工作原理;它适用于命令的整个前一部分。基本上,你正在运行相当于这个:

( docker-compose -f docker-compose-tests.yml pull && \
  docker-compose -f docker-compose-tests.yml up --build ) & \
sleep 150s && ...

由于您pullup 置于后台,睡眠和测试开始同时运行到pull

尝试添加一些括号将后台进程放入子shell:

docker-compose -f docker-compose-tests.yml pull && \
  ( docker-compose -f docker-compose-tests.yml up --build & ) && \
sleep 150s && ...

【讨论】:

  • 非常感谢!我会试试的。
猜你喜欢
  • 2021-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多