2017-07-15 2 views
0

In vielen Projekten verwende ich Vagrant with Puppet, um eine Kopie der Live-Umgebung für die Entwicklung zu haben. Manchmal muss ich gerade bei kleinen Projekten oft eine Änderung vornehmen, ich versorge die Vagabundenbox neu und es scheitert!Automatisches Testen von Vagrant-Umgebungen

Gibt es eine Möglichkeit, die Vagrant Box mit Continuous Integration zu testen?

Ich muss überprüfen, dass die Box-Bestimmungen ohne einen Fehler, und führen Sie einige benutzerdefinierte Tests, z. B. das Öffnen einer Webseite.

+0

Sie ein paar andere Dinge könnte hier fragen. Können Sie ein Beispiel dafür geben, was Sie zu tun versuchen? –

+0

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

Antwort

1

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:

Verwandte Themen