Docker-如果另一个服务状态为0(成功),则组成运行服务

Docker-compose run service if another service status is 0 (success)

我对 Docker 和 Docker 撰写还很陌生。

我想使用 docker compose 来测试我的项目,如果测试正常就发布它。如果测试失败,则根本不应发布该应用程序。

这是我的 docker-compose.yml

version: '3'
services:
  mongodb:
    image: mongo
  test:
    build: 
      context: .    
      dockerfile: Dockerfile.tests
    links:
      - mongodb
  publish:
    build:
      context: .
      dockerfile: Dockerfile.publish
  ?? # I want to say here that publish step is dependent to test.

之后,在我的testAndPublish.sh文件中,我想说:

  docker-compose up

  if [ $? = 0 ]; then  # If all the services succeed
      ....
  else
      ....
  fi

所以如果测试或发布步骤失败,我不会推送它。

如何在 docker-compose 中构建类似步骤的流程? 谢谢。

我认为您试图用 docker-compose 做所有事情,这是错误的做法。

当谈到CI(f.e。Travis 或 CircleCI)时,我的工作流程总是如下:

  • 假设您有一个 web 节点和 database 个节点
  • travis.ymlcircle.yml 中的 install 步骤中,我总是放 f.e 之类的东西。 docker-compose run web npm install 和其他人
  • test 步骤我会放置 docker-compose run web npm test 或类似 docker-compose run web my-test-script.sh 的东西,这样你就会知道测试将 运行 在声明的 docker 环境,如果他们失败,则此步骤失败并且 CI 中的整个测试步骤失败,这是期望的
  • deploy 步骤我会 运行 一些 deploy.sh 脚本,它将从 Docker 文件(web 使用的文件)构建图像并将其推送到 Docker Hub.

这样你的 CI 测试例程仍然依赖于特定的 Docker 环境,但部署推送(不需要 Docker)与应用程序分开保存更方便恕我直言。