| ในช่วงสองสามปีที่ผ่านมาปลั๊กอินนี้ได้เห็นการเผยแพร่มากมาย ขอบคุณทุกคนที่เกี่ยวข้อง! น่าเสียดายที่ฉันไม่มีเวลามากที่จะมีส่วนร่วมอีกต่อไป ในทางปฏิบัติสิ่งนี้หมายถึงกิจกรรมที่น้อยลงการตอบสนองต่อปัญหาและการเผยแพร่ใหม่จากจุดสิ้นสุดของฉัน |
| ฉันกำลังมองหาผู้มีส่วนร่วมที่เต็มใจที่จะบำรุงรักษาและดำเนินการตามโครงการ หากคุณสนใจและชอบที่จะเห็นปลั๊กอินนี้ยังคงเจริญเติบโตต่อไป |
ปลั๊กอินให้ความสามารถในการปรับใช้สำหรับเว็บแอปพลิเคชันไปยังคอนเทนเนอร์ท้องถิ่นและระยะไกลในการสร้าง Gradle ใด ๆ โดยใช้ประโยชน์จากงานมดสินค้า ปลั๊กอินรองรับสิ่งประดิษฐ์สงครามและหู
กรณีการใช้งานทั่วไปสำหรับปลั๊กอินนี้คือการสนับสนุนการปรับใช้ระหว่างการพัฒนา โปรดทราบว่าสินค้าใช้การปรับใช้ที่ร้อนแรงซึ่งเมื่อเวลาผ่านไปจะเติมหน่วยความจำ Permgen ของกระบวนการ JVM ที่ใช้งานคอนเทนเนอร์ของคุณ การปรับใช้สิ่งประดิษฐ์อย่างต่อเนื่องจะนำไปสู่ java.lang.OutOfMemoryError การขนส่งสินค้าสนับสนุนความสามารถในการจัดการตู้คอนเทนเนอร์ (เริ่มต้น/หยุดคอนเทนเนอร์ระยะไกล) ผ่าน Daemon สินค้าที่เรียกว่า อย่างไรก็ตามในสถานการณ์การปรับใช้อย่างต่อเนื่องคุณมักจะต้องการการดำเนินการที่ซับซ้อนมากขึ้น
ในการใช้ฟังก์ชั่นของปลั๊กอินคุณจะต้องเพิ่มสิ่งประดิษฐ์ไบนารีลงใน ClassPath ของสคริปต์บิลด์ของคุณและใช้ปลั๊กอิน
ต้องกำหนดขวดปลั๊กอินใน ClassPath ของสคริปต์การสร้างของคุณ มีอยู่ในพอร์ทัลปลั๊กอิน Gradle ตัวอย่างโค้ดต่อไปนี้แสดงตัวอย่างเกี่ยวกับวิธีการดึงข้อมูลด้วย buildscript Syntax:
buildscript {
repositories {
gradlePluginPortal()
}
dependencies {
classpath 'com.bmuschko:gradle-cargo-plugin:2.9.0'
}
}
ไฟล์ jar มาพร้อมกับปลั๊กอินสองตัว:
| ตัวระบุปลั๊กอิน | ขึ้นอยู่กับ | พิมพ์ | คำอธิบาย |
|---|---|---|---|
| com.bmuschko.cargo-base | - | Cargobaseplugin | จัดเตรียมประเภทงานที่กำหนดเองสินค้าการกำหนดค่าล่วงหน้า classpath และการปรับใช้ |
| com.bmuschko.cargo | com.bmuschko.cargo-base | ผู้ขนส่งสินค้า | จัดเตรียมชุดงานขนส่งสินค้าในพื้นที่และระยะไกลและเปิดเผยส่วนขยายสำหรับการกำหนดค่า |
ปลั๊กอิน com.bmuschko.cargo ช่วยให้คุณเริ่มต้นได้อย่างรวดเร็ว หากคุณต้องการจัดการกับผลิตภัณฑ์คอนเทนเนอร์เดียวนี่เป็นตัวเลือกที่ต้องการ ผู้ใช้ปลั๊กอินส่วนใหญ่จะไปกับตัวเลือกนี้ ในการใช้ปลั๊กอินสินค้าให้รวมข้อมูลโค้ดต่อไปนี้ในสคริปต์บิลด์ของคุณ:
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 กำหนดงานต่อไปนี้ออกนอกกรอบ:
| ชื่องาน | ขึ้นอยู่กับ | พิมพ์ | คำอธิบาย |
|---|---|---|---|
| cargodeplomentremote | - | cargodeplomentremote | ปรับใช้การปรับใช้กับคอนเทนเนอร์ระยะไกล |
| CargoundeployRemote | - | CargoundeployRemote | ยกเลิกการใช้งานได้จากคอนเทนเนอร์ระยะไกล |
| CargoredeployRemote | - | CargoredeployRemote | นำไปใช้กับคอนเทนเนอร์ระยะไกลได้ |
| cargorunlocal | - | cargorunlocal | เริ่มต้นคอนเทนเนอร์ในเครื่องปรับใช้การปรับใช้และรอให้ผู้ใช้กด Ctrl + C เพื่อหยุด |
| Cargostartlocal | - | Cargostartlocal | เริ่มต้นคอนเทนเนอร์ท้องถิ่นปรับใช้งานที่สามารถปรับใช้งานได้จากนั้นทำงานอื่น ๆ (ตัวอย่างเช่นดำเนินการทดสอบ) |
| cargoredeploylocal | - | cargoredeploylocal | นำไปใช้งานได้กับคอนเทนเนอร์ท้องถิ่น |
| เกี่ยวกับคาร์โกสโตพอล | - | เกี่ยวกับคาร์โกสโตพอล | หยุดคอนเทนเนอร์ท้องถิ่น |
| 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 และ highhomeDir : โฮมไดเรกทอรีของการติดตั้งคอนเทนเนอร์ในพื้นที่ของคุณconfigHomeDir : โฮมไดเร็กตอรี่ของการกำหนดค่าคอนเทนเนอร์ในพื้นที่ของคุณconfigFile : ไฟล์การกำหนดค่าที่คุณต้องการเพิ่มลงในการกำหนดค่าคอนเทนเนอร์ของคุณ configFile เป็นการปิดตัวเองและต้องการให้คุณระบุ files แอตทริบิวต์และ toDir ควรใช้ FileCollection เป็นแอตทริบิวต์ files และ toDir ควรเป็น String ปลายทางไฟล์การกำหนดค่าหลายจุดสามารถกำหนดได้โดยการสร้างการปิด configFile มากกว่าหนึ่งครั้งrmiPort : พอร์ตที่จะใช้เมื่อสื่อสารกับเซิร์ฟเวอร์นี้เช่นเริ่มต้นและหยุดstartStopTimeout : การหมดเวลา (ใน MS) ซึ่งจะตรวจสอบว่าคอนเทนเนอร์เริ่มต้นหรือหยุดสำเร็จ (ค่าเริ่มต้นเป็น 1,20000ms)extraClasspath : การ FileCollection ที่ให้องค์ประกอบพิเศษแก่ ClassPath คอนเทนเนอร์ท้องถิ่น (ไม่บังคับ)sharedClasspath : การ FileCollection ที่ให้องค์ประกอบพิเศษแก่แอปพลิเคชัน ClassPath และไม่ไปยังคอนเทนเนอร์ท้องถิ่น (ไม่บังคับ) ภายใน 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 : Target Directory เพื่อดาวน์โหลดการกระจายคอนเทนเนอร์ไปที่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 แทน:
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 อนุญาตให้สร้างงานแบบไดนามิกตามตรรกะสคริปต์ของคุณ ตัวอย่างต่อไปนี้แสดงวิธีการสร้างงานการปรับใช้ 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'
}
ก่อนการปรับใช้ระยะไกลฉันต้องการรีสตาร์ทคอนเทนเนอร์ของฉัน สามารถทำได้หรือไม่?
ใช่สิ่งนี้เป็นไปได้ด้วยความช่วยเหลือของฟังก์ชั่นการเก็บสินค้า โปรดดูเอกสารประกอบออนไลน์สำหรับการตั้งค่ากระบวนการ Daemon JVM Cargo และการกำหนดค่าคอนเทนเนอร์ ด้วยปลั๊กอินนี้คุณสามารถใช้งานที่กำหนดเองเพื่อเริ่มและหยุดคอนเทนเนอร์ ตัวอย่างต่อไปนี้หยุดเริ่มแล้วนำไปใช้สิ่งประดิษฐ์อีกครั้ง
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