Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何测试和部署Docker产品映像?_Ruby On Rails_Docker - Fatal编程技术网

Ruby on rails 如何测试和部署Docker产品映像?

Ruby on rails 如何测试和部署Docker产品映像?,ruby-on-rails,docker,Ruby On Rails,Docker,我正在RubyonRails上开发,并开始使用Docker部署一个月 以下是我正在进行的步骤 我笔记本电脑上的dev 推到gitlab 建立一个单一的形象,包括测试和生产宝石 对此映像运行rspec (通过)推送到注册表,(失败)放弃映像 有了这个工作流程,我将拥有一个包含所有测试、开发和生产宝石的单一图像 我从与许多人交谈中发现的工作流程 戴夫在我的笔记本电脑上 推到gitlab 构建测试映像(测试所需的所有gem) 对测试映像运行rspec (通过)构建另一个映像以进行部署,而不使用测试ge

我正在RubyonRails上开发,并开始使用Docker部署一个月

以下是我正在进行的步骤

  • 我笔记本电脑上的dev
  • 推到gitlab
  • 建立一个单一的形象,包括测试和生产宝石
  • 对此映像运行rspec
  • (通过)推送到注册表,(失败)放弃映像
  • 有了这个工作流程,我将拥有一个包含所有测试、开发和生产宝石的单一图像

    我从与许多人交谈中发现的工作流程

  • 戴夫在我的笔记本电脑上
  • 推到gitlab
  • 构建测试映像(测试所需的所有gem)
  • 对测试映像运行rspec
  • (通过)构建另一个映像以进行部署,而不使用测试gems,并推送到docker注册表,(失败)放弃该映像
  • 使用这种方法,我认为这违反了Docker的目的(被测试的映像应该与将要部署的映像无关)

    如何指定和实现一种测试和推送生产映像的方法?

    如“”中所述,您的第一种方法有明显的缺点:

    • 增加映像大小—因为它包含测试工具、所需的包、测试脚本,甚至测试数据
    • 使用特定于测试的配置污染映像运行时环境,甚至可能引入不必要的依赖项(集成测试需要)
    • 我们还需要决定如何处理测试结果和日志;如何以及在哪里出口它们
    另一种方法(更接近您提到的第二种方法)是制作“测试感知容器”:

    我们相信Docker应该把
    Docker测试
    作为集装箱管理生命周期的一部分

    如前所述,Docker有一个非常有用的。此指令允许我们在后续生成时触发另一个生成指令。
    基本思想是在运行
    docker test
    命令时使用
    ONBUILD
    指令

    通过
    docker test
    命令执行的流:

    docker test
    将在应用程序Dockerfile中搜索
    ONBUILD
    指令,并将

    • 生成一个临时的
      Dockerfile。从原始
      Dockerfile
    • 使用docker build命令支持的附加选项执行
      docker build-f Dockerfile.test[OPTIONS]路径
      :将自动附加到
      标记
      选项的
      -test
    • 如果构建成功,请执行
      docker run-v./tests/results:/var/tests/results[OPTIONS]IMAGE:tagtest[COMMAND][ARG…]
    • 删除
      Dockerfile.test
      文件
    (本文继续描述集成测试容器)