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

时间:2017-03-06 08:53:01

标签: docker continuous-integration docker-compose dockerfile build-automation

我对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中构建类似于进程的步骤? 感谢。

1 个答案:

答案 0 :(得分:0)

我认为你正试图用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脚本,该脚本将从Dockerfile(web使用的那个)构建映像,并将其推送到Docker Hub。

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