【问题标题】:Docker-compose run service if another service status is 0 (success)如果另一个服务状态为 0(成功),则 Docker-compose 运行服务
【发布时间】:2023-04-03 19:08:02
【问题描述】:

我对 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 continuous-integration docker-compose dockerfile build-automation


    【解决方案1】:

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

    当谈到 CI(例如 Travis 或 CircleCI)时,我总是按如下方式制定工作流程:

    • 假设您有一个web 节点和database 节点
    • travis.ymlcircle.ymlinstall 步骤中,我总是将诸如 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)与应用程序分开保存,这使得它更方便恕我直言。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多