ฉันไม่ได้ตั้งใจจะทำงานเพิ่มเติมเกี่ยวกับ Babushka (อันที่จริงฉันไม่ได้ทำในบางครั้ง)
ฉันมีความคิดและเริ่มทำงานในโครงการในปี 2009 ในเวลานั้นนักเทียบท่าและแม้แต่คนจรจัดก็ยังไม่ได้รับการคิด ในส่วนที่ฉันต้องการสร้างทางเลือกที่เรียบง่ายและเล็กกว่าสำหรับคนที่ชอบของเชฟและหุ่น เพื่อทำงานที่เป็นประโยชน์ ฉันมีลูกบอลทำงานอยู่และเรียนรู้นรกมากมายและฉันภูมิใจในความจริงที่ว่าการออกแบบเบื้องต้นพิสูจน์เสียง ฉันภูมิใจในบางส่วนของการใช้งาน - Hoowee ฉันจะเขียนรหัสสองสามบิตที่แตกต่างกันในวันนี้ - แต่แล้วเราก็ยังเด็กสักครั้ง
ทุกวันนี้สิ่งต่าง ๆ แตกต่างกันมาก ด้วยตู้คอนเทนเนอร์ที่ทันสมัยและความไม่สามารถเปลี่ยนแปลงได้พร้อมกับเครื่องมือเช่น Terraform, Kubernetes และอื่น ๆ Babushka และวิธีการกลายพันธุ์ของมันค่อนข้างลงวันที่ ในความเป็นจริงการต้องการ Babushka เก่าที่ดีสำหรับงานโครงสร้างพื้นฐานที่ร้ายแรงในวันนี้อาจถือได้ว่าเป็นสัญญาณเตือน
สำหรับการตั้งค่าแล็ปท็อปใหม่และอื่น ๆ ฉันได้เรียนรู้วิธียาวที่สคริปต์เชลล์ใบ้ที่คัดลอกการตั้งค่าบางอย่างเข้าที่เรียก defaults write
ไม่กี่คำสั่งและอื่น ๆ พร้อมกับขั้นตอนด้วยตนเองไม่กี่ขั้นตอน ง่ายต่อการบำรุงรักษา ยิ่งกระบวนการอัตโนมัติเข้าถึง MacOS ได้เร็วเท่าไหร่มันก็จะลดลงจากความเข้ากันได้และในกรณีใด ๆ การตั้งค่าเครื่องใหม่ก็เป็นเหตุการณ์ที่เกิดขึ้นได้ยากสำหรับฉันว่ามันไม่คุ้มค่าที่จะตั้งเป้าหมายให้ระบบอัตโนมัติสมบูรณ์แบบ
ขอบคุณทุกคนที่มีส่วนร่วมและใช้ประโยชน์จากมันในช่วงหลายปีที่ผ่านมา เช่นเคยถ้าคุณต้องการใช้มันในทางใดทางหนึ่งให้ไปเพื่อชีวิตของคุณ - ฉันไม่ได้ตั้งใจที่จะเปลี่ยนแปลงการซื้อคืนหลักนี้อีกต่อไป อาจจะเป็นวันที่ฝนตกหนึ่งวันฉันจะสร้างบิตที่มีขนดก - เราจะเห็น
ไชโยและสิ่งที่ดีที่สุด
Babushka เป็นเครื่องมือ commandline สำหรับการใช้งานบ้านโดยอัตโนมัติ แต่ละส่วนที่แตกต่างกันของงานจะแสดงเป็นการพึ่งพา (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
ด้านบนเป็น expository 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 จะประมวลผล DEP ในแฟชั่น Met/Meet/Met ที่อธิบายไว้ข้างต้นข้อกำหนดทั้งหมดจะถูกประมวลผลให้เสร็จสมบูรณ์ในลักษณะเดียวกัน นั่นสะท้อนให้เห็นถึงความเป็นจริง: การถามว่าเราอยู่ในสาขา 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 ที่เป็นที่นิยม requires_when_unmet
สามารถใช้เพื่อระบุการพึ่งพาที่ต้องการเฉพาะเมื่อพบว่า DEP ที่กำหนดนั้นไม่ได้รับการแก้ไขและสามารถข้ามได้เมื่อพบ DEP แล้ว (เครื่องมือสร้างเป็นตัวอย่างที่ดีของข้อกำหนดดังกล่าว)
มีสิ่งอื่น ๆ ที่ต้องเรียนรู้เช่นเทมเพลต DEP แหล่งข้อมูล DEP และคำที่เหลืออยู่ไม่กี่คำใน DSL ของ Babushka แต่ด้านบนเป็นถั่วของมัน หากคุณสตริง deps ไม่กี่โหลเช่นนี้เข้าด้วยกันคุณสามารถจัดเตรียมเซิร์ฟเวอร์ได้ตั้งแต่เริ่มต้นหรือทำสิ่งอื่นที่คุณต้องการ
มีเอกสารที่มีรายละเอียดมากขึ้นในเว็บไซต์พร้อมกับเอกสารต่อวิธีการซึ่งสามารถดูได้ที่นี่
Babushka ติดตั้งได้ง่ายที่สุดโดยใช้ babushka.me/up
ซึ่งเป็นเชลล์สคริปต์ที่ติดตั้ง Babushka ผ่าน Git (และการพึ่งพาทับทิมและ Git ผ่านตัวจัดการแพ็คเกจของระบบของคุณหากจำเป็น) มันปลอดภัยที่จะทำงานบนระบบที่มีอยู่และตั้งใจที่จะใช้เป็นคำสั่งเชลล์แรกในระบบใหม่ด้วย คุณสามารถติดตั้ง 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
ฉันพัฒนา Babushka บน macOS และใช้เป็นหลักใน Ubuntu ดังนั้น Homebrew และ APT เป็นผู้จัดการแพ็คเกจที่ได้รับการสนับสนุนที่ดีที่สุด นอกจากนี้ยังมีการสนับสนุน Yum (Redhat/Fedora/Centos) และ Pacman (Arch) เนื่องจากการสนับสนุนของผู้อื่น ในระบบอื่น ๆ การดำเนินการเฉพาะ (เช่นการติดตั้งแพ็คเกจโดยใช้ตัวจัดการแพ็คเกจของระบบนั้น) จะล้มเหลวด้วยข้อความแสดงข้อผิดพลาด แต่อย่างอื่น Babushka ควรทำงานได้ดี ไม่ว่าในกรณีใดแพตช์ยินดีต้อนรับมากที่สุด
Babushka ใช้ประโยชน์จากห้องสมุดทับทิมเหล่านี้:
ขอบคุณมากสำหรับทุกคนที่มีส่วนร่วมกับ Babushka ไม่ว่าจะโดยการส่งแพทช์พูดคุยเกี่ยวกับแนวคิดการออกแบบกับฉันทดสอบหรือเพียงแค่ให้ข้อเสนอแนะ
รายชื่อผู้มีส่วนร่วมที่นี่หลีกเลี่ยงไม่ได้ - หน้าผู้มีส่วนร่วมมีรายการทั้งหมด นอกจากนี้การชนของเวอร์ชันการชนจะให้รายละเอียดเกี่ยวกับสิ่งที่เปลี่ยนแปลงและผู้ที่ช่วยในการส่งข้อความของพวกเขา
Babushka ได้รับใบอนุญาตภายใต้ใบอนุญาต BSD สามข้อยกเว้น lib/levenshtein/levenshtein.rb
ซึ่งได้รับใบอนุญาตภายใต้ใบอนุญาต MIT
ใบอนุญาต BSD สามารถพบได้ทั้งหมดในไฟล์ใบอนุญาตและใบอนุญาต MIT สามารถพบได้ที่ด้านบนของ lib/levenshtein/levenshtein.rb