Vagrant vs andere Möglichkeiten für die Annahmeprüfung
Bevor ich ins Detail gehen, Vagrant auf jeden Fall die richtige Wahl für die Annahme ist die Prüfung vor Ort, wie es Setup super einfach ist. Es ist jedoch viel schwieriger, in einer CI-Umgebung zu testen, da Sie alle verschiedenen Teile einrichten müssen, damit es funktioniert (Ruby, Vagrant, Virtualbox usw.). Docker ist eine gute Wahl, da es leicht ist und viele CI-Tools mit Docker-basierten Tests ausgestattet sind (zB Travis, Gitlab CI, CircleCI).
Ich gehe ins Detail here über die Verwendung von Docker. Es ist nicht perfekt, da ein Container keine echte Maschine ist: Sie können Dinge wie sysctl oder swap nicht testen. Aber es ist gut für das Testen eines grundlegenden Puppet-Moduls (Paket, Konfigurationsdateidienst).
Sie haben eine zwei wichtigsten Entscheidungen auf, was Ihren Puppet-Code zu verwenden zu testen:
Beaker-rspec
Beaker ist ein Werkzeug, durch das Release Engineering Team von Puppet geschrieben, um den Puppet Enterprise-Stack zu testen. Später wurde Beaker-rspec geboren, um eine mehr rspec-ähnliche Erfahrung mit Puppet-Modul-Tests zu geben.
Sie schreiben Tests Annahme, die wie folgt aussehen:
require 'spec_helper_acceptance'
describe 'cockpit class' do
context 'default parameters' do
# Using puppet_apply as a helper
it 'should work idempotently with no errors' do
pp = <<-EOS
class { '::cockpit': }
EOS
# Run it twice and test for idempotency
apply_manifest(pp, :catch_failures => true)
apply_manifest(pp, :catch_changes => true)
end
describe package('cockpit') do
it { is_expected.to be_installed }
end
describe service('cockpit') do
# it { is_expected.to be_enabled }
it { is_expected.to be_running }
end
context 'Cockpit should be running on the default port' do
describe command('sleep 15 && echo "Give Cockpit time to start"') do
its(:exit_status) { should eq 0 }
end
describe command('curl 0.0.0.0:9090/') do
its(:stdout) { should match /Cockpit/ }
end
end
end
end
Dann führen Sie die Tests gegen einen gewählten "Hypervisor". In Ihrem Fall wäre das vagabundierend, nehme ich an, Virtualbox zu benutzen.
konfigurieren Sie eine Host-Konfigurationsdatei wie folgt:
HOSTS:
centos-72-x64:
roles:
- master
platform: el-7-x86_64
box: puppetlabs/centos-7.2-64-nocm
hypervisor: vagrant
CONFIG:
type: foss
Dann rufen Sie das Testumgebungsvariablen Puppet Version wählen zu installieren und so (es auf die neueste Version von Puppet ausfällt und was Feld Sie‘ habe als Standard festgelegt):
$ PUPPET_INSTALL_VERSION="1.5.2" PUPPET_INSTALL_TYPE=agent BEAKER_set="centos-7-x64" bundle exec rake acceptance
/Users/petersouter/.rbenv/versions/2.3.3/bin/ruby -I/Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.4/lib:/Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/rspec-support-3.5.0/lib /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.4/exe/rspec spec/acceptance
/Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/beaker-rspec-5.3.0/lib/beaker-rspec/helpers/serverspec.rb:43: warning: already initialized constant Module::VALID_OPTIONS_KEYS
/Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/specinfra-2.67.2/lib/specinfra/configuration.rb:4: warning: previous definition of VALID_OPTIONS_KEYS was here
Beaker::Hypervisor, found some vagrant boxes to create
==> centos-72-x64: VM not created. Moving on...
Bringing machine 'centos-72-x64' up with 'virtualbox' provider...
==> centos-72-x64: Importing base box 'puppetlabs/centos-7.2-64-nocm'...
viel Ausgang es gibt (ich meine Protokolle ausführlich, aber man kann es nur bei einem Fehler auch) zeigen, aber schließlich bekommen Sie eine vorübergehende Test:
Hier ist eine Antwort auf Beaker-rspec ich auf Serverfault gab:
Hier einige andere Links erklärt Beaker-rspec und Puppet:
Test-Küche
Test-Küche ist eigentlich ein Chef-Tool, aber jemand gegabelt es zu unterstützen Marionette (und Ansible). Ich habe nicht so viel Erfahrung mit diesem, aber im Wesentlichen funktioniert es in einer sehr ähnlichen Weise: Sie konfigurieren eine Konfiguration zum Testen, wie eine Vagrant-Box, und schreiben Sie dann Tests in Form von Spec-Dateien:
require 'serverspec'
include Serverspec::Helper::Exec
include Serverspec::Helper::DetectOS
RSpec.configure do |c|
c.before :all do
c.path = '/sbin:/usr/sbin'
end
end
describe package('ntp') do
it { should be_installed }
end
describe service('ntp') do
it { should be_running }
end
hier ein paar gute Links sumarising:
Sie ein paar andere Dinge könnte hier fragen. Können Sie ein Beispiel dafür geben, was Sie zu tun versuchen? –
Ich wollte das CI, um einen Vagrant zu starten, überprüfen Sie den Exit-Code und danach sollte es einige benutzerdefinierte Tests wie eine Webseite aufrufen. – SebTM