หลังจากอ่านคำถามของคุณอีกครั้งดูเหมือนว่าคุณกำลังพยายามทำสิ่งที่แตกต่างจากฉันเล็กน้อย - แต่ฉันคิดว่าเป้าหมายสุดท้ายของเราเหมือนกัน
ฉันไม่ต้องการใช้บริการ Vagrant Cloud สำหรับโฮสต์กล่องฐานของฉัน แต่ฉันต้องการกระจายสภาพแวดล้อมการพัฒนาให้กับทีมพัฒนาของฉันและใช้คุณสมบัติของmetadata.json
ไฟล์เพื่อรักษาระบบการกำหนดเวอร์ชันสำหรับสภาพแวดล้อมการพัฒนา ซึ่งจะมีให้กับทีมพัฒนาของฉันเพียงแค่ใช้สิ่งอำนวยความสะดวกที่สร้างขึ้นในคนเร่ร่อน
เอกสารร่อนเร่อยู่กระจัดกระจายจริง ๆ ในพื้นที่นี้ในขณะที่เขียนนี้ (8/5/2557) น่าจะเป็นเพราะมันเป็นคุณสมบัติที่ค่อนข้างใหม่ แต่ฉันมั่นใจว่าข้อเท็จจริงที่ว่า VagrantCloud มีระดับที่ต้องชำระเงินมีบางสิ่งที่เกี่ยวข้องกับเรื่องนี้ด้วย .
เพื่อหาวิธีใช้metadata.json
ไฟล์เป็นเวอร์ชันและแจกจ่ายกล่องฉันดูที่ VMs บางส่วนที่มีอยู่ใน VagrantCloud หลังจากดูสิ่งเหล่านั้นและอ่านรหัสคนจรจัด - มันค่อนข้างง่ายที่จะคิดออกว่าจะบรรลุเป้าหมายของฉันได้อย่างไร
- ทำกล่องของคุณตามปกติ ในกรณีของฉันฉันบรรจุเฉพาะกล่องเสมือนเพราะนั่นคือสิ่งที่นักพัฒนาของเราจะใช้ในการเรียกใช้ Vm ฉันยังแพ็คเกจ Vagrantfile ด้วย basebox ของฉันซึ่งทำการตั้งค่าบางอย่างสำหรับสภาพแวดล้อมการพัฒนา (การตั้งค่าการแชร์ไปยังโฟลเดอร์ที่เหมาะสมการตั้งค่า Apache ขั้นพื้นฐานการบันทึกข้อผิดพลาด ฯลฯ )
สร้างmetadata.json
ไฟล์เพื่ออธิบายกล่องฐานของคุณฉันมีลักษณะคล้ายกับสิ่งนี้:
{
"description": "long box description",
"short_description": "short box description",
"name": "company/developer-environment",
"versions": [{
"version": "1",
"status": "active",
"description_html": "<p>Dev Environment</p>",
"description_markdown": "Dev Environment",
"providers": [{
"name": "virtualbox",
"url": "http:\/\/vagrant.domain.local/dev/company-developer-environment-1.box"
}]
}]
}
เมื่อฉันสร้างmetadata.json
ไฟล์ของฉันฉันได้อัปโหลดไปยังเซิร์ฟเวอร์ภายในที่ทำงานบนเครือข่ายภายในของเรา ( vagrant.domain.local/metadata.json
) เมื่อฉันทำอย่างนั้นสิ่งที่เหลือก็คือการทดสอบกับคนจรจัด:
# add the box to vagrant using the definition from metadata.json
# (the box is actually downloaded here, so it can take a minute...or 10)
$ vagrant box add http://vagrant.domain.local/dev/metadata.json
# init the box (this creates a .vagrant folder and a Vagrantfile in the cwd with the appropriate box name)
$ vagrant init company/developer-environment
# boot the box
$ vagrant up
Voila กล่องส่วนตัวที่โฮสต์แชร์และทำเวอร์ชั่นจากระยะไกลซึ่งไม่ต้องการการใช้งาน Vagrant Cloud
ในขณะที่คุณสร้างเวอร์ชันใหม่ของกล่องคุณจะจัดเก็บและแก้ไขmetadata.json
ไฟล์ จากสิ่งที่ฉันสามารถบอกได้คุณสามารถใช้ชุดรูปแบบการกำหนดรุ่นใดก็ได้ที่คุณต้องการไม่ว่าจะเป็นการกำหนดเวอร์ชันแบบ semantic (1.0.0, 1.0.1, ฯลฯ ) หรือเพียงแค่ตัวเลขจำนวนเต็มสำหรับรุ่น (1, 2, 3, ฯลฯ ) เมื่อผู้ใช้กล่องคนvagrant up
พเนจรตรวจสอบไฟล์ metadata.json ของคุณโดยอัตโนมัติเพื่อหาเวอร์ชันใหม่และจะแจ้งให้ผู้vagrant box update
ใช้อัปเดตกล่อง
นอกจากนี้คุณยังสามารถข้ามvagrant box add <metadata.json url>
และvagrant init
บิตโดยกำหนด Vagrantfile พื้นฐานด้วยชื่อกล่องและ URL ของกล่องเช่น:
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "company/developer-environment"
config.vm.box_url = "https://vagrant.domain.local/dev/metadata.json"
end
คุณสามารถแจกจ่าย Vagrantfile vagrant up
ที่มีเนื้อหาเหล่านั้นและผู้ใช้ทุกคนก็จะสามารถที่จะ แม้ว่าฉันไม่แน่ใจเกี่ยวกับวิธีการทำงานเมื่อมีการปรับปรุงรุ่น