مشروع المظلة : مؤسسة الطهاة
حالة المشروع : نشط
قضايا استجابة وقت الحد الأقصى : 14 يوما
سحب طلب استجابة وقت الحد الأقصى : 14 يوما
قم بسهولة بإنشاء مثبتات كاملة المكاسب لمشروعك عبر مجموعة متنوعة من المنصات.
ألقى Seth Chisamore و Christopher Maier من Chef حديثًا تمهيديًا على Omnibus في Chefconf 2013 ، بعنوان Eat The Eat The Chost Bowl: Building Mostrack Mostrack مع Omnibus :
تتم إدارة هذا المشروع من قبل فريق هندسة الطهاة. لمزيد من المعلومات حول مساهمة فريق هندسة الإصدار ، والتصاريح ، وعملية الإصدار ، يرجى الرجوع إلى دليل إدارة OSS Engineering Engineering Chef.
تم تصميم Omnibus لتشغيل مع مجموعة أقل من المتطلبات المسبقة. ستحتاج إلى ما يلي:
يوفر Omnibus كلاً من DSL لتحديد مشاريع Omnibus لبرنامجك ، بالإضافة إلى أداة سطر الأوامر لإنشاء القطع الأثرية للتثبيت من هذا التعريف.
للبدء ، قم بتثبيت Omnibus محليًا على محطة العمل الخاصة بك.
$ gem install omnibus
يمكنك الآن إنشاء مشروع Omnibus في الدليل الحالي الخاص بك باستخدام ميزة مولد المشروع.
$ omnibus new $MY_PROJECT_NAME
سيؤدي هذا إلى إنشاء هيكل عظمي كامل للمشروع في الدليل omnibus-$MY_PROJECT_NAME
بشكل افتراضي ، سيؤدي هذا إلى إنشاء دليل يسمى omnibus-$MY_PROJECT_NAME
على افتراض أنك تبقي تكوين Omnibus الخاص بك منفصلًا عن الريبو. ومع ذلك ، فإن الاحتفاظ بها في ريبو الخاص بك هو ممارسة شائعة ، لذلك تشعر بإعادة تسمية هذا الدليل إلى omnibus
ووضعه في المستوى الأعلى من مصدر مشاريعك.
$ cd omnibus- $MY_PROJECT_NAME
$ bundle install --binstubs
يمكن العثور على مزيد من التفاصيل في ملف ReadMe الخاص بالمشروع.
يحدد Omnibus النظام الأساسي الذي يقوم بإنشاء مثبت بناءً على النظام الأساسي الذي يعمل عليه حاليًا . أي أنه يمكنك فقط إنشاء ملف .deb
على نظام قائم على Debian. للتخفيف من هذا التحذير ، يتضمن المشروع الذي تم إنشاؤه إعداد مطبخ اختبار مناسب لإنشاء سلسلة من مشاريع Omnibus.
على الرغم من أن مشروع القالب سيبني ، إلا أنه لن يفعل أي شيء مثير. لذلك ، تحتاج إلى استخدام Omnibus DSL لتحديد تفاصيل التطبيق الخاص بك.
في حالة وجوده ، سيستخدم Omnibus ملف تكوين المستوى الأعلى اسمه omnibus.rb
في جذر المستودع الخاص بك. يتم تحميل هذا الملف في وقت التشغيل ويتضمن عددًا من الأنفاق على التكوين. هنا مثال:
# Build locally (instead of /var)
# -------------------------------
base_dir './local'
# Disable git caching
# ------------------------------
use_git_caching false
# Enable S3 asset caching
# ------------------------------
use_s3_caching true
s3_bucket ENV [ 'S3_BUCKET' ]
# There are three ways to authenticate to the S3 bucket
# 1. set `s3_access_key` and `s3_secret_key`
s3_access_key ENV [ 'S3_ACCESS_KEY' ]
s3_secret_key ENV [ 'S3_SECRET_KEY' ]
# 2. set `s3_profile` to use an AWS profile in the Shared Credentials files
#s3_profile ENV['S3_PROFILE']
# 3. set `s3_iam_role_arn` to use an AWS IAM role
#s3_iam_role_arn ENV['S3_IAM_ROLE_ARN']
لمزيد من المعلومات ، يرجى الاطلاع على وثائق Config
.
يمكنك إخبار Omnibus بتحميل ملف تكوين مختلف عن طريق تمرير خيار --config
إلى أي أمر:
$ bin/omnibus --config /path/to/config.rb
أخيرًا ، يمكنك تجاوز خيار تكوين معين في سطر الأوامر باستخدام علامة --override
. هذا يتطلب الأسبقية النهائية على أي قيم ملفات التكوين:
$ bin/omnibus --override use_git_caching:false
يحدد ملف DSL Project تطبيقك الفعلي ؛ هذا هو الشيء الذي تقوم بإنشائه مثبتًا كاملًا في المقام الأول. يوفر وسيلة لتحديد تبعيات المشروع (مرة أخرى ، كما هو محدد في ملفات تعريف DSL للبرامج) ، بالإضافة إلى طرق لتعيين بيانات التعريف.
يجب أن تكون جميع تعريفات المشروع في دليل config/projects
لمستودع Omnibus الخاص بك.
name "chef-full"
maintainer "YOUR NAME"
homepage "http://yoursite.com"
install_dir "/opt/chef"
build_version "0.10.8"
build_iteration 4
dependency "chef"
تشمل بعض طرق DSL المتاحة:
طريقة DSL | وصف |
---|---|
name | اسم المشروع |
install_dir | موقع التثبيت المطلوب للحزمة |
build_version | نسخة الحزمة |
build_iteration | رقم تكرار الحزمة |
dependency | مكون محدد من قبل البرامج Omnibus ليضمه في هذه الحزمة |
package | استدعاء DSL محدد Packager |
compress | استدعاء DSL محدد الضاغط |
بشكل افتراضي ، يتم إلحاق الطابع الزمني بـ build_version. يمكنك إيقاف تشغيل هذا السلوك عن طريق تعيين append_timestamp
إلى false
في omnibus.rb
أو استخدام --override append_timestamp:false
في سطر الأوامر.
لمزيد من المعلومات ، يرجى الاطلاع على وثائق Project
.
تحدد ملفات Omnibus "البرمجيات" مكونات البرامج الفردية التي تدخل في صنع الحزمة الإجمالية الخاصة بك. هم لبنات بناء التطبيق الخاص بك. يوفر البرنامج DSL طريقة لتحديد مكان استرداد مصادر البرامج ، وكيفية بناءها ، وما هي التبعيات التي لديهم. يتم تعريف هذه التبعيات أيضًا في ملفات DSL الخاصة برامجها ، وبالتالي تشكل الأساس لترتيب بناء الاعتماد.
يجب أن تذهب جميع تعريفات البرامج في دليل config/software
لمستودع مشروع Omnibus الخاص بك.
هنا مثال:
name "ruby"
default_version "1.9.2-p290"
source url : "http://ftp.ruby-lang.org/pub/ruby/1.9/ruby- #{ version } .tar.gz" ,
md5 : "604da71839a6ae02b5b5b5e1b792d5eb"
dependency "zlib"
dependency "ncurses"
dependency "openssl"
relative_path "ruby- #{ version } "
build do
command "./configure"
command "make"
command "make install"
end
تشمل بعض طرق DSL المتاحة:
طريقة DSL | وصف |
---|---|
name | اسم مكون البرنامج (يجب أن يأتي هذا أولاً) |
default_version | إصدار مكون البرنامج |
source | اتجاهات إلى موقع المصدر |
dependency | مكون محدد من قبل البرنامج يعتمد عليه هذا البرنامج |
relative_path | المسار النسبي لبطولة القطران المستخرج |
build | تعليمات البناء |
لمزيد من أساليب DSL ، يرجى الرجوع إلى وثائق Software
.
بالإضافة إلى ذلك ، هناك عدد من أساليب DSL المتوفرة داخل كتلة build
:
طريقة DSL | وصف |
---|---|
command | تنفيذ أمر shell واحد |
make | تشغيل جعل (مع أو بدون args) ، باستخدام Gmake عند الاقتضاء |
patch | ضع رقعة من القرص |
workers | الحد الأقصى لعدد البناة |
windows_safe_path | تنسيق المسار ليكون آمنًا للقصف على النوافذ |
go | قم بتنفيذ الرمز كما هو مضمن |
ruby | قم بتنفيذ الرمز باعتباره الياقوت المدمج |
gem | قم بتنفيذ الكود باعتباره Rubygems المدمجة |
bundle | قم بتنفيذ الكود باعتباره الحزمة المدمجة |
rake | قم بتنفيذ الرمز كجوهرة أشعل النار المدمجة |
block | تنفيذ Ruby Block في وقت البناء |
erb | جعل قالب ERB المعطى |
mkdir | إنشاء الدليل المحدد |
touch | قم بإنشاء ملف فارغ معين |
delete | قم بإزالة الملف أو الدليل المحدد |
strip | رموز تجريد من الثنائيات على ملف أو دليل معين |
copy | نسخ أ إلى ب |
move | انتقال إلى ب |
link | الرابط A إلى B |
sync | انسخ جميع الملفات من A إلى B ، وإزالة أي ملفات اتحاد |
لمزيد من أساليب DSL ، يرجى الرجوع إلى وثائق Builder
.
يمكنك دعم إنشاء إصدارات متعددة من نفس البرنامج في نفس ملف تعريف البرنامج باستخدام طريقة version
وإعطاء كتلة:
name "ruby"
default_version "1.9.2-p290"
version "1.9.2-p290" do
source url : "http://ftp.ruby-lang.org/pub/ruby/1.9/ruby- #{ version } .tar.gz" ,
md5 : "604da71839a6ae02b5b5b5e1b792d5eb"
end
version "2.1.1" do
source url : "http://ftp.ruby-lang.org/pub/ruby/2.1/ruby- #{ version } .tar.gz" ,
md5 : "e57fdbb8ed56e70c43f39c79da1654b2"
end
نظرًا لأن تعريفات البرنامج هي ببساطة رمز Ruby ، يمكنك تنفيذ أي شيء مشروطًا عن طريق لفه باستخدام Ruby النقي الذي يختبر رقم الإصدار.
أسهل طريقة لمشاركة البرامج على مستوى المنظمة هي عبر Bundler و Rubygems. للحصول على مثال مستودع البرامج ، انظر إلى برامج الشيف Omnibus-Soft. لمزيد من المعلومات ، يرجى الاطلاع على وثائق Rubygems.
يوصى باستخدام Bundler لسحب هذه الأحجار الكريمة (حيث يسمح Bundler أيضًا بسحب البرنامج مباشرة من Github):
gem 'my-company-omnibus-software'
gem 'omnibus-software' , github : 'my-company/omnibus-software'
ثم أضف اسم البرنامج إلى قائمة software_gems
في تكوين Omnibus الخاص بك:
software_gems %w( my-company-omnibus-software omnibus-software )
يمكنك أيضًا تحديد المسارات المحلية على القرص (ولكن تحذر من أن هذا قد يجعل مشاركة المشروع بين الفرق صعبة):
local_software_dirs %w( /path/to/software /other/path/to/software )
بالنسبة لجميع هذه المسارات ، فإن الطلب مهم ، لذلك من الممكن الاعتماد على إصدار البرنامج المحلي مع الاستمرار في الاحتفاظ بربط برامج عن بُعد. بالنظر إلى المثال أعلاه ، سوف يبحث Omnibus عن تعريف برنامج يسمى foo
في هذا الترتيب:
$PWD/config/software/foo.rb
/path/to/software/config/software/foo.rb
/other/path/to/software/config/software/foo.rb
/Users/sethvargo/.gems/.../my-company-omnibus-software/config/software/foo.rb
/Users/sethvargo/.gems/.../omnibus-software/config/software/foo.rb
سيتم استخدام الحالة الأولى من foo.rb
التي تمت مواجهتها. يرجى ملاحظة أن التعاريف المحلية (المزودة) اللينة لها الأسبقية!
بمجرد إنشاء حزمةك وتعريفات البرامج الخاصة بك ، يمكنك بناء:
./bin/omnibus build $MY_PACKAGE_NAME
ومع ذلك ، هناك العديد من التحذيرات التي يجب أن تكون على دراية بها:
base_dir
في omnibus.rb
، أو على الأقل تغيير cache_dir
و build_dir
كما سيحاول استخدام /var/cache/omnibus
و /opt/$MY_PROJECT_NAME
، يتطلب الجذر.config/projects/$MY_PROJECT_NAME.rb
. يمكنك إحالة ملفات .rb
الموجودة في مجلد config/software
.install_dir
المحدد في ملف المشروع امتياز root
في وقت الإنشاء. قم بتغييره موقعًا آخر مثل "/tmp/#{name}"
لتجنب التشغيل root
.omnibus-software
. لذا ، فأنت تريد استخدام أولئك الذين ستحتاجهم إما إلى إلغاء تحديده في Gemfile
، أو شوكة ، ثم الرجوع إلى خاص بك/opt/$project/bin
، فستحتاج إما إلى استخدام AppBundler ، أو ستحتاج إلى خطوة تثبيت ما بعد ذلك لإنشاء تلك binstubs.ruby
، فستحتاج أيضًا إلى تجاوز rubygems
و bundler
لمطابقة الإصدارات في هذا الإصدار من ruby
أو ستحصل على فشل حول عدم تطابق إصدار Bundler. سيبني أمر الإنشاء أعلاه بالطبع على مضيفك المحلي ، وبالتالي كونه خاصًا بنظام التشغيل والنظام الأساسي الذي تقوم به. لكن إعداد الهيكل العظمي من قبل omnibus new
Setup Kitchen بالفعل بالنسبة لك بحيث يكون من السهل إنشاء مجموعة متنوعة من OSS ، انظر README.md
في دليل Omnibus الذي تم إنشاؤه للحصول على التفاصيل.
قد تحدد تعريفات البرمجيات المستندة إلى GIT الفروع على أنها Default_Version. في هذه الحالة ، سيتم تحديد مراجعة GIT الدقيقة التي يجب استخدامها في وقت الإنشاء ما لم يتم استخدام تجاوز المشروع (انظر أدناه) أو بيان الإصدار الخارجي. لإنشاء بيان إصدار ، استخدم أمر omnibus manifest
:
omnibus manifest PROJECT -l warn
سيؤدي ذلك إلى إخراج بيان من تنسيق JSON يحتوي على الإصدار الذي تم حله من كل تعريف البرنامج.
في بعض الأحيان ، تحتوي المنصة على مكتبات تحتاج إلى قائمة بيضاء حتى يمكن أن يمر HealthCheck. تشتمل القائمة البيضاء الموجودة في كود HealthCheck على الحد الأدنى المطلوب للبناء الناجح على المنصات المدعومة.
لإضافة مكتبة قائمة البيضاء الخاصة بك ، ما عليك سوى إضافة regex إلى تعريف البرنامج الخاص بك في مشروع Omnibus الخاص بك على النحو التالي:
whitelist_file /libpcrecpp.so..+/
من الجيد عادة إضافة مشروط إلى القائمة البيضاء بناءً على النظام الأساسي المحدد الذي يتطلب ذلك.
تحذير: يجب عليك فقط إضافة مكتبات إلى القائمة البيضاء التي تضمن أن تكون على النظام الذي تقوم بتثبيته ؛ إذا جاءت مكتبة من حزمة غير متفرقة ، فيجب عليك بدلاً من ذلك إنشاءها في الحزمة.
الحالة: تجريبي
سوف omnibus changelog generate
إنشاء تغيير لمشروع Omnibus. يفترض هذا الأمر حاليًا:
ستتغير هذه الافتراضات لأننا نحدد أفضل ما يعمل لعدد من مشاريعنا.
يمكن أن تتجاوز تعريفات المشروع تبعيات برامج محددة من خلال تمرير override
لاستخدام الإصدار الصحيح:
name "chef-full"
# <snip>
# This will override the default version of "chef"
override :chef , version : "2.1.1"
dependency "chef"
يجب تعريف الإصدار المتجاوز في البرنامج المرتبط به!
بشكل افتراضي ، سوف يقوم Omnibus بتسجيل مستوى warn
. يمكنك تجاوز هذا عن طريق تمرير العلم --log-level
إلى مكالمة omnibus الخاصة بك:
$ bin/omnibus build < project > --log-level info # or "debug"
بشكل افتراضي ، يتم تجميع مخابئ Omnibus تعريفات البرمجيات ، لذلك فإن إنشاء مشروع N+1 Omnibus أسرع بكثير. يمكن تعطيل هذه الوظيفة عن طريق إضافة ما يلي إلى omnibus.rb
:
use_git_caching false
للحصول على معلومات حول المساهمة في هذا المشروع ، راجع https://github.com/chef/chef/blob/master/contributing.md
Copyright 2012-2016 Chef Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.