Amazon ec2 将Chef cookbook的Travis for CI用于E2实例只是在创建实例后等待SSH服务
前一段时间修复了一个类似的问题,但不知何故再次陷入混乱——我的头被弄乱了 仅使用Sudo的一本简单的包装器cookbook来演示使用EC2的Travis CI作业,例如资源调配、配置和测试 虽然默认的Rake(基于vagrant的测试)和ci版本都在本地机器上成功运行,但在Travis运行期间,它将提供新实例,一旦可用,将在无休止的循环中等待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
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)