Deb*_*Dey 7 deployment tomcat cargo gradle build.gradle
我试图在我的build.gradle文件中有多个Gradle任务来将战争部署到不同的环境.我希望能够有一个deployToLocal沿任务deployToQA和deployToDev已经生成一个war文件之后.
当然,这意味着我想停止Tomcat服务,删除Tomcat webapps目录中的现有war文件和扩展的war,复制war,然后重新启动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
}
Run Code Online (Sandbox Code Playgroud)
我想调用任务gradle deployToLocal并期望本地Tomcat实例停止的行为,将war复制到我的Tomcat\webapps文件夹(同一文件夹中的任何以前存在的文件或文件夹已被删除),然后启动Tomcat服务战争再次展开.
这不起作用,显然我错过了一些东西.我还在网上搜索了一个完整的完整实例的gradle cargo/tomcat插件的实现,没有太多运气.有人可以指点我正确的方向吗?
预先感谢您的任何帮助!
Ben*_*hko 12
Tomcat和Cargo插件是两个截然不同的插件,并且在您尝试解决问题的方式上不能彼此协同工作.Tomcat插件仅为Tomcat提供内存中嵌入式容器(意味着您不必进行本地安装),而Cargo要求您指向本地容器安装或远程URL.为了您的目的,我将完全使用Cargo插件.
您在任务中定义的所有代码都在配置阶段执行.在多个任务中使用Cargo插件的DSL将覆盖先前的声明.为了更好地理解执行与配置阶段,我建议您查看Gradle在线用户指南.请记住,Cargo一般不提供远程容器的管理功能(启动/停止).这也在插件的README文件中提到过.如果你想做类似的事情,你必须编写运行远程SSH命令的任务.
除了无法使用插件启动/停止容器外,您的实际问题可以通过多种方式解决.您可以使用Cargo插件DSL并动态分配远程主机名,端口,用户名,密码,也可以创建多个任务.您似乎仍希望为每个环境创建多个任务.为此,应用cargo-base插件并创建两个类型的任务CargoDeployRemote,一个用于您的开发,一个用于您的QA环境.在那种情况下,您没有使用插件公开的DSL.当然,您还要为本地Tomcat安装创建另一个任务以及相应的任务类型.
apply plugin: 'cargo-base'
import com.bmuschko.gradle.cargo.convention.Deployable
import com.bmuschko.gradle.cargo.tasks.remote.CargoDeployRemote
task deployToQA(type: CargoDeployRemote) {
containerId = 'tomcat7x'
hostname = server_address_qa
port = TomcatPortQA as Integer
username = username_qa
password = password_qa
deployables = [new Deployable(file: file(warLocation), context: 'web-application')]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6932 次 |
| 最近记录: |