首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >返回空字符串的serverspec命令

返回空字符串的serverspec命令
EN

Stack Overflow用户
提问于 2015-08-17 20:47:24
回答 1查看 694关注 0票数 2

我正在尝试使用rspec、serverspec和docker宝石来测试Dockerfile。在大多数情况下,我的测试都是通过的,但是所有使用command方法的测试都失败了,并且返回空字符串,而不管我提供的命令是什么。

代码可以在GitHub上找到,但最突出的文件如下:

我的Dockerfile:

代码语言:javascript
运行
复制
# Dockerfile for nginx with configurable persistent volumes

# Select nginx as the base image
FROM nginx

# Mount configurable persistent volumes
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]

# Expose both HTTP and HTTPS ports
EXPOSE 80 443

# ENTRYPOINT
ENTRYPOINT ["service", "nginx", "start"]

Gemfile:

代码语言:javascript
运行
复制
source 'https://rubygems.org'

# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby

group :development, :test do
  gem 'specinfra',  '~> 2.12.7'
  gem 'serverspec', '~> 2.8.2'
  gem 'docker-api', '~> 1.21.4'
  gem 'rspec',      '~> 3.2.0'
end

规格:

代码语言:javascript
运行
复制
require 'serverspec'
require 'docker'

Excon.defaults[:ssl_verify_peer] = false

describe 'Dockerfile' do
  before(:all) do
    image =  Docker::Image.build_from_dir('.')

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

  it 'installs the right version of Debian' do
    expect(os_version).to include('Debian GNU/Linux 7')
  end

  describe package('nginx') do
    it { should be_installed }
  end

  describe service('nginx') do
    it { should be_enabled }
    it { should be_running }
  end

  describe command('nginx -V') do
    its(:stdout) { should include('http_ssl_module') }
    its(:stdout) { should include('http_gzip_static_module') }
  end

  describe port(80) do
    it { should be_listening }
  end

  describe port(443) do
    it { should be_listening }
  end

  def os_version
    command('lsb_release -a').stdout
  end
end

我知道我使用的是旧版本的宝石,但我无法使这与最新版本的工作。如果它有任何相关性,我在OS上,因此使用boot2docker。我在运行规范时得到的结果是:

代码语言:javascript
运行
复制
Failures:

  1) Dockerfile installs the right version of Debian
     Failure/Error: expect(os_version).to include('Debian GNU/Linux 7')
       expected "" to include "Debian GNU/Linux 7"

     # ./spec/dockerfile_spec.rb:16:in `block (2 levels) in <top (required)>'

  2) Dockerfile Command "nginx -V" stdout should include "http_ssl_module"
     Failure/Error: its(:stdout) { should include('http_ssl_module') }
       expected "" to include "http_ssl_module"

     # ./spec/dockerfile_spec.rb:29:in `block (3 levels) in <top (required)>'

  3) Dockerfile Command "nginx -V" stdout should include "http_gzip_static_module"
     Failure/Error: its(:stdout) { should include('http_gzip_static_module') }
       expected "" to include "http_gzip_static_module"

     # ./spec/dockerfile_spec.rb:30:in `block (3 levels) in <top (required)>'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-25 06:38:11

当处理stderr和stdout时,我发现了一些类似的东西,当上游的specinfra、2.37.02.37.1被改变时。尝试使用重定向手动运行命令,以查看输出来自何处:

代码语言:javascript
运行
复制
nginx -V 2>/dev/null

如果最后没有输出,那么它就会流到stderr中。一个解决办法是在结束时使用2>&1将所有内容放到标准输出中。

**回应意见的最新情况

代码语言:javascript
运行
复制
~$ nginx -V
nginx version: nginx/1.4.4
built by gcc 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
TLS SNI support enabled
<snip>
~$ nginx -V 2>/dev/null
~$
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32059421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档