2

我试图证明 Jenkins 正在从官方 docker hub jenkins 映像构建的容器中运行。

require "serverspec"
require "docker"

describe "Dockerfile" do
  before(:all) do
    image = Docker::Image.build_from_dir('./images/jenkins')

    set :os, family: :debian
    set :backend, :docker
    set :docker_image, image.id
  end

  describe process("java") do
    it { should be_running }
  end
end

我得到以下结果:

Failures:

  1) Dockerfile Process "java" should be running
     Failure/Error: it { should be_running }
       expected Process "java" to be running

     # ./spec_jenkins.rb:24:in `block (3 levels) in <top (required)>'

我是否误解了测试是针对从构建图像实例化的容器运行的?

4

1 回答 1

2

官方的 Jenkins 镜像定义了一个ENTRYPOINT而不是一个CMD.

但是,如果没有找到,则specinfra查找CMD并使用。/bin/sh

IOW,specinfra 不运行 Jenkins。我的测试失败的原因。

通过指定适当的docker_container_create_optionsspecinfra也启动 Jenkins 并且测试通过。

工作代码:

require "serverspec"
require "docker"

describe "Dockerfile" do
  before(:all) do
    image = Docker::Image.build_from_dir('./images/jenkins')

    set :os, family: :debian
    set :backend, :docker
    set :docker_image, image.id
    set :docker_container_create_options, {'Cmd' => ['/usr/local/bin/jenkins.sh']}
  end

  describe process("java") do
    it { should be_running }
  end
end
于 2015-06-08T10:50:48.373 回答