我對gradle比較陌生。 爲了在集羣上創建自動部署腳本,我創建了一組相互依賴的自定義任務。例如:如何在自定義任務中定義默認dependsOn
class StartSchedulerTask extends SchedulerTask {
@TaskAction
void start() {
dependsOn env.nodes.name.collect {"startTomcat_$it"}
println "Starting quartz on node: ${node}"
}
}
中的build.gradle,我是動態創建的任務:
project.extensions.environment.nodes.each { TomcatNode n ->
String name = n.name
task "nodeInit_$name"(type: DeployToNodeInitTask) {
node(n)
}
task "stopWorker_$name"(type: StopWorkerTask) {
node(n)
}
task "stopTomcat_$name"(type: StopTomcatTask){
node(n)
}
task "updateAppConfigs_$name"(type: UpdateAppConfigsTask){
node(n)
apps(V3Application.ALL_APPS)
buildName('develop')
}
task "deployWars_$name"(type: DeployWarsTask){
node(n)
apps(V3Application.ALL_APPS)
buildName('develop')
}
task "startTomcat_$name"(type: StartTomcatTask){
node(n)
}
task "startWorker_$name"(type: StartWorkerTask){
node(n)
}
task "terminateNode_$name"(type: DeployToNodeTerminationTask){
node(n)
}
}
task stopScheduler(type: StopSchedulerTask) {
environment(environment)
}
task startScheduler(type: StartSchedulerTask) {
environment(environment)
}
默認任務配置爲startScheduler,這是部署過程的最後一步,這個想法因爲任務圖一旦建立,就會照顧我任務的正確執行順序。
但是,當我打印出任務圖時,列出的唯一任務是startScheduler。我錯過了什麼嗎?
我不明白爲什麼要將這些知識編碼到任務類型中。連接任務應該由創建任務的相同實體完成 - 無論是構建腳本還是插件。 –
好的彼得,所以也許你可以建議如何可以在插件內完成?爲什麼這些知識不在buid腳本中,是因爲我需要一個腳本,可以在其中聲明性地編碼羣集的拓撲結構。我不想因爲在部署戰爭之前感到困擾,所以我需要關閉我的Tomcat工作人員。這低於我的構建腳本的抽象級別。 – loteq
我用配置示例和任務聲明更新了答案 – loteq