如果另一个服务状态为0(成功),Docker compose将运行服务

如果另一个服务状态为0(成功),Docker compose将运行服务,docker,continuous-integration,docker-compose,dockerfile,build-automation,Docker,Continuous Integration,Docker Compose,Dockerfile,Build Automation,我对Docker和Docker compose很陌生 我想使用docker compose来测试我的项目,如果测试正常,就发布它。如果测试失败,它根本不应该发布应用程序 这是我的docker-compose.yml version: '3' services: mongodb: image: mongo test: build: context: . dockerfile: Dockerfile.tests links:

我对Docker和Docker compose很陌生

我想使用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.yml
    circle.yml
    install
    步骤中,我总是把f.e.
    docker compose运行web npm install
    等东西放在上面
  • test
    步骤中,我将放置
    docker compose run web npm test
    或类似的
    docker compose run web my test script.sh
    ,这样您就知道测试将在声明的docker环境中运行,如果测试失败,则此步骤失败,并且CI中的整个测试步骤失败,这是所需的
  • deploy
    步骤中,我将运行一些
    deploy.sh
    脚本,该脚本将从Dockerfile(web使用的文件)构建映像,并将其推送到Docker Hub
这样,您的CI测试例程仍然取决于特定的Docker环境,但是部署推送(不需要Docker)与应用程序分开保存,这使得它更方便imho