私はバブシュカでこれ以上の仕事をするつもりはありません(実際、私はしばらくしていません)。
私はアイデアを持ち、2009年にプロジェクトに取り組み始めました。当時、DockerとVagrantさえもまだ考えられていませんでした。パートでは、シェフやパペットなどのよりシンプルで小規模な代替品を構築したかったのですが、部分的には、ルビーDSLを磨くことができ、どの程度まで頼ることができるかについてのちょっとした実験として始まりました。有用な仕事をするために。私はそれに取り組んでいるボールを持っていて、多くの地獄を学びました、そして、私は最初のデザインが音を証明したことを誇りに思っています。私は実装の特定の部分をあまり誇りに思っていません - Hooweeは今日、そのコードのいくつかのビットを別の方法で書くでしょう - しかし、私たちはすべて若かったです。
最近では物事は非常に異なっています。最新の容器とそれらが提供する不変性により、Terraform、Kubernetesなどのツールとともに、Babushkaとその突然変異ベースのアプローチは非常に時代遅れです。実際、今日の深刻なインフラストラクチャの作業に古き良きバブシュカを要求することは、一種の警告サインと見なされる可能性があります。
新しいラップトップなどをセットアップすることに関しては、いくつかの設定をコピーするダムシェルスクリプトが、いくつかのdefaults write
コマンドを実行するなど、いくつかの手動の手順とともに長い道のりを学びました。メンテナンスが簡単です。自動化されたプロセスがMACOに到達するほど、互換性が速くなります。いずれにせよ、新しいマシンをセットアップすることは、完璧な自動化を目指す価値がないため、新しいマシンをセットアップすることは珍しいことです。
長年にわたって貢献し、それを利用してくれたすべての人に感謝します。いつものように、それを何らかの形で利用したい場合は、あなたの人生に向けて行きます - 私はただこのメインレポを変更するつもりはありません。多分ある雨の日、私は毛むくじゃらのビットをリファクタリングします - 私たちは見るでしょう。
乾杯とすべての最高。
Babushkaは、コンピューティングの雑用を自動化するためのコマンドラインツールです。ジョブのそれぞれの異なる部分は、そのテストをパスするためのテストとコードを含む依存関係(DEP)として表されます。
dep 'on git branch' , :branch do
met? {
current_branch = shell ( 'git branch' ) . split ( " n " ) . collapse ( /^ * / ) . first
log "Currently on #{ current_branch } ."
current_branch == branch
}
meet {
log_shell ( "Checking out #{ branch } " , 'git' , 'checkout' , branch )
}
end
上記は、正しいgitブランチにあるという控えめな目標を達成できる説明的なDEPです(分岐記号で示されるパラメーターに注意してください)。 2つのDSL単語を使用して構築されていますmet?
各DEPのロジックを含む会議(依存関係はmeet
れていますか?)を分離します(依存関係を満たします)。
支店の変更が必要なときにこのDEPを実行することは、BabushkaがMet/Meet/Metのブロックでの作業をどのように行うかを示しています。
$ bin/babushka.rb 'on git branch' branch=stable
on git branch {
Currently on master.
meet {
Checking out stable... done.
}
Currently on stable.
} ✓ on git branch
ただし、すでに正しい支店にいる場合は、最初のテストはすでに通過しているため、やるべきことはありません。
$ bin/babushka.rb 'on git branch' branch=stable
on git branch {
Currently on stable.
} ✓ on git branch
1つの孤立したタスクにとってそれはすべて非常にうまくいきます。より大きな何かを達成するためには、タスクが他のタスクをトリガーする必要があります。これは、3番目のDSLワードrequires
場所です。
dep 'on git branch' , :branch do
requires 'git'
# ...
Babushkaが上記のMet/Meet/MetファッションでDEPを処理する前に、その要件はすべて同じ方法で完了するように処理されます。それは現実を反映しています:私たちが正しいgitブランチにいるかどうかを尋ねることは、Gitがインストールされていないかどうかさえ意味がありません。
$ bin/babushka.rb 'on git branch' branch=stable
on git branch {
git {
'git' runs from /usr/bin.
✓ git is 2.3.8, which is >= 1.6.
} ✓ git
Currently on stable.
} ✓ on git branch
補完的なDSLワードは、特定のDEPが満たされていないことが判明した場合にのみ必要な依存関係を指定するためにrequires_when_unmet
を使用することができ、DEPがすでに満たされている場合にスキップできます。 (ビルドツールは、このような要件の良い例です。)
BabushkaのDSLには、DEPテンプレート、DEPソース、および残りの少数の単語など、学習すべきことが他にもありますが、上記はそのナッツです。このような数十のdepsを一緒にひもでつなぐと、サーバーをゼロからプロビジョニングするか、好きなことをすることができます。
ウェブサイトには、より詳細なドキュメントがあり、ここで見ることができます。
Babushkaは、 babushka.me/up
使用して最も簡単にインストールされます。これは、必要に応じて、システムのパッケージマネージャーを介してGit(およびその依存関係、Ruby、Git)を介してBabushkaをインストールするシェルスクリプトです。既存のシステムで実行することは安全であり、新しいシステムの最初のシェルコマンドとしても使用することを目的としています。この方法でBabushkaをインストールできますcurl
またはwget
:
sh -c "`curl https://babushka.me/up`"
手動でインストールしたい場合は、Git Repoをクローンする(またはそのアーカイブを抽出する)ことだけで、必要に応じて、 bin/babushka.rb
「babushka」としてパスにリンクします。
特定のバージョンへのロックやbabushka.me/up
使用したフォークからのインストールなど、インストールのカスタマイズに関する詳細については、インストールドキュメントを確認してください。
Babushka自体は、任意のUnixで実行する必要があります。 Babushkaの中核には、Unix、Ruby、Git以外のものを必要とするものは何もありません。
私はMacOSでBabushkaを開発し、主にUbuntuで使用しているため、HomebrewとAptは最もサポートされているパッケージマネージャーです。他の人の貢献のおかげで、いくつかのYum(Redhat/Fedora/Centos)とPacman(Arch)のサポートもあります。他のシステムでは、特定の操作(そのシステムのパッケージマネージャーを使用してパッケージをインストールするなど)はエラーメッセージで失敗しますが、それ以外の場合はBabushkaが正常に実行されるはずです。いずれにせよ、パッチは大歓迎です。
BabushkaはこれらのRubyライブラリを利用しています。
パッチを提出したり、デザインのアイデアを私と話し合ったり、テストしたり、フィードバックを与えたりすることで、バブシュカに貢献してくれたすべての人に感謝します。
ここの貢献者のリストは必然的に時代遅れです - 貢献者ページには完全なリストが含まれています。さらに、バージョンバンピングコミットは、何が変わったのか、誰がコミットメッセージで助けたのかを常に詳しく説明しています。
Babushkaは、MITライセンスに基づいてライセンスされているlib/levenshtein/levenshtein.rb
を除き、3節BSDライセンスの下でライセンスされています。
BSDライセンスはライセンスファイルで完全に見つけることができ、MITライセンスはlib/levenshtein/levenshtein.rb
の上部にあります。