나는 Babushka에서 더 이상 일을하려고하지 않습니다 (실제로 한동안 그렇게하지 않았습니다).
나는 아이디어를 가지고 있었고 2009 년에 프로젝트 작업을 시작했습니다. 당시 Docker와 심지어 Vagrant는 아직 고안되지 않았습니다. 부분적으로 나는 요리사와 꼭두각시에 대한 단순하고 소규모 대안을 구축하고 싶었고, 부분적으로는 루비 DSL을 얼마나 멀리 연마 할 수 있는지, 어느 정도까지 의지 할 수 있는지에 대한 약간의 실험으로 시작했습니다. 유용한 작업을 수행합니다. 나는 그것에 대해 공을 작업하고 많은 지옥을 배웠으며, 초기 디자인이 소리를 입증했다는 사실을 자랑스럽게 생각합니다. 나는 구현의 특정 부분을 자랑스럽게 생각합니다. Hoowee는 오늘 해당 코드의 몇 비트를 다르게 쓸 것입니다. 그러나 우리 모두는 한 번 어렸습니다.
요즘 상황은 매우 다릅니다. Terraform, Kubernetes 등과 같은 도구와 함께 현대적인 용기와 불변성을 통해 Babushka 및 그 돌연변이 기반 접근법은 상당히 날짜가 있습니다. 실제로 오늘날 심각한 인프라 작업을 위해 좋은 오래된 Babushka를 요구하는 것은 일종의 경고 신호로 간주 될 수 있습니다.
새로운 노트북을 설정하는 데있어서, 나는 몇 가지 선호도를 제자리에 복사하고 몇 가지 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
위는 올바른 git 브랜치에있는 겸손한 목표를 달성 할 수있는 설명 DEP입니다 (: 분기 기호로 표시된 매개 변수). 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
하나의 고립 된 작업에 매우 좋습니다. 더 큰 것을 달성하려면 작업이 다른 것들을 트리거해야합니다. 여기서 세 번째 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
주어진 DEP가 충족되지 않은 것으로 밝혀 졌을 때만 필요한 종속성을 지정하고 DEP가 이미 충족 될 때 건너 뛸 수있는 고정 된 DSL Word requires_when_unmet
필요한 종속성을 지정할 수 있습니다. (빌드 도구는 그러한 요구 사항의 좋은 예입니다.)
Babushka의 DSL에는 DEP 템플릿, DEP 소스 및 남은 단어 몇 개와 같은 다른 것들이 있지만 위는 그 너트입니다. 이와 같은 수십 개의 DEP를 함께 묶으면 서버를 처음부터 제공하거나 좋아하는 다른 일을 할 수 있습니다.
웹 사이트에는 여기에서 볼 수있는 메드 당 문서와 함께 훨씬 더 자세한 문서가 있습니다.
Babushka는 Git을 통해 Babushka를 설치하는 쉘 스크립트 인 babushka.me/up
을 사용하여 가장 쉽게 설치됩니다 (필요한 경우 시스템 패키지 관리자를 통해 의존성, Ruby 및 Git). 기존 시스템에서 실행하는 것이 안전하며 새 시스템에서도 첫 번째 쉘 명령으로 사용되도록 의도했습니다. curl
또는 wget
사용하여 Babushka를이 방법으로 설치할 수 있습니다.
sh -c "`curl https://babushka.me/up`"
수동으로 설치하고 싶다면 Git Repo를 복제하거나 아카이브를 추출하면 bin/babushka.rb
'Babushka'로 연결하기 만하면됩니다.
babushka.me/up
사용하여 특정 버전의 잠금 및 Forks에서 설치를 포함하여 설치 사용자 정의에 대한 자세한 내용은 설치 설명서를 확인하십시오.
Babushka 자체는 모든 Unix에서 실행해야합니다. Babushka의 핵심에는 Unix, Ruby 및 Git 이외의 다른 것을 필요로하는 것은 없습니다.
나는 MacOS에서 Babushka를 개발하고 주로 Ubuntu에서 사용하므로 Homebrew와 Apt는 가장 지원하는 패키지 관리자입니다. 다른 사람들의 기여 덕분에 yum (Redhat/Fedora/Centos) 및 Pacman (Arch) 지원도 있습니다. 다른 시스템에서는 해당 시스템의 패키지 관리자를 사용하여 패키지 설치와 같은 특정 작업이 오류 메시지로 실패하지만 Babushka는 정상적으로 실행해야합니다. 어쨌든 패치는 가장 환영합니다.
Babushka는이 루비 라이브러리를 활용합니다.
Babushka에 기여한 모든 분들께, 패치를 제출하거나, 나와의 디자인 아이디어를 논의하거나, 테스트를하거나, 피드백을 제공함으로써 Babushka에 기여한 모든 분들께 감사드립니다.
여기의 기고자 목록은 필연적으로 구체화되지 않습니다. 기고자 페이지에는 전체 목록이 포함되어 있습니다. 또한 버전 범핑 커밋은 항상 변경 사항과 커밋 메시지에 도움을주는 사람을 자세히 설명합니다.
Babushka는 MIT 라이센스에 따라 라이센스가 부여 된 lib/levenshtein/levenshtein.rb
제외하고 3- 클라스 BSD 라이센스에 따라 라이센스가 부여됩니다.
BSD 라이센스는 라이센스 파일에서 전체적으로 찾을 수 있으며 MIT 라이센스는 lib/levenshtein/levenshtein.rb
의 상단에서 찾을 수 있습니다.