Jak ludzie testują książki kucharskie opsworks?
[[0]}mam dość skomplikowane wdrożenie dynamicznie skonfigurowanych instancji aplikacji kolejowych na nginx przy użyciu pasażera, do którego obecnie używam Capistrano. Staram się zautomatyzować cały proces na Opworks od tworzenia stosu, warstw, instancji i dynamicznego wdrażania aplikacji. Żaden z istniejących receptur Opworks zbliżyć się do tego, czego potrzebuję, więc zacząłem własne niestandardowe książki kucharskie. Próbuję je przetestować za pomocą test-kitchen i vagrant, ale Książki kucharskie Opsworks mają zbyt wiele niestandardowych zależności do wykorzystania lokalnie. Wydaje się więc, że utknąłem albo ponownie wymyślając koło, używając tylko własnych przepisów, które nie zależą od książek kucharskich Opworks lub próbując przetestować moje książki kucharskie na AWS, który jest powolny i drogi.
Czy ktos robi jakis custom Cookbook development na Opworks i jesli tak to jak go testujecie? Czy korzystasz z książek kucharskich społeczności i jeśli tak, jak bolesne były one, aby pracować nad Opworks?
6 answers
Opsworks obsługuje teraz Chef 11.10 i Berkshelf ( http://berkshelf.com/) do zarządzania zależnościami, co sprawia, że korzystanie z niestandardowych książek kucharskich tak. much. łatwiej.
Byłem całkiem zadowolony z kuchni testowej ( https://github.com/test-kitchen/test-kitchen ) z Vagrant & Chef Solo do testów lokalnych.
DODATKOWO możesz ręcznie uruchamiać poszczególne receptury na stosie Opworks ze strony Ustawienia stosu. Zajrzyj tutaj: http://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook-manual.html .
Możesz również uruchomić testy książki kucharskiej podczas wdrażania Opsworks z niestandardowym JSON: http://docs.aws.amazon.com/opsworks/latest/userguide/troubleshoot-debug-test.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-06 12:57:24
Używamy Opworks z wieloma niestandardowymi książkami kucharskimi, a także vagrant. Chociaż zasięg testu jest daleki od doskonałości, działa całkiem gładko, dostosowując również społecznościowe książki kucharskie. Nasze repozytorium książek kucharskich jest publiczne: https://github.com/till/easybib-cookbooks
Ciekawe fragmenty tego repo to:
- używamy receptury roli jako punktu wejścia dla każdej warstwy zamiast określania wielu receptur z warstwą w opsworks: https://github.com/till/easybib-cookbooks/blob/master/easybib/recipes/role-nginxapp-api.rb
- sprawdzamy czy przepis jest w AWS czy w Vagrant używając niestandardowej funkcji bibliotecznej: https://github.com/till/easybib-cookbooks/blob/master/easybib/libraries/easybib.rb#L208-L216
- wszystkie książki kucharskie/dostawcy specyficzne dla opsworks są zwykle używane tylko w deploy-cookbook, które uwzględniamy tylko wtedy, gdy
is_aws
jest prawdziwe, w przeciwnym razie wycofujemy się z domyślnej aplikacji rozlokowanie.
Przeglądanie naszych książek kucharskich powinno dać ci więcej wskazówek na swoje pytania. Testujemy nasze książki kucharskie z Travis, i nie testować opworks książki kucharskie w ogóle. Chociaż muszę zauważyć, że obecnie bawię się tam z kilkoma pomysłami, jak zintegrować je z naszymi testami, ponieważ bez ich dostawców testowanie naszej deploy cookbook jest prawie niemożliwe.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-30 22:47:20
Istnieje wiele przydatnych sugestii na tej stronie, ale Gorąco polecam wszystkim sprawdzić Mike Greiling ' s blog post uprościć rozwój OpsWorks z Packer i jego github repo opsworks-vm które pomogą Ci naszkicować cały stos opsworks, w tym instalację agenta opsworks, dzięki czemu można również testować receptury wdrażania aplikacji, wiele warstw, wiele instancji w tym samym czasie, itp . Jest to niezwykle imponujące.
Szybki Start Ubuntu 14.04
Uwaga: nie można tego zrobić z maszyny wirtualnej ubuntu, ponieważ virtualbox nie obsługuje zagnieżdżonej wirtualizacji maszyn 64-bitowych.
- Install ChefDK
mkdir /tmp/packages && cd /tmp/packages
wget https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/12.04/x86_64/chefdk_0.8.1-1_amd64.deb
sudo dpkg -i chefdk_0.8.0-1_amd64.deb
cd /opt/chefdk/
chef verify
which ruby
echo 'eval "$(chef shell-init bash)"' >> ~/.bash_profile && source ~/.bash_profile
- zainstaluj VirtualBox
echo 'deb http://download.virtualbox.org/virtualbox/debian vivid contrib' > /etc/apt/sources.list.d/virtualbox.list
wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
sudo apt-get update -qqy
sudo apt-get install virtualbox-5.0 dkms
- Install Vagrant
cd /tmp/packages
wget https://dl.bintray.com/mitchellh/vagrant/vagrant_1.7.4_x86_64.deb
sudo dpkg -i vagrant_1.7.4_x86_64.deb
vagrant plugin install vagrant-berkshelf
vagrant plugin install vagrant-omnibus
vagrant plugin list
- Install Packer
mkdir /opt/packer && cd /opt/packer
wget https://dl.bintray.com/mitchellh/packer/packer_0.8.6_linux_amd64.zip
unzip packer_0.8.6_linux_amd64.zip
echo 'PATH=$PATH:/opt/packer' >> ~/.bash_profile && source ~/.bash_profile
- Zbuduj OpsWorks-vm obraz virtualbox przy użyciu Pakowacz
mkdir ~/packer && cd ~/packer
git clone https://github.com/pixelcog/opsworks-vm.git
cd opsworks-vm
rake build install
- spowoduje to zainstalowanie nowej maszyny wirtualnej virtualbox do~/.włóczęga.d / boxes/ubuntu1404-opsworks/
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu1404-opsworks"
config.vm.provision :opsworks, type: 'shell', args: 'path/to/dna.json'
end
Ścieżka pliku dna.json
jest ustawiona względem pliku Vagrantfile i powinna zawierać wszelkie dane JSON, które chcesz wysłać do OpsWorks Chef.
Na przykład:
{
"deploy": {
"my-app": {
"application_type": "php",
"scm": {
"scm_type": "git",
"repository": "path/to/my-app"
}
}
},
"opsworks_custom_cookbooks": {
"enabled": true,
"scm": {
"repository": "path/to/my-cookbooks"
},
"recipes": [
"recipe[opsworks_initial_setup]",
"recipe[dependencies]",
"recipe[mod_php5_apache2]",
"recipe[deploy::default]",
"recipe[deploy::php]",
"recipe[my_custom_cookbook::configure]"
]
}
}
Aby wyśmiewać wiele opsworks instancje i warstwy zawierają zobacz jego AWS OpsWorks" Getting Started " przykład, który zawiera stos .json poniżej.
Vagrantfile (dla wielu instancji)
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu1404-opsworks"
# Create the php-app layer
config.vm.define "app" do |layer|
layer.vm.provision "opsworks", type:"shell", args:[
'ops/dna/stack.json',
'ops/dna/php-app.json'
]
# Forward port 80 so we can see our work
layer.vm.network "forwarded_port", guest: 80, host: 8080
layer.vm.network "private_network", ip: "10.10.10.10"
end
# Create the db-master layer
config.vm.define "db" do |layer|
layer.vm.provision "opsworks", type:"shell", args:[
'ops/dna/stack.json',
'ops/dna/db-master.json'
]
layer.vm.network "private_network", ip: "10.10.10.20"
end
end
Stack.json
{
"opsworks": {
"layers": {
"php-app": {
"instances": {
"php-app1": {"private-ip": "10.10.10.10"}
}
},
"db-master": {
"instances": {
"db-master1": {"private-ip": "10.10.10.20"}
}
}
}
},
"deploy": {
"simple-php": {
"application_type": "php",
"document_root": "web",
"scm": {
"scm_type": "git",
"repository": "dev/simple-php"
},
"memcached": {},
"database": {
"host": "10.10.10.20",
"database": "simple-php",
"username": "root",
"password": "correcthorsebatterystaple",
"reconnect": true
}
}
},
"mysql": {
"server_root_password": "correcthorsebatterystaple",
"tunable": {"innodb_buffer_pool_size": "256M"}
},
"opsworks_custom_cookbooks": {
"enabled": true,
"scm": {
"repository": "ops/cookbooks"
}
}
}
Dla tych, którzy nie znają vagranta, wystarczy wykonać vagrant up
, Aby uruchomić instancję(instancje). Następnie możesz modyfikować książkę kucharską lokalnie, a wszelkie zmiany można zastosować, uruchamiając ponownie chef przeciwko istniejącym instancjom za pomocą vagrant provision.
możesz wykonać vagrant destroy
i vagrant up
, Aby zacznij od zera.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-12 14:09:56
Opworks cookbooks opiera się na niestandardowych pudełkach, więc skonfigurowanie lokalnej maszyny Wirtualnej, w której można uruchamiać ich książki kucharskie obok swoich, to wyzwanie.]}
Na szczęście ich Ubuntu box został odtworzony przez ten projekt. https://github.com/wwestenbrink/vagrant-opsworks
/ Align = "center" bgcolor = "# e0ffe0 " / cesarz chin / / align = center / https://github.com/erupenkman/opsworks-exampleWith this you może faktycznie przetestować w prawie identycznym środowisku lokalnym przed wdrożeniem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-24 23:41:50
Checkout Travis - ci i sous-chef może się okazać, że nadaje się do testowania książek kucharskich itp.
Https://github.com/michaelklishin/sous-chef http://docs.travis-ci.com/user/deployment/opsworks/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-27 09:48:07
Udało mi się rozwiązać ten problem używając Chef+Kitchen+Vagrant
Oto moje opakowanie: https://github.com/elitechance/opsworks-cookbooks-wrapper
Poniżej jak przetestować
Git clone https://github.com/elitechance/opsworks-cookbooks-wrapper.git
Git clone https://github.com/aws/opsworks-cookbooks.git
CD opsworks-cookbooks-wrapper
Cp .kuchnia.próbka.yml .kuchnia.yml
Cp Berksfile.próbka Berksfile
Metadane Cp.próbka.metadane rb.rb
Ostatnie polecenie symuluje Ustawienia OpsWorks NodeJS, zobacz szczegóły .kitchen.sample.yml
.
$ chef exec kitchen setup
ZNANE BŁĘDY
Przy pierwszym uruchomieniu $ chef exec kitchen setup
napotkasz błędy mówiące:
Uruchomione programy obsługi: [2016-04-08t17:08:34+00: 00] błąd:uruchomione programy obsługi wyjątków zakończone programy obsługi wyjątków zakończone [2016-04-08t17:08:34+00: 00] błąd: program obsługi wyjątków zakończony nie powiodło się. 43 zasoby zaktualizowane w 01 minut 02 sekund [2016-04-08t17:08:34+00:00] FATAL: Stacktrace wyrzucony do /tmp/kitchen/cache/chef-stacktrace.out [2016-04-08t17:08:34+00:00] FATAL: proszę podać zawartość stosu.out file jeśli zgłosisz błąd [2016-04-08t17:08:34+00:00] ERROR: ruby_blockFallback for remote_file [/tmp/rubygems-2.2.2.tgz] wystąpił błąd: NoMethodError: remote_file / tmp / rubygems-2.2.2.w tgz wystąpił błąd: NoMethodError: undefined metoda `to_sym ' dla [:create]:Array [2016-04-08t17:08:34+00:00] FATAL: Chef:: Exceptions:: ChildConvergeError: Chef uruchom proces zakończony bezskutecznie (kod wyjścia 1)
Just run again:
$ chef exec kitchen setup
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-11 14:56:12