在 test-kitchen 中,个人使用的驱动程序和配置为.kitchen.yml文件的组合
ChefDK导入后,使用chef generate cookbook命令创建cookbook时,生成的.kitchen.yml是支持以下组合的配置文件。
-
- ローカルのVirtualBox上 ubuntu, centos
-
- Chef
- Inspec
然而,test-kitchen可以在各种组合中使用。
目标:
-
- ローカルのVirtualBox上 ubuntu, centos
-
- ローカルのdocker 上 ubuntu, centos
- 既に稼働している既存のサーバー
部署工具
-
- chef (対象にchef-clientを導入してchefzeroモードで適用)
-
- ansible (ローカルに導入されたansibleからリモート適用)
- ansible (対象に導入してローカルモードで適用)
个人而言,我通常会经常使用以下组合。
如果需要测试,则使用Inspec。
对于将Ansible(远程反映)应用于现有服务器的情况,只需使用ansible-playbook命令就可以处理,因此其优点会稍稍减弱。
个人而言,不使用Ansible(本地反映)的情况,但在需要更改Ansible版本并进行测试的情况下可能很有用。
厨师 + 虚拟机
驱动程序: Vagrant
配置程序: Chef Zero
使用chefDK提供的chef命令来创建cookbook的模板,并设置为标准组合。
$ chef generate cookbook mybook
Generating cookbook mybook
- Ensuring correct cookbook file content
- Committing cookbook files to git
- Ensuring delivery configuration
- Ensuring correct delivery build cookbook content
- Adding delivery configuration to feature branch
- Adding build cookbook to feature branch
- Merging delivery content feature branch to master
Your cookbook is ready. Type `cd mybook` to enter it.
There are several commands you can run to get started locally developing and testing your cookbook.
Type `delivery local --help` to see a full list.
Why not start by writing a test? Tests for the default recipe are stored at:
test/integration/default/default_test.rb
If you'd prefer to dive right in, the default recipe can be found at:
recipes/default.rb
---
driver:
name: vagrant
provisioner:
name: chef_zero
# You may wish to disable always updating cookbooks in CI or other testing environments.
# For example:
# always_update_cookbooks: <%= !ENV['CI'] %>
always_update_cookbooks: true
verifier:
name: inspec
platforms:
- name: ubuntu-16.04
- name: centos-7
suites:
- name: default
run_list:
- recipe[mybook::default]
verifier:
inspec_tests:
- test/integration/default
attributes:
需要在本地计算机上安装 VirtualBox 和 Vagrant 才能继续操作。
Ansible(远程部署)+ VirtualBox
驱动程序:Vagrant
配置工具:Ansible(推送方式)
---
driver:
name: vagrant
provisioner:
name: ansible_push # https://github.com/ahelal/kitchen-ansiblepush
sudo: true
chef_bootstrap_url: nil
use_instance_name: true
verifier:
name: inspec
platforms:
- name: centos-7
suites:
- name: ansiblepush
provisioner:
playbook: site.yml
verifier:
inspec_tests:
- test/integration/default
attributes:
在 Ansible 相关的 provisioner 中,存在两个选项:ansible 和 ansible_push。然而,通常使用 ansible_push 来使用本地机器的 Ansible。
请参考:
-
- kitchen-ansiblepushを利用したAnsible roleのテスト環境構築
- test-kitchenによるvagrantノードへのansible_pushによる収束と変数を連携してのinspecによるテスト
厨师 + Docker
司机:dokken
供应商:dokken(厨师)
<% cookbook = %x( awk '$1 == "name" {print $2}' metadata.rb ).chomp.gsub(/['"]/, '') %>
---
driver:
name: dokken
chef_version: latest
transport:
name: dokken
provisioner:
name: dokken
verifier:
name: inspec
inspec_tests:
- test/integration/default
platforms:
- name: centos-7
driver:
image: dokken/centos-7
suites:
- name: default
run_list:
- recipe[<%= cookbook %>::default]
前提条件是本地已经安装了ChefDK和Docker。
kitchen-dokken包含在ChefDK中。
参考:
-
- GitHub – someara/kitchen-dokken: rokken
-
- [和訳] Kitchen-DockerかKitchen-Dokkenか? Test KitchenとDockerを使用してCookbookのテストを高速化 #getchef #kitchenci #docker
- kitchen-docker を断念した人は kitchen-dokken を試してみよう – Qiita
Ansible(远程映射)+ Docker
驱动程序:Docker
配置程序:Ansible Push
---
driver:
name: docker
provisioner:
name: ansible_push
chef_bootstrap_url: nil
become: true
verifier:
name: inspec
platforms:
#- name: ubuntu-16.04
- name: centos-7
suites:
- name: ansiblepush
provisioner:
playbook: site.yml
verifier:
inspec_tests:
- test/integration/default
需要先安装 kitchen-docker gem。
$ gem install kitchen-docker
Refer to:
-
- kitchen-ansiblepushを利用したAnsible roleのテスト環境構築
- test-kitchenによるvagrantノードへのansible_pushによる収束と変数を連携してのinspecによるテスト
厨师 + 现有服务器
驾驶员:代理
供应商:chef_zero
对具有SSH连接功能的现有服务器进行由Chef进行的更改。
<% hosts = ENV['HOSTS'].split(',') %>
<% cookbook = %x( awk '$1 == "name" {print $2}' metadata.rb ).chomp.gsub(/['"]/, '') %>
---
provisioner:
name: chef_zero
always_update_cookbooks: true
sudo: false
product_name: chef
install_strategy: skip
data_path: data
verifier:
name: inspec
sudo: false
inspec_tests:
- test/integration/default
platforms:
- name: unix
run_list:
- recipe[<%= cookbook %>::default]
suites:
<%
hosts.each do |host|
%>
- name: <%= host %>
driver:
name: proxy
host: <%= host %>
sudo: false
reset_command: 'exit 0'
ssh_key: ~/.ssh/id_rsa
<% end %>
设置环境变量HOSTS以指定连接目标并调用kitchenCI。
加上 -p 可以实现并行执行。
运行以下命令进行测试:$ env HOSTS=node1,node2 kitchen test