Я пытаюсь выполнить несколько задач Gradle в моем файле build.gradle
, чтобы развернуть войну в разных средах. Я хочу иметь задачу deployToLocal
вместе с deployToQA
и deployToDev
после создания файла войны.Использование плагина Gradle Cargo для развертывания в нескольких средах
Конечно, это означает, что я хочу остановить службу Tomcat, удалить существующие военные файлы и расширенные войны в каталоге Tomcat Webapps, скопировать войну и снова запустить Tomcat для развертывания службы.
Мой вопрос имеет два аспекта:
- Я уточнял расположение войны, я буду копирование вместе со всеми имя хоста, порт и имя пользователя/пароль информации. Мой вопрос: как мне указать, какое место в удаленных средах (структура каталогов) необходимо скопировать войну ?
- В конце концов, я пытаюсь достичь, это правильный способ двигаться вперед?
Мой код до сих пор:
task deleteDirLocalhost(type: Delete){
//delete fileTree(dir: local_Tomcat_webapps_dir)
delete fileTree(dir: 'C:\\Tomcat7.0\\webapps')
}
task deployToLocal{
dependsOn war, tomcatStop, deleteDirLocalhost
println "Starting Cargo"
println "Using war from: $warLocation" // warLocation is a variable defined in gradle.properties file
cargo {
containerId = 'tomcat7x'
port = TomcatPortLocalhost as Integer
local {
homeDir = file(local_Tomcat_webapps_dir) // local_Tomcat_webapps_dir is a variable defined in gradle.properties file
}
deployable {
file = file(warLocation) // This is where I specify where the war file is to be copied from. In the 'local' section, I have specified 'homeDir' as the location where I want this file to be copied to. Is that correct usage?
context = 'web-application'
}
}
tomcatRunWar
}
task deployToQA{
dependsOn war, tomcatStop, deleteDirQA
println "Starting Cargo"
println "Using war from: $warLocation"
cargo {
containerId = 'tomcat7x'
port = TomcatPortQA as Integer
remote {
hostname = server_address_qa // all these are variables defined in the gradle.properties file
username = username_qa
password = password_qa
}
deployable {
file = file(warLocation) // This is where I specify the location of the war file. How do I specify in the 'remote' section in which directory in the server this file should be copied to?
context = 'web-application'
}
}
tomcatRunWar
}
task deployToDev{
dependsOn war, tomcatStop, deleteDirDev
println "Starting Cargo"
println "Using war from: $warLocation"
cargo {
containerId = 'tomcat7x'
port = TomcatPortDev as Integer
remote {
hostname = RT3_webapp_address_dev
username = username_dev
password = password_dev
}
deployable {
file = file(warLocation)
context = 'web-application'
}
}
tomcatRunWar
}
Я хочу назвать задачу gradle deployToLocal
и ожидать, что поведение, локальный экземпляр Tomcat остановлен, война копируется в моей Tomcat \ WebApps папку (с любым ранее существовавших файлы или папки в той же папке, которые были удалены), а затем снова запускается служба Tomcat и развертывается война.
Это не работает, и, очевидно, я чего-то не хватает. Я также просмотрел веб-сайт для надежного, полностью разработанного примера реализации плагина gradle cargo/tomcat без большой удачи. Может ли кто-нибудь указать мне в правильном направлении?
Заранее благодарю за помощь!
спасибо, Ben! Это отвечает на многие мои вопросы. Быстрый вопрос о последующих действиях: «Cargo требует, чтобы вы либо указали на локальную установку контейнера, либо удаленный URL» - поэтому, когда я разворачиваю военный файл с учетом информации о контейнере, Cargo автоматически помещает войну в папку webapps внутри каталог установки Tomcat? Мне не нужно указывать конкретное место, где я хочу, чтобы файл был помещен, не так ли? Наконец, если я хочу, чтобы файл войны был помещен где-то, кроме папки Tomcat/webapps, был ли способ сделать это, чтобы скопировать его в нужное место? –
Cargo использует диспетчер Tomcat (http://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html) для развертывания WAR-файла. Я считаю, что вы можете использовать свойство 'cargo.tomcat.webappsDirectory' для определения другого каталога' webapps'. Для получения дополнительной информации ознакомьтесь с документацией Cargo. –
Я только что увидел, что Cargo теперь предоставляет функциональные возможности управления жизненным циклом контейнера. Cargo называет это [Cargo daemon] (http://cargo.codehaus.org/Cargo+Daemon). Мой план состоит в том, чтобы в ближайшем будущем обеспечить его задачи. –