我不打算在babushka上做任何其他工作(實際上我已經有一段時間沒有這樣做了)。
我有了這個想法,並於2009年開始從事該項目。當時,Docker甚至Vagrant尚未構想。在某種程度上,我想建立一個更簡單的小規模替代品,與廚師和木偶之類的替代品,部分是在我可以磨練Ruby DSL的多遠之類的實驗中,以及我在多大程度上可以依靠它做有用的工作。我有一個球在努力,學到了很多地獄,我為最初的設計被證明是合理的事實感到自豪。我為實施的某些部分感到不自豪 - Hoowee今天會以不同的方式寫一些代碼 - 但後來我們都年輕。
這些天,情況大不相同。借助現代容器及其提供的不變性,以及Terraform,Kubernetes等工具,Babushka及其基於突變的方法的過時了。實際上,當今需要良好的舊babushka進行認真的基礎設施工作可能被認為是一種警告信號。
至於設置新筆記本電腦等等,我學會了很長的路要好,一個笨拙的shell腳本將某些偏好複製到位,運行一些defaults write
命令,依此類推,依此類推,以及一些手動步驟,更容易維護。自動化的過程越多地進入MACOS,它將越快脫離兼容性,在任何情況下,設置新機器的情況對我來說很少發生,以至於不值得瞄準完美的自動化。
多年來,所有貢獻並利用它的人。與往常一樣,如果您想以任何方式利用它,請努力 - 我只是不打算對此主要存儲庫進行任何更改。好吧,也許一個多雨的一天我會重構毛茸茸的碎片 - 我們會看到的。
歡呼,一切順利。
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
上面是一個說明性DEP,可以實現在正確的GIT分支上的適度目標(請注意以:分支符號表示的參數)。它是使用兩個DSL單詞met?
並meet
,其中包含每個DEP的邏輯,將測試(是否滿足?)與代碼(滿足依賴關係)分開。
當需要進行分支更改時,運行此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
對於一項孤立的任務來說,一切都很好。為了實現更大的東西,任務必須觸發其他任務,這是第三個DSL單詞requires
的地方。
dep 'on git branch' , :branch do
requires 'git'
# ...
在Babushka處理上述MET/MET/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
僅當發現給定的DEP未被安裝時,可以使用合同的DSL Word requires_when_unmet
來指定依賴項,並且在滿足DEP時可以跳過。 (構建工具是這種要求的一個很好的例子。)
還有其他需要學習的東西,例如DEP模板,DEP源以及Babushka的DSL中剩下的幾個單詞,但以上是它的堅果。如果您將幾十個類似的dep串在一起,則可以從頭開始提供服務器,或者做任何您喜歡的其他事情。
網站上有更多詳細的文檔,以及可以在此處查看的人均文檔。
Babushka最容易使用babushka.me/up
安裝,這是一個通過git安裝babushka的外殼腳本(及其依賴關係,ruby and git,如果需要,可以通過系統的包裝管理器)進行安裝。可以安全地運行現有系統,並打算將其用作新系統上的第一個Shell命令。您可以使用curl
或wget
以這種方式安裝Babushka:
sh -c "`curl https://babushka.me/up`"
如果您想手動安裝,您需要做的就是克隆git倉庫(或提取檔案),如果您願意,將bin/babushka.rb
鏈接到“ babushka'的路徑中。
檢查安裝文檔以獲取自定義安裝的詳細信息,包括鎖定特定版本,並使用babushka.me/up
從叉子安裝。
Babushka本身應該在任何Unix上運行; Babushka的核心中沒有什麼需要除Unix,Ruby和Git以外的其他任何東西。
我在MacOS上開發了Babushka,並主要在Ubuntu上使用它,因此自製和APT是最受支持的包裝經理。由於其他人的貢獻,還有一些百勝(Redhat/fedora/Centos)和Pacman(Arch)的支持。在其他系統上,特定的操作(例如,使用該系統的軟件包管理器安裝軟件包)會在錯誤消息中失敗,但是Babushka應該運行良好。無論如何,歡迎補丁。
Babushka利用這些紅寶石圖書館:
非常感謝為Babushka做出貢獻的每個人,無論是通過提交補丁,與我討論設計思想,測試還是僅提供反饋。
這裡不可避免地會列出貢獻者的清單 - 貢獻者頁麵包含完整列表。此外,版本顛簸始終詳細說明了什麼變化以及誰在其提交消息中提供了幫助。
Babushka已獲得第三級BSD許可證的許可,除了lib/levenshtein/levenshtein.rb
,該許可已獲得MIT許可證的許可。
可以在許可證文件中完整地找到BSD許可證,可以在lib/levenshtein/levenshtein.rb
的頂部找到MIT許可證。