Amazon ec2 将Chef cookbook的Travis for CI用于E2实例只是在创建实例后等待SSH服务

Amazon ec2 将Chef cookbook的Travis for CI用于E2实例只是在创建实例后等待SSH服务,amazon-ec2,chef-infra,travis-ci,test-kitchen,Amazon Ec2,Chef Infra,Travis Ci,Test Kitchen,前一段时间修复了一个类似的问题,但不知何故再次陷入混乱——我的头被弄乱了 仅使用Sudo的一本简单的包装器cookbook来演示使用EC2的Travis CI作业,例如资源调配、配置和测试 虽然默认的Rake(基于vagrant的测试)和ci版本都在本地机器上成功运行,但在Travis运行期间,它将提供新实例,一旦可用,将在无休止的循环中等待 Waiting for SSH service on ec2-xx-xx-xx-xx.compute-1.amazonaws.com:22, retryi

前一段时间修复了一个类似的问题,但不知何故再次陷入混乱——我的头被弄乱了

仅使用Sudo的一本简单的包装器cookbook来演示使用EC2的Travis CI作业,例如资源调配、配置和测试

虽然默认的Rake(基于vagrant的测试)和ci版本都在本地机器上成功运行,但在Travis运行期间,它将提供新实例,一旦可用,将在无休止的循环中等待

Waiting for SSH service on ec2-xx-xx-xx-xx.compute-1.amazonaws.com:22, retrying in 3 seconds
Waiting for SSH service on ec2-xx-xx-xx-xx.compute-1.amazonaws.com:22, retrying in 3 seconds
Waiting for SSH service on ec2-xx-xx-xx-xx.compute-1.amazonaws.com:22, retrying in 3 seconds
有没有关于如何纠正的想法?在Travis上运行时,厨房似乎并没有实际接收到.pem。我将此作为运行在私有数据中心服务器上的Jenkins作业进行尝试,以尝试复制Travis容器(例如,不是dev box)上的条件,但这确实有效。这就是我所缺少的Travis配置。在传输中设置连接超时似乎无法识别

以下是相关文件:

.kitchen.ec2.yml

provisioner:
  name: chef_zero

platforms:
  - name: cloud
    driver_plugin: ec2
    driver_config:
      aws_access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
      aws_secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
      aws_ssh_key_id: <%= ENV['AWS_SSH_KEY_ID'] %>
      aws_ssh_key_path: <%= ENV['AWS_SSH_KEY_PATH'] %>
      image_id: ami-6d1c2007
      require_chef_omnibus: true
      instance_type: t2.nano
      associate_public_ip: true
      block_device_mappings:
        - ebs_device_name: /dev/sda1
          ebs_volume_size: 8
          ebs_delete_on_termination: true
      tags:
        Name: ci
    transport:
      username: centos
      ssh_key: 'org_aws_ci.pem'
      connection_timeout: 10
      connection_retries: 8

suites:
  - name: default
    run_list:
      - recipe[org-sudo::default]
    attributes:

.kitchen.ec2.yml
中,设置完整文件路径,即
ssh\u密钥:“~/.ssh/org\u aws\u ci.pem”,而不是配置密钥
ssh\u密钥。

language: ruby
  rvm:
  - 2.2.0
  before_install:
  - openssl aes-256-cbc -K $encrypted_844f1325c8ef_key -iv $encrypted_844f1325c8ef_iv -in org_aws_ci.pem.enc -out org_aws_ci.pem -d
  install:
  - bundle install --without vagrant
  - bundle exec berks install
  script:
  - bundle exec rake ci
  env:
    global:
    - secure: <travis encrypted key>
    - secure: <travis encrypted key>
    - secure: <travis encrypted key>
    - secure: <travis encrypted key>
require 'rspec/core/rake_task'
require 'rubocop/rake_task'
require 'foodcritic'
require 'kitchen'

namespace :style do
  desc 'Run Ruby style checks'
  RuboCop::RakeTask.new(:ruby)

  desc 'Run Chef style checks'
  FoodCritic::Rake::LintTask.new(:chef)
end

desc 'Run all style checks'
task style: %w(style:chef style:ruby)

namespace :integration do
  desc 'Run Test Kitchen with Vagrant'
  task :vagrant do
    Kitchen.logger = Kitchen.default_file_logger
    instance = Kitchen::Config.new.instances.get('default-local')
    instance.test
  end
  desc 'Run Test Kitchen in EC2'
  task :ec2 do
    Kitchen.logger = Kitchen.default_file_logger
    @loader = Kitchen::Loader::YAML.new(project_config: './.kitchen.ec2.yml')
    config = Kitchen::Config.new(loader: @loader)
    config.instances.each do |instance|
      instance.test(:always)
    end
  end
end

desc 'Run ChefSpec examples'
RSpec::Core::RakeTask.new(:spec)

desc 'Validate .travis.yml format'
task :validatetravis do
  sh 'travis lint --skip-completion-check'
end

task ci: %w(validatetravis style spec integration:ec2)
task default: %w(style spec integration:vagrant)