| 過去数年にわたって、このプラグインは多くのリリースを見てきました。関係者全員に感謝します!残念ながら、私はもう貢献する時間がありません。実際には、これはアクティビティがはるかに少なく、問題に対する応答性、そして私の側からの新しいリリースを意味します。 |
| 私は、プロジェクトのメンテナンスと実装を喜んで引き受ける貢献者を積極的に探しています。興味があり、このプラグインが繁栄し続けるのを見たいなら、私にメールを送ってください。 |
プラグインは、貨物タスクを活用することにより、特定のGradleビルドのローカルおよびリモートコンテナへのWebアプリケーションの展開機能を提供します。プラグインは、戦争と耳のアーティファクトをサポートしています。
このプラグインの典型的なユースケースは、開発中の展開をサポートすることです。貨物は、コンテナを実行するJVMプロセスのパーマンメモリを時間の経過とともに満たすホットデプロイメントを使用することに注意してください。アーティファクトを継続的に展開すると、不可避性がjava.lang.OutOfMemoryErrorにつながります。貨物は、いわゆる貨物デーモンを介して、コンテナ管理機能(リモートコンテナの開始/停止)をサポートします。ただし、継続的な展開シナリオでは、より複雑な操作を実行する必要があることがよくあります。
プラグインの機能を使用するには、そのバイナリアーティファクトをビルドスクリプトのClassPathに追加してプラグインを適用する必要があります。
プラグインジャーは、ビルドスクリプトのクラスパスで定義する必要があります。 Gradleプラグインポータルで利用できます。次のコードスニペットは、 buildscript構文でそれを取得する方法の例を示しています。
buildscript {
repositories {
gradlePluginPortal()
}
dependencies {
classpath 'com.bmuschko:gradle-cargo-plugin:2.9.0'
}
}
JARファイルには2つのプラグインが付属しています。
| プラグイン識別子 | に依存します | タイプ | 説明 |
|---|---|---|---|
| com.bmuschko.cargo-base | - | Cargobaseplugin | 貨物のカスタムタスクタイプ、事前にClassPathおよびDeployablesを提供します。 |
| 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プラグインは、すでに貨物の依存関係を設定しています。そうするために、ライブラリのデフォルトバージョンを選択します。または、貨物ライブラリのカスタムバージョンを定義することもできます。そのためには、 dependencies閉鎖でcargo構成名を使用して、以下を念頭に置いてください。
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 | リモートコンテナから展開可能な展開。 |
| cargoredeployremote | - | cargoredeployremote | 展開可能なリモートコンテナを再配備します。 |
| Cargorunlocal | - | Cargorunlocal | ローカルコンテナを起動し、展開可能を展開し、ユーザーがCtrl + Cを押して停止するのを待ちます。 |
| Cargostartlocal | - | Cargostartlocal | ローカルコンテナを起動し、展開可能を展開してから、他のタスクを実行します(たとえば、テストを実行します)。 |
| Cargoredeploylocal | - | Cargoredeploylocal | ローカルコンテナに展開可能な展開を再展開します。 |
| 炭水化物 | - | 炭水化物 | ローカルコンテナを停止します。 |
| Cargoconfigurelocal | - | Cargoconfigurelocal | ローカルコンテナを構成します。 |
貨物プラグインは、戦争プラグインと同じレイアウトを使用します。
貨物プラグインは、 cargo閉鎖内の次のコンベンションプロパティを定義します。
containerId :ターゲットにしているコンテナID。貨物Webサイトのサポートされているコンテナのリストをご覧ください。port :TCPポートコンテナが応答します(デフォルトは8080)。 cargo内では、 deployable閉鎖内の1..n展開アーティファクトのオプションプロパティを定義できます。各展開アーティファクトは、独自の閉鎖で指定されます。
file :project.files(オブジェクト...)に渡すことができ、任意のアーティファクト、爆発した戦争ディレクトリ、コンテナに展開される依存関係構成を含む単一のファイルまたはディレクトリに解決できる任意のタイプ(プロジェクト/モジュールアーティファクト - 戦争または耳ファイルにデフォルト)。context :URLコンテキストコンテナがWebアプリケーションを処理しています(デフォルトは戦争/耳名になります)。 Gradle Project/Moduleで定義されたアーティファクトを展開するだけで、 deployable閉鎖を定義する必要はないことに注意してください。
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)(デフォルトは120000msになります)。extraClasspath :ローカルコンテナクラスパスに追加の要素を提供するFileCollectionクション(オプション)。sharedClasspath :Application ClassPathに追加の要素を提供し、ローカルコンテナ(オプション)ではなく追加の要素を提供するFileCollection 。localおよびremote内で、コンテナ固有のプロパティを定義できます。これらのプロパティは、貨物ホームページで調べることができます。次の例は、地元のTomcatコンテナ用にAJPポートを設定する方法を示しています。
cargo {
local {
containerProperties {
property 'cargo.tomcat.ajp.port', 9099
}
}
}
ローカルコンテナは、渡されたシステムプロパティを使用できます。次の例は、 mypropertyという名前の単一のシステムプロパティを設定する方法を示しています。
cargo {
local {
systemProperties {
property 'myproperty', 'myvalue'
}
}
}
Zip Installer Cargoを使用する場合は、コンテナが自動的にダウンロードされます。閉鎖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タスクに自動的に依存しません。その背後にある理由は、あなたがあなたのプロジェクトのアーティファクトを展開したくないかもしれないか、あなたのプロジェクトが戦争または耳のファイルを生成しないからです。代わりに、1つ以上の外部アーティファクトを展開することをお勧めします。ワークフローが「コードをコンパイルする」、「アーティファクトを生成する」、「展開」のように見える場合、貨物展開タスクはassembleタスクに依存します。 1つの例があります:
cargoRunLocal.dependsOn assemble
私はマルチプロジェクトビルドに取り組んでいます。すべてのWebプロジェクトに同じ貨物構成を適用できますか?
Gradleでは、特定の基準でサブプロジェクトをフィルタリングできます。ビルドのルートプロジェクトから関連する構成を挿入するには、WARプラグインを適用するすべてのサブプロジェクトを特定する必要があります(もちろん、同じ概念がEARプロジェクトで機能します)。次のコードスニペットに示すように、 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コンテキストを割り当てる必要があります。次の例は、3つの異なるアーティファクトを備えた貨物のセットアップが地元の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'
}
}
}
複数のコンテナ用に自分の貨物タスクをセットアップして構成したいと思います。これはできますか?
絶対に。貨物ベースプラグインは、展開タスクをセットアップするために必要なすべてのタスクを提供します。必要なのは、1つ以上のタスクを作成し、必須のプロパティを構成することです。次の例は、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を使用すると、ビルドスクリプトロジックに基づいて動的にタスクを作成できます。次の例は、3つの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'
}
リモート展開の前に、コンテナを再起動したいと思います。これはできますか?
はい、これは貨物デーモン機能の助けを借りて可能です。貨物デーモン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