繁体   English   中英

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

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

我对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(fe Travis或CircleCI),我的工作流程始终如下:

  • 假设您有一个web节点和一个database节点
  • install步骤的travis.ymlcircle.yml中,我总是将诸如fe docker-compose run web npm install和其他内容
  • test步骤中,我将放置docker-compose run web npm test或类似docker-compose run web my-test-script.sh ,通过这种方式,您将知道测试将在声明的docker环境中运行失败,此步骤失败,并且配置项中的整个测试步骤失败,这是期望的
  • deploy步骤中,我将运行一些deploy.sh脚本,该脚本将从Dockerfile( web使用的镜像)构建映像并将其推送到Docker Hub。

这样,您的CI测试例程仍取决于特定的Docker环境,但是部署推送(不需要Docker)与应用程序分开保存,这使它更加方便。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM