| على مدار العامين الماضيين ، شهد هذا البرنامج المساعد العديد من الإصدارات. شكرا لجميع المعنيين! لسوء الحظ ، ليس لدي الكثير من الوقت للمساهمة بعد الآن. في الممارسة العملية ، هذا يعني نشاطًا أقل بكثير ، والاستجابة للقضايا والإصدارات الجديدة من نهايتي. |
| أبحث بنشاط عن المساهمين المستعدين لتولي صيانة وتنفيذ المشروع. إذا كنت مهتمًا وترغب في رؤية هذا المكون الإضافي يستمر في الازدهار ، فقم بإطلاق النار لي على بريد. |
يوفر المكون الإضافي إمكانيات النشر لتطبيقات الويب للحاويات المحلية والبعيدة في أي بنية Gradle معينة عن طريق الاستفادة من مهام النمل الشحن. المكون الإضافي يدعم القطع الأثرية للحرب والأذن.
حالة الاستخدام النموذجية لهذا البرنامج المساعد هي دعم النشر أثناء التطوير. ضع في اعتبارك أن Cargo تستخدم النشر الساخن الذي يملأ بمرور الوقت ذاكرة Permgen لعملية JVM التي تعمل على تشغيل الحاوية. إن نشر قطعة أثرية مستمرة سيؤدي إلى java.lang.OutOfMemoryError . تدعم Cargo إمكانيات إدارة الحاويات (بدء/إيقاف الحاويات عن بُعد) عبر ما يسمى بالشحن الخفي. ومع ذلك ، في سيناريوهات النشر المستمر ، غالبًا ما تحتاج إلى إجراء عمليات أكثر تعقيدًا.
لاستخدام وظيفة المكون الإضافي ، ستحتاج إلى إضافة قطعة أثرية ثنائية إلى ClassPath الخاصة بـ Build Script وتطبيق المكون الإضافي.
يجب تعريف جرة البرنامج المساعد في ClassPath من البرنامج النصي للبناء. وهي متوفرة على بوابة Gradle Plugin. يعرض مقتطف الكود التالي مثالاً على كيفية استرداده باستخدام بناء جملة buildscript :
buildscript {
repositories {
gradlePluginPortal()
}
dependencies {
classpath 'com.bmuschko:gradle-cargo-plugin:2.9.0'
}
}
يأتي ملف الجرة مع اثنين من الإضافات:
| المعرف الإضافي | يعتمد على | يكتب | وصف |
|---|---|---|---|
| com.bmuschko.cargo-base | - | cargobaseplugin | يوفر أنواع المهام المخصصة للشحن ، و ClassPath قبل الإجراءات. |
| com.bmuschko.cargo | com.bmuschko.cargo-base | cargoplugin | يوفر مجموعة من مهام البضائع المحلية والبعيدة ويعرض تمديدًا للتكوين. |
يساعدك com.bmuschko.cargo Plugin في البدء بسرعة. إذا كنت بحاجة فقط إلى التعامل مع منتج واحد للحاوية ، فهذا هو الخيار المفضل. سيذهب معظم مستخدمي البرنامج المساعد مع هذا الخيار. لاستخدام المكون الإضافي للشحن ، قم بتضمين مقتطف الكود التالي في البرنامج النصي للبناء:
apply plugin: 'com.bmuschko.cargo'
إذا كنت بحاجة إلى تحكم كامل في مهام النشر الخاصة بك ، فستحتاج إلى استخدام المكون الإضافي com.bmuschko.cargo-base . الجانب السلبي هو أنه يجب تكوين كل مهمة بشكل فردي في البرنامج النصي للبناء. لاستخدام المكون الإضافي لقاعدة البضائع ، قم بتضمين مقتطف الكود التالي في البرنامج النصي للبناء:
apply plugin: 'com.bmuschko.cargo-base'
يقوم com.bmuschko.cargo-base المكون الإضافي بالفعل بإعداد التبعيات للبضائع. من أجل القيام بذلك ، يختار نسخة افتراضية من المكتبات. بدلاً من ذلك ، يمكنك تحديد إصدار مخصص من مكتبات الشحن. للقيام بذلك ، يرجى استخدام اسم تكوين cargo في إغلاق dependencies الخاصة بك ، وبقاء ما يلي في الاعتبار:
dependencies {
def cargoVersion = '1.9.10'
cargo "org.codehaus.cargo:cargo-core-uberjar:$cargoVersion",
"org.codehaus.cargo:cargo-licensed-dtds:$cargoVersion",
"org.codehaus.cargo:cargo-ant:$cargoVersion"
}
يعرّف المكون الإضافي cargo المهام التالية خارج الصندوق:
| اسم المهمة | يعتمد على | يكتب | وصف |
|---|---|---|---|
| cargodeployremote | - | cargodeployremote | ينشر حاوية عن بعد قابلة للنشر. |
| cargoundeployremote | - | cargoundeployremote | undploys a a spoylable من الحاوية عن بعد. |
| cargoredeployremote | - | cargoredeployremote | إعادة النشر قابلة للنشر إلى حاوية عن بعد. |
| cargorunlocal | - | cargorunlocal | تبدأ الحاوية المحلية ، وتنشر عملية نشر وينتظر المستخدم للضغط على Ctrl + C للتوقف. |
| cargostartlocal | - | cargostartlocal | تبدأ الحاوية المحلية ، وتنشر عملية نشر ثم قم بقيامها بمهام أخرى (على سبيل المثال ، تنفيذ الاختبارات). |
| cargoredeploylocal | - | cargoredeploylocal | إعادة النشر قابلة للنشر على الحاوية المحلية. |
| cargostoplocal | - | cargostoplocal | توقف الحاوية المحلية. |
| cargoconfigurelocal | - | cargoconfigurelocal | تكوين الحاوية المحلية. |
يستخدم المكون الإضافي للشحن نفس التصميم مثل البرنامج المساعد للحرب.
يحدد المكون الإضافي للشحن خصائص الاتفاقية التالية في إغلاق cargo :
containerId : معرف الحاوية الذي تستهدفه. يرجى الاطلاع على قائمة الحاويات المدعومة على موقع الشحن.port : منفذ TCP يستجيب الحاوية (الافتراضيات إلى 8080). داخل cargo ، يمكنك تحديد الخصائص الاختيارية للقطع الأثرية للنشر 1..N في إغلاق اسمه deployable . سيتم تحديد كل قطعة أثرية نشر في إغلاقها الخاص:
file : أي نوع يمكن تمريره إلى Project.files (كائن ...) ويحل إلى ملف واحد أو دليل بما في ذلك القطع الأثرية التعسفية ، أدلة الحرب المتفجرة وتكوينات التبعية التي سيتم نشرها على الحاوية (التخلف عن السداد في المشروع/الوحدة النمطية - الحرب أو ملف الأذن).context : سياق عنوان URL الذي تتعامله الحاوية مع تطبيق الويب الخاص بك (الافتراضيات إلى اسم الحرب/الأذن). ضع في اعتبارك أنه ليس عليك تحديد الإغلاق deployable إذا كنت ترغب فقط في نشر القطع الأثرية المحددة بواسطة مشروع/وحدة Gradle.
داخل cargo يمكنك تحديد خصائص الحاويات عن بُعد في إغلاق اسمه remote :
protocol : بروتوكول الحاوية البعيدة (الافتراضيات إلى http ).hostname : اسم مضيف الحاوية البعيدة.username : بيانات اعتماد اسم المستخدم للحاوية البعيدة (اختياري).password : بيانات اعتماد كلمة المرور للحاوية عن بُعد (اختياري). داخل cargo يمكنك تحديد خصائص الحاويات المحلية في إغلاق اسمه local :
jvmArgs : حجج JVM لحاوية محلية.outputFile : ملف سجل الحاوية المحلية الخاصة بك (الافتراضيات للكتابة إلى وحدة التحكم).logFile : ملف سجل البضائع الخاص بالحاوية المحلية (الافتراضيات للكتابة إلى وحدة التحكم).logLevel : مستوى السجل لتشغيل الحاوية مع (اختياري). المستويات الصالحة low medium high .homeDir : الدليل المنزلي لتركيب الحاوية المحلية.configHomeDir : الدليل الرئيسي لتكوين الحاوية المحلية.configFile : ملفات التكوين التي تريد إضافتها إلى تكوين الحاوية. يعد configFile إغلاقًا بحد ذاته ويتطلب منك تقديم files السمات و toDir . يجب استخدام FileCollection كسمة files ويجب أن يكون toDir String . يمكن تعريف وجهات ملفات التكوين المتعددة عن طريق إنشاء أكثر من إغلاق configFile .rmiPort : المنفذ المراد استخدامه عند التواصل مع هذا الخادم ، على سبيل المثال لبدءه وإيقافه.startStopTimeout : المهلة (في MS) لتحديد ما إذا كانت الحاوية قد بدأت بنجاح أو توقف (الافتراضيات إلى 120000 مللي ثانية).extraClasspath : FileCollection يوفر عناصر إضافية إلى ClassPath الحاوية المحلية (اختياري).sharedClasspath : FileCollection يوفر عناصر إضافية لفئة Application ، وليس للحاوية المحلية (اختياري). داخل local remote يمكنك تحديد خصائص الحاويات الخاصة. يمكن البحث عن هذه الخصائص على الصفحة الرئيسية للشحن. يوضح المثال التالي كيفية تعيين منفذ AJP لحاوية Tomcat المحلية:
cargo {
local {
containerProperties {
property 'cargo.tomcat.ajp.port', 9099
}
}
}
يمكن للحاويات المحلية استخدام خصائص النظام المنقولة إليها. يوضح المثال التالي كيفية تعيين خاصية نظام واحد تسمى myproperty :
cargo {
local {
systemProperties {
property 'myproperty', 'myvalue'
}
}
}
إذا قررت استخدام شحنة Zip Installer ، فسيتم تنزيل الحاوية الخاصة بك تلقائيًا. يمكنك تحديد خصائصه في installer الإغلاق. ينطبق المثبت فقط على مهام الشحن "المحلية".
installUrl : عنوان URL لتنزيل توزيع الحاوية من.downloadDir : دليل الهدف لتنزيل توزيع الحاوية إلى.extractDir : دليل لاستخراج توزيع الحاوية التي تم تنزيلها إلى.يرجى الرجوع إلى خصائص التكوين الفردية على صفحة الشحن الرئيسية. كل هذه الخصائص يمكن تجاوزها بواسطة خصائص المشروع. اسم خصائص المشروع هو نفسه كما في دليل الشحن.
إذا كنت ترغب في الاستفادة من ذاكرة التخزين المؤقت للاعتماد على Gradle عند حل توزيعات الحاويات ، يمكنك استخدام التكوين بدلاً من عنوان URL عند تكوين المثبت:
configurations {
tomcat
}
dependencies {
tomcat "org.apache.tomcat:tomcat:9.0.14@zip"
}
cargo {
local {
installer {
installConfiguration = configurations.tomcat
}
}
}
cargo {
containerId = 'tomcat6x'
port = 9090
deployable {
context = 'myawesomewebapp'
}
remote {
hostname = 'cloud.internal.it'
username = 'superuser'
password = 'secretpwd'
}
local {
homeDir = file('/home/user/dev/tools/apache-tomcat-6.0.32')
outputFile = file('build/output.log')
startStopTimeout = 60000
containerProperties {
property 'cargo.tomcat.ajp.port', 9099
}
}
}
أرغب في تجميع قطعة أثرية لمشروعي تلقائيًا عند تنفيذ مهمة نشر البضائع.
لا تعتمد cargoRunLocal المهمة تلقائيًا على مهمة assemble . السبب وراء ذلك هو أنك قد لا ترغب في نشر قطعة أثرية لمشروعك أو أن مشروعك لا يولد ملف حرب أو أذن. بدلاً من ذلك ، قد ترغب في نشر واحد أو أكثر من القطع الأثرية الخارجية. إذا كان سير العمل الخاص بك يشبه "تجميع الكود" ، "قم بإنشاء القطع الأثرية" و "نشر" ، فأنت تقوم بمهمة نشر البضائع تعتمد على مهمة assemble . هذا مثال واحد:
cargoRunLocal.dependsOn assemble
أنا أعمل على بناء متعدد المشروع. هل يمكنني تطبيق نفس تكوين البضائع على جميع مشاريع الويب الخاصة بي؟
يسمح Gradle بتصفية المشاريع الفرعية وفقًا لمعايير معينة. لحقن التكوين ذي الصلة من مشروع الجذر للبناء الخاص بك ، ستحتاج إلى تحديد جميع المشروعات الفرعية التي تطبق البرنامج المساعد للحرب (بالطبع نفس المفهوم يعمل لمشاريع الأذن). استخدم طريقة configure لتطبيق مكون الإضافي الشحن والتكوين الخاص بك كما هو موضح في مقتطف الرمز التالي:
def webProjects() {
subprojects.findAll { subproject -> subproject.plugins.hasPlugin('war') }
}
gradle.projectsEvaluated {
configure(webProjects()) {
apply plugin: 'com.bmuschko.cargo'
cargo {
containerId = 'tomcat7x'
remote {
hostname = 'localhost'
username = 'manager'
password = 'manager'
}
}
}
}
أود نشر القطع الأثرية المتعددة على الحاوية الخاصة بي. كيف أفعل ذلك؟
يمكنك تحديد كل قطعة أثرية في إغلاق منفصل deployable . يجب أن يعين كل من عمليات الإغلاق سياق عنوان URL فريد. يوضح المثال التالي كيف يتم إعداد البضائع مع ثلاثة قطع أثرية مختلفة تم نشرها في tomcat المحلي:
cargo {
containerId = 'tomcat6x'
port = 9090
deployable {
file = file('/home/foo/bar/web-services.war')
context = 'web-services'
}
deployable {
file = file('/home/foo/bar/web-app.war')
context = 'web-app'
}
deployable {
file = file('/home/foo/bar/enterprise-app.ear')
context = 'enterprise-app'
}
local {
homeDir = file('/home/user/dev/tools/apache-tomcat-6.0.32')
}
}
هل هناك طريقة للسماح للشحن تلقائيًا بتثبيت الحاوية التي أرغب في استخدامها؟
تسمح البضائع بتحديد حاوية يتم تنزيلها وتثبيتها تلقائيًا على القرص المحلي. كل ما عليك فعله هو تحديد إغلاق installer . يقوم قصاصة التعليمات البرمجية التالية بتنزيل وتثبيت ويستخدم Tomcat 7:
cargo {
containerId = 'tomcat7x'
local {
installer {
installUrl = 'http://apache.osuosl.org/tomcat/tomcat-7/v7.0.27/bin/apache-tomcat-7.0.27.zip'
downloadDir = file("$buildDir/download")
extractDir = file("$buildDir/extract")
}
}
}
أرغب في إضافة ملف تكوين إلى الحاوية المحلية الخاصة بي. كيف أفعل ذلك؟
بالنسبة للحاويات المحلية ، يمكن استخدام الإغلاق المسمى configFile الذي يحدد الملفات المصدر والدليل الذي ترغب في استخدام الملف من وقت التشغيل. إذا كنت بحاجة إلى نسخ الملفات إلى أكثر من وجهات واحدة ، فما عليك سوى إنشاء عمليات إغلاق متعددة configFile .
cargo {
containerId = 'jboss5x'
local {
configFile {
files = project.files('src/main/jboss5/login-config.xml')
toDir = 'conf'
}
configFile {
files = project.files('src/main/jboss5/login-config.xml', 'src/main/jboss5/sample-users.properties')
toDir = 'conf/props'
}
}
}
لإضافة ملفات (ملفات) ثنائية ، يجب عليك استخدام إغلاق file (S) بدلاً من ذلك:
cargo {
containerId = 'glassfish3x'
local {
file {
file = file('../config/db/mysql-connector-java-5.1.23-bin.jar')
toDir = 'lib'
}
}
}
أرغب في إعداد وتكوين مهمة البضائع الخاصة بي لأكثر من حاوية واحدة. هل يمكن القيام بذلك؟
قطعاً. يوفر المكون الإضافي قاعدة البضائع جميع المهام اللازمة لإعداد مهام النشر. كل ما عليك فعله هو إنشاء مهمة أو أكثر وتكوين الخصائص الإلزامية. يوضح المثال التالي كيفية إعداد مهام الحاويات المحلية لـ Tomcat و Jetty:
apply plugin: 'com.bmuschko.cargo-base'
task myTomcatRun(type: com.bmuschko.gradle.cargo.tasks.local.CargoRunLocal) {
containerId = 'tomcat7x'
homeDir = file('/home/user/dev/tools/apache-tomcat-7.0.42')
}
task myJettyRun(type: com.bmuschko.gradle.cargo.tasks.local.CargoRunLocal) {
containerId = 'jetty9x'
homeDir = file('/home/user/dev/tools/jetty-distribution-9.0.4.v20130625')
}
أرغب في إنشاء مهام النشر لنشر التدحرج على حاويات بعيدة متعددة. كيف أفعل هذا؟
يتيح Gradle إنشاء مهام بناءً على منطق برنامج Build Script. يوضح المثال التالي كيفية إنشاء ثلاث مهام نشر Tomcat وكيفية تكوينها بمساعدة بنية بيانات بسيطة. في نهاية البرنامج النصي ، نضيف أيضًا مهمة أخرى تؤدي إلى النشر إلى جميع الحاويات البعيدة.
class RemoteContainer {
String name
String hostname
Integer port
String username
String password
}
def remoteContainers = [new RemoteContainer(name: 'tomcat1', hostname: 'remote-tomcat1',
port: 9090, username: 'admin', password: 's3cr3t'),
new RemoteContainer(name: 'tomcat2', hostname: 'remote-tomcat2',
port: 8050, username: 'deployer', password: 'qwerty'),
new RemoteContainer(name: 'tomcat3', hostname: 'remote-tomcat3',
port: 8888, username: 'su', password: 'powerful')]
apply plugin: 'com.bmuschko.cargo-base'
remoteContainers.each { config ->
task "deployRemote${config.name.capitalize()}"(type: com.bmuschko.gradle.cargo.tasks.remote.CargoDeployRemote) {
description = "Deploys WAR to remote Tomcat '${config.name}'."
containerId = 'tomcat7x'
hostname = config.hostname
port = config.port
username = config.username
password = config.password
}
}
task deployToAllRemoteTomcats {
dependsOn remoteContainers.collect { "deployRemote${it.name.capitalize()}" }
description = 'Deploys to all remote Tomcat containers.'
group = 'deployment'
}
قبل النشر عن بُعد ، أود إعادة تشغيل الحاوية الخاصة بي. هل يمكن القيام بذلك؟
نعم ، هذا ممكن بمساعدة وظائف الشحن الخفي. يرجى الرجوع إلى وثائق الشحن عبر الإنترنت لإعداد عملية Cargo Daemon JVM وتكوين حاوية. باستخدام هذا البرنامج المساعد ، يمكنك استخدام مهام مخصصة للبدء وإيقاف حاوية. يتوقف المثال التالي ويبدأ ثم إعادة نشر قطعة أثرية.
apply plugin: 'com.bmuschko.cargo'
cargo {
...
}
ext.tomcat7HandleId = 'tomcat7'
task cargoDaemonStop(type: com.bmuschko.gradle.cargo.tasks.daemon.CargoDaemonStop) {
handleId = tomcat7HandleId
}
task cargoDaemonStart(type: com.bmuschko.gradle.cargo.tasks.daemon.CargoDaemonStart) {
handleId = tomcat7HandleId
}
cargoDaemonStart.mustRunAfter cargoDaemonStop
cargoRedeployRemote.dependsOn cargoDaemonStop, cargoDaemonStart