開発環境の迅速な展開

開発段階に近い開発およびテスト環境の展開にかかる高コストを回避するために(開発段階と本番段階のパリティ )、環境の仮想化はますます一般的になっています。

この記事では、 Vagrantを例として使用して、 runit-manプロジェクトを使用して適切な再現可能な開発環境を作成した方法を説明します。

まず、 VirtualBoxとVagrant自体をインストールする必要があります。 VirtualBoxは、同じバージョンのゲスト拡張機能とともにインストールすることを強くお勧めします。そうしないと、展開が不安定になります。 MacOS X用に開発しているので、VirtualBoxの最新バージョンに対応するゲスト拡張機能がないことが重要でした。 したがって、VirtualBox 4.1.0とVagrant 1.0.1をインストールする必要がありました。

次に、lucid32という名前でUbuntu OSのイメージを使用しました(この段階でどのOSを使用するかは基本的に気にしませんでした)。
vagrant box add lucid32 http://files.vagrantup.com/lucid32.box 


その後、彼はrunit-manプロジェクトディレクトリに移動し、vagrant vagrant init

ターゲットシステムで、ソースリポジトリのmasterブランチからrunit-manプロジェクトであるrunitをデプロイし、ポート14500でrunit-manサービスを実行する必要があります。これは、ブラウザーを介した簡単なテストのためにメインオペレーティングシステムのポート14500に転送する必要があります。

Vagrantで使用するために準備されたシステムイメージにはすでにルビーが含まれており、Chef、Puppet、またはその他のツールを使用して展開する準備ができています。

私にとって最も簡単な方法は、Chefサーバーをインストールする必要のないソロモードでChefを使用することでした。

したがって、彼はクックブックフォルダーを作成し、そこでレシピプロビジョニングのコレクションを作成しました。

Vagrantfileは次のフォームを取得しました。
 # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant::Config.run do |config| # Every Vagrant virtual environment requires a box to build off of. config.vm.box = "lucid32" # Forward a port from the guest to the host, which allows for outside # computers to access the VM, whereas host only networking does not. config.vm.forward_port 14500, 14500 # Enable provisioning with chef solo, specifying a cookbooks path (relative # to this Vagrantfile), and adding some recipes and/or roles. config.vm.provision :chef_solo do |chef| chef.cookbooks_path = "cookbooks" chef.add_recipe "provisioning" end end 


runitをデプロイするために、クックブックディレクトリにrunitレシピのコレクション( GitHubからダウンロード)を配置しました。

したがって、プロビジョニングコレクションがrunitコレクション(cookbooks / provisioning / metadata.rb)に依存することを示す必要があります。
 maintainer "Akzhan Abdulin" maintainer_email "akzhan.abdulin@gmail.com" license "MIT License" description "runit-man development VM" version "0.1" depends "runit" 


vagrant upを使用して空のインストールを展開し、SSH( vagrant ssh )ですべてをテストした後、プロビジョニング::デフォルトのレシピを段階的に説明しvagrant ssh

これを行うには、Bundlerを介して必要なgemを配信し、Gitをインストールし、リポジトリとrunit-manサービス(クックブック/プロビジョニング/レシピ/ default.rb)をデプロイする必要があります。
 package "git-core" gem_package "bundler" git "/home/runit-man" do repository "git://github.com/Undev/runit-man.git" end bash "bundle" do code "cd /home/runit-man && bundle install --without development" end runit_service "runit-man" 


runit_serviceの定義は自動的に実行され、提供されたテンプレートを使用してrunit-manサービスが作成されます。

run-script(クックブック/プロビジョニング/テンプレート/デフォルト/ sv-runit-man-run.erb):
 #!/bin/bash exec 2>&1 export PATH="$PATH:/opt/ruby/bin" exec ruby /home/runit-man/local-run.rb --rackup 'bundle exec rainbows -c rainbows.conf -p 14500' 

log-run-script(クックブック/プロビジョニング/テンプレート/デフォルト/ sv-runit-man-log-run.erb)。
 #!/bin/bash mkdir -p /var/log/runit-man exec svlogd -tt /var/log/runit-man 


ここで環境の初期展開が完了します(私の場合、さまざまな境界ケースでrunit-manを確認する環境が必要でした。この環境では開発が行われないため、開発用のパッケージはインストールされませんでした)。

これで、 vagrant destroy -f; vagrant upを実行できますvagrant destroy -f; vagrant up vagrant vagrant destroy -f; vagrant upして、runit-manサービス(http:// localhost:14500 /)を確認します。

追加のボーナス:レシピコレクションの同じセットを使用して、動作環境を展開することもできます。

参照:

Source: https://habr.com/ru/post/J140714/


All Articles