Как я могу создать задачу, которая динамически устанавливает идентификатор проекта движка приложения и запускает задачу appengineDeploy
?
В этом примере, когда я запускаю deployStaging
appengineDeploy
выполняется с проектом «a», как я могу переписать этот код, чтобы он работал с проектом «b»?
buildscript {
dependencies {
classpath("com.google.cloud.tools:appengine-gradle-plugin:2.0.1")
}
}
apply plugin: 'com.google.cloud.tools.appengine'
def gcpProject = 'a'
appengine {
deploy {
projectId = gcpProject
}
}
task deployStaging() {
doLast {
gcpProject = 'b'
}
}
deployStaging.finalizedBy appengineDeploy
Как насчет использования собственность проекта вместо этого? Свойства проекта можно передать через -P
параметры командной строки:
buildscript {
dependencies {
classpath("com.google.cloud.tools:appengine-gradle-plugin:2.0.1")
}
}
apply plugin: 'com.google.cloud.tools.appengine'
def gcpProject = project.findProperty('stageName') ?: 'a'
appengine {
deploy {
projectId = gcpProject
}
}
Теперь, если вы просто вызовете ./gradlew appengineDeploy
, переменная gcpProject
будет иметь значение «a». Если вы вызовете ./gradlew appengineDeploy -PstageName=b
, переменная gcpProject
будет иметь значение «b».
Если вы действительно не можете этого сделать, вам придется создать дополнительную задачу типа DeployTask с помощью task deployStage(type: DeployTask)
. Затем из-за того, как реализован плагин (github.com/GoogleCloudPlatform/app-gradle-plugin/blob/…), вам необходимо внедрить свою собственную конфигурацию развертывания. Я действительно предлагаю перейти к свойствам проекта и определить пользовательскую конфигурацию запуска gradle в IntelliJ.
Ответ предоставлен людьми плагина gradle:
appengine {
deploy {
version = "123"
// do not define projectId here
}
}
task deployStaging {
dependsOn appengineDeploy
}
task deployProduction {
dependsOn appengineDeploy
}
// here's the weird gradle logic, use at your own risk
if (project.gradle.startParameter.taskNames.contains("deployStaging")) {
appengine.deploy.projectId = "potato-stage"
}
else if (project.gradle.startParameter.taskNames.contains("deployProduction")) {
appengine.deploy.projectId = "tomato-prod"
}
Спасибо за ответ @britter. На эта ссылка тоже есть одно решение похожее на предложенное вами. В моем случае, если это возможно, я хотел бы иметь разные задачи, чтобы избежать добавления этой конфигурации на intellij