| Selama beberapa tahun terakhir plugin ini telah melihat banyak rilis. Terima kasih kepada semua orang yang terlibat! Sayangnya, saya tidak punya banyak waktu untuk berkontribusi lagi. Dalam praktiknya ini berarti aktivitas yang jauh lebih sedikit, responsif terhadap masalah dan rilis baru dari tujuan saya. |
| Saya secara aktif mencari kontributor yang bersedia melakukan pemeliharaan dan implementasi proyek. Jika Anda tertarik dan ingin melihat plugin ini terus berkembang, tembak saya surat. |
Plugin ini menyediakan kemampuan penyebaran untuk aplikasi web ke wadah lokal dan jarak jauh di setiap lulusan yang diberikan dengan memanfaatkan tugas semut kargo. Plugin ini mendukung artefak perang dan telinga.
Kasing penggunaan yang khas untuk plugin ini adalah untuk mendukung penyebaran selama pengembangan. Ingatlah bahwa Cargo menggunakan penyebaran panas yang seiring waktu mengisi memori permgen dari proses JVM yang menjalankan wadah Anda. Terus -menerus menggunakan artefak yang tidak dapat diatasi mengarah ke java.lang.OutOfMemoryError . Cargo mendukung kemampuan manajemen kontainer (memulai/menghentikan wadah jarak jauh) melalui apa yang disebut daemon kargo. Namun, dalam skenario penyebaran berkelanjutan Anda sering ingin perlu melakukan operasi yang lebih kompleks.
Untuk menggunakan fungsionalitas plugin, Anda perlu menambahkan artefak binernya ke classpath skrip build Anda dan menerapkan plugin.
Toples plugin perlu didefinisikan di classpath skrip build Anda. Ini tersedia di Portal Plugin Gradle. Cuplikan kode berikut menunjukkan contoh tentang cara mengambilnya dengan sintaks buildscript :
buildscript {
repositories {
gradlePluginPortal()
}
dependencies {
classpath 'com.bmuschko:gradle-cargo-plugin:2.9.0'
}
}
File JAR dilengkapi dengan dua plugin:
| Identifier Plugin | Tergantung | Jenis | Keterangan |
|---|---|---|---|
| com.bmuschko.cargo-base | - | Cargobaseplugin | Memberikan tipe tugas khusus kargo, pra-konfigurasi classpath dan digunakan. |
| com.bmuschko.cargo | com.bmuschko.cargo-base | Cargoplugin | Memberikan satu set tugas kargo lokal dan jarak jauh dan memperlihatkan ekstensi untuk konfigurasi. |
Plugin com.bmuschko.cargo membantu Anda memulai dengan cepat. Jika Anda hanya perlu berurusan dengan produk kontainer tunggal, ini adalah opsi yang dapat disukai. Sebagian besar pengguna plugin akan menggunakan opsi ini. Untuk menggunakan plugin kargo, sertakan cuplikan kode berikut dalam skrip build Anda:
apply plugin: 'com.bmuschko.cargo'
Jika Anda memerlukan kontrol penuh atas tugas penyebaran Anda, Anda ingin menggunakan plugin com.bmuschko.cargo-base . Kelemahannya adalah bahwa setiap tugas harus dikonfigurasi secara individual dalam skrip build Anda. Untuk menggunakan plugin dasar kargo, sertakan cuplikan kode berikut dalam skrip build Anda:
apply plugin: 'com.bmuschko.cargo-base'
Plugin com.bmuschko.cargo-base sudah mengatur dependensi untuk kargo. Untuk melakukannya, ia memilih versi default perpustakaan. Atau, Anda dapat menentukan versi khusus dari perpustakaan kargo. Untuk melakukannya, silakan gunakan nama konfigurasi cargo dalam penutupan dependencies Anda, dan ingatlah di bawah ini:
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"
}
Plugin cargo mendefinisikan tugas-tugas berikut di luar kotak:
| Nama tugas | Tergantung | Jenis | Keterangan |
|---|---|---|---|
| Cargodeployremote | - | Cargodeployremote | Menyebarkan yang dapat digunakan ke wadah jarak jauh. |
| Cargoundeployremote | - | Cargoundeployremote | Batalkan penggunaan yang dapat digunakan dari wadah jarak jauh. |
| Cargoredeployremote | - | Cargoredeployremote | Mengirimkan kembali yang dapat digunakan untuk wadah jarak jauh. |
| Cargorunlocal | - | Cargorunlocal | Mulai wadah lokal, menggunakan yang dapat digunakan dan menunggu pengguna untuk menekan Ctrl + C untuk berhenti. |
| Cargostartlocal | - | Cargostartlocal | Mulai wadah lokal, menggunakan yang dapat digunakan dan kemudian melakukan tugas -tugas lain (misalnya, menjalankan tes). |
| Cargoredeploylocal | - | Cargoredeploylocal | Mengirimkan kembali yang dapat digunakan pada wadah lokal. |
| Cargostoplocal | - | Cargostoplocal | Menghentikan wadah lokal. |
| Cargoconfigurelocal | - | Cargoconfigurelocal | Mengkonfigurasi wadah lokal. |
Plugin kargo menggunakan tata letak yang sama dengan plugin perang.
Plugin kargo mendefinisikan properti konvensi berikut dalam penutupan cargo :
containerId : ID wadah yang Anda targetkan. Silakan lihat daftar kontainer yang didukung di situs web kargo.port : Port TCP Kontainer merespons (default ke 8080). Di dalam cargo Anda dapat mendefinisikan properti opsional untuk artefak penyebaran 1..n dalam penutupan bernama deployable . Setiap artefak penyebaran akan ditentukan dalam penutupannya sendiri:
file : Jenis apa pun yang dapat diteruskan ke Project.files (Object ...) dan diselesaikan ke satu file atau direktori termasuk artefak sewenang -wenang, direktori perang yang meledak dan konfigurasi ketergantungan yang akan digunakan ke kontainer (default ke proyek/modul artefak - war atau file telinga).context : Konteks URL Kontainer menangani aplikasi web Anda pada (default ke nama perang/telinga). Ingatlah bahwa Anda tidak perlu menentukan penutupan deployable jika Anda hanya ingin menggunakan artefak yang ditentukan oleh proyek/modul lulusan Anda.
Dalam cargo Anda dapat mendefinisikan properti untuk wadah jarak jauh dalam penutupan bernama remote :
protocol : Protokol wadah jarak jauh (default ke http ).hostname : Nama host dari wadah jarak jauh.username : Kredensial Nama Pengguna untuk Wadah Jarak Jauh (Opsional).password : Kredensial kata sandi untuk wadah jarak jauh (opsional). Dalam cargo Anda dapat mendefinisikan properti untuk wadah lokal dalam penutupan bernama local :
jvmArgs : Argumen JVM untuk wadah lokal.outputFile : File log wadah lokal Anda (default untuk menulis ke konsol).logFile : File log kargo dari wadah lokal Anda (default untuk menulis ke konsol).logLevel : Level log untuk menjalankan wadah dengan (opsional). Level yang valid low , medium dan high .homeDir : Direktori rumah instalasi wadah lokal Anda.configHomeDir : Direktori rumah konfigurasi wadah lokal Anda.configFile : File konfigurasi yang ingin Anda tambahkan ke konfigurasi wadah Anda. configFile adalah penutupan itu sendiri dan mengharuskan Anda untuk menyediakan files atribut dan toDir . FileCollection harus digunakan sebagai atribut files dan toDir harus berupa String . Beberapa tujuan file konfigurasi dapat ditentukan dengan membuat lebih dari satu penutupan configFile .rmiPort : Port yang akan digunakan saat berkomunikasi dengan server ini, misalnya untuk memulai dan menghentikannya.startStopTimeout : The Timeout (dalam MS) di mana untuk menentukan apakah wadah berhasil dimulai atau dihentikan (default ke 1.20000ms).extraClasspath : Penagihan FileCollection yang menyediakan elemen tambahan untuk classpath wadah lokal (opsional).sharedClasspath : FileCollection yang menyediakan elemen tambahan untuk ClassPath aplikasi, dan bukan ke wadah lokal (opsional). Dalam local dan remote Anda dapat mendefinisikan sifat khusus wadah. Properti ini dapat dilihat di beranda kargo. Contoh berikut menunjukkan cara mengatur port AJP untuk wadah Tomcat lokal:
cargo {
local {
containerProperties {
property 'cargo.tomcat.ajp.port', 9099
}
}
}
Wadah lokal dapat menggunakan properti sistem yang diteruskan ke sana. Contoh berikut menunjukkan cara mengatur properti sistem tunggal bernama myproperty :
cargo {
local {
systemProperties {
property 'myproperty', 'myvalue'
}
}
}
Jika Anda memutuskan untuk menggunakan ZIP Installer Cargo akan secara otomatis mengunduh wadah Anda. Anda dapat mendefinisikan propertinya di installer penutupan. Penginstal hanya berlaku untuk tugas kargo "lokal".
installUrl : URL untuk mengunduh distribusi kontainer dari.downloadDir : Target Directory untuk mengunduh distribusi kontainer ke.extractDir : Direktori untuk mengekstrak distribusi kontainer yang diunduh ke.Silakan merujuk ke properti konfigurasi individual di beranda kargo. Semua properti ini dapat ditimpa oleh properti proyek. Nama properti proyek sama seperti di manual kargo.
Jika Anda ingin mendapat manfaat dari cache ketergantungan gradle saat menyelesaikan distribusi kontainer, Anda dapat menggunakan konfigurasi alih -alih URL saat mengkonfigurasi penginstal:
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
}
}
}
Saya ingin secara otomatis mengumpulkan artefak proyek saya saat menjalankan tugas penyebaran kargo.
Tugas cargoRunLocal tidak secara otomatis bergantung pada tugas assemble . Alasan di balik itu adalah bahwa Anda mungkin tidak ingin menggunakan artefak proyek Anda atau proyek Anda tidak menghasilkan perang atau file telinga. Sebaliknya Anda mungkin ingin menggunakan satu atau lebih artefak eksternal. Jika alur kerja Anda terlihat seperti "mengkompilasi kode", "menghasilkan artefak" dan "penyebaran" maka Anda membuat tugas penyebaran kargo tergantung pada tugas assemble . Inilah satu contoh:
cargoRunLocal.dependsOn assemble
Saya sedang mengerjakan build multi-proyek. Dapatkah saya menerapkan konfigurasi kargo yang sama untuk semua proyek web saya?
Gradle memungkinkan untuk memfilter subproyek dengan kriteria tertentu. Untuk menyuntikkan konfigurasi yang relevan dari proyek root build Anda, Anda perlu mengidentifikasi semua subproyasi yang menerapkan plugin perang (tentu saja konsep yang sama berfungsi untuk proyek telinga). Gunakan metode configure untuk menerapkan plugin kargo dan konfigurasi Anda seperti yang ditunjukkan pada cuplikan kode berikut:
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'
}
}
}
}
Saya ingin menggunakan beberapa artefak ke wadah saya. Bagaimana cara melakukannya?
Anda akan menentukan setiap artefak dalam penutupan deployable . Setiap penutupan harus menetapkan konteks URL yang unik. Contoh berikut menunjukkan bagaimana pengaturan kargo dengan tiga artefak yang berbeda digunakan ke tomcat lokal:
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')
}
}
Apakah ada cara untuk membiarkan kargo secara otomatis menginstal wadah yang ingin saya gunakan?
Cargo memungkinkan untuk mendefinisikan wadah yang secara otomatis diunduh dan diinstal pada disk lokal Anda. Yang perlu Anda lakukan adalah menentukan penutupan installer . Cuplikan kode berikut mengunduh, menginstal dan menggunakan 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")
}
}
}
Saya ingin menambahkan file konfigurasi ke wadah lokal saya. Bagaimana cara melakukannya?
Untuk wadah lokal penutupan bernama configFile dapat digunakan yang mendefinisikan file sumber dan direktori yang ingin Anda gunakan file dari saat runtime. Jika Anda perlu menyalin file ke lebih dari satu tujuan, cukup buat beberapa penutupan 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'
}
}
}
Untuk menambahkan file biner, Anda harus menggunakan penutupan file sebagai gantinya:
cargo {
containerId = 'glassfish3x'
local {
file {
file = file('../config/db/mysql-connector-java-5.1.23-bin.jar')
toDir = 'lib'
}
}
}
Saya ingin mengatur dan mengonfigurasi tugas kargo saya sendiri untuk lebih dari satu wadah. Bisakah ini dilakukan?
Sangat. Plugin dasar kargo menyediakan semua tugas yang diperlukan untuk mengatur tugas penyebaran. Yang perlu Anda lakukan adalah membuat satu atau lebih tugas dan mengkonfigurasi properti wajib. Contoh berikut menunjukkan cara mengatur tugas wadah lokal untuk Tomcat dan 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')
}
Saya ingin membuat tugas penyebaran untuk penyebaran bergulir ke beberapa wadah jarak jauh. Bagaimana cara melakukan ini?
Gradle memungkinkan untuk membuat tugas secara dinamis berdasarkan logika skrip build Anda. Contoh berikut menunjukkan cara membuat tiga tugas penyebaran tomcat dan cara mengonfigurasinya dengan bantuan struktur data sederhana. Di akhir skrip kami juga menambahkan tugas lain yang memicu penyebaran ke semua wadah jarak jauh.
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'
}
Sebelum penempatan jarak jauh, saya ingin memulai kembali wadah saya. Bisakah ini dilakukan?
Ya, ini dimungkinkan dengan bantuan fungsionalitas daemon kargo. Silakan merujuk ke dokumentasi Cargo Online untuk menyiapkan proses JVM Daemon Cargo dan mengkonfigurasi wadah. Dengan plugin ini, Anda dapat menggunakan tugas khusus untuk memulai dan menghentikan wadah. Contoh berikut berhenti, dimulai dan kemudian memindahkan kembali artefak.
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