我不打算在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许可证。