概要
更に kitchen-docker を使うので毎回クリーンな環境に対して実際にレシピを実行してテストすることができます
環境
- macOS 15.4
- docker 28.1.1
- Ruby 3.4.3
- kitchen 3.0.0
- chef 18.7.6
必要な gem のインストール
- vim Gemfile
# frozen_string_literal: true
source 'https://rubygems.org'
group :development do
gem 'csv'
gem 'inspec'
gem 'kitchen-docker'
gem 'kitchen-inspec'
gem 'test-kitchen'
end
テストの作成
- vim test/integration/default/default_test.rb
# frozen_string_literal: true
emacs_binary = '/usr/local/bin/emacs'
control 'emacs-install' do
impact 1.0
title 'Check Emacs installation'
describe file(emacs_binary) do
it { should exist }
it { should be_executable }
end
describe command("#{emacs_binary} --version") do
its('exit_status') { should eq 0 }
expect = /GNU Emacs/
its('stdout') { should match expect }
end
end
kitchen 用の設定ファイルの作成
- vim .kitchen.yml
driver:
name: docker
provisioner:
name: chef_zero
platforms:
- name: ubuntu-22.04
suites:
- name: default
run_list:
- recipe[cookbooks-emacs::default]
attributes:
owner: root
group: root
verifier:
name: inspec
動作確認
- bundle exec kitchen test
最初に kitchen でテストするようのイメージをビルドします
そしてそのイメージを元に chef を実行するコンテナが起動します
% docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fe474147bd7b 3d1e259aa0fe "/usr/sbin/sshd -D -…" 36 minutes ago Exited (0) 27 minutes ago defaultubuntu2204-username-machinename-6n9j5hv9
% docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 3d1e259aa0fe About an hour ago 241MB
おまけ: Github Action で実行する
- vim .github/workflows/kitchen.yml
name: Kitchen test
on:
push:
branches:
- "master"
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- name: Install dependencies
run: bundle install
- name: Set up Docker
uses: docker/setup-docker-action@v3
- name: Run Test Kitchen
run: |
bundle exec kitchen test
env:
CHEF_LICENSE: accept
CHEF_LICENSE: accept を忘れずに設定しましょう
トラブルシューティング
[2025-05-18T10:28:25+09:00] ERROR: Chef InSpec cannot execute without valid licenses.
基本は InSpec を使うのにライセンスが必要なのでライセンス登録をしましょう (有償)
もしくは verifier の name を shell にすることでも対応できます
最後に
kitchen-docker を使えば簡単に cookbooks をクリーンな環境で毎回テストできます
Github Action でも使えるので
0 件のコメント:
コメントを投稿