java - 如何在 Jenkins 中执行多个 Gradle 任务,或将多个 Gradle 任务串起来?
问题描述
我有一个 Jenkins 构建,其中“目标”(或 Gradle 中的任务)作为环境变量传递给我的 Jenkinsfile。
例如sh "gradle ${GRADLE_TASKS}"
,GRADLE_TASKS
值"clean build"
将在哪里运行gradle clean build
。
在我进入子项目之前,这非常有效。
假设我有子项目
root
|-- com.mycompany
|-- com.mycompany.api
\-- com.mycompany.ui
据我所知,如果我想运行一个干净的构建,com.mycompany.api
我需要以下命令:
gradle :com.mycompany.api:clean :com.mycompany.api:build
我的问题是传递的变量可能代表一个(或多个)要运行的任务。clean
, build
, clean build
, deploy
,等clean deploy
_clean publish deploy
注意:我需要将此保留在使用 Jenkinsfile(例如,不是 Gradle 插件)的解决方案中,因为它是一个混合构建,不仅使用 Gradle。
我的第一直觉是循环执行任务(如下所示),但 Jenkins 似乎不允许你像这样运行循环。
def tasks = GRADLE_TASKS.split(' ')
tasks.each { task ->
sh "gradle :com.mycompany.api:${task}"
}
我该怎么办?
[编辑] 我也应该指定,有没有办法运行这个嵌套的,这样我就可以clean
所有子项目然后build
?
例如,相当于:
gradle :com.mycompany.api:clean :com.mycompany.ui:clean
gradle :com.mycompany.api:build :com.mycompany.ui:build
我会这样做(如下),但显然詹金斯不喜欢时髦的闭包......
tasks.each { task ->
subprojects.each {project ->
gradle :${project}:${task}
}
}
解决方案
看起来@tim_yates 提供的答案在某种程度上以一种非常“时髦”的方式回答了这个问题。
sh "gradle ${GRADLE_TASKS.split(' ').collect { ":com.mycompany.api:${it}" }.join(' ')}"
推荐阅读
- ios - cellForRow(at: ) 返回 nil
- python - 输入一个项目并在python中获取它的正则表达式
- javascript - 使用 vanilla JavaScript 设置元素的位置
- php - .htaccess 将非 www 重定向到 www 和 http:// 到 https://
- android - 限制特定应用程序的移动和 wifi 数据
- haskell - Haskell Lens 组成的?~
- version-control - 如何在 Linux 平台上进行 RTC 打包
- python - Xlsxwriter - 执行条件格式后不显示 0
- amazon-web-services - 创建 IAM 托管策略时出错
- selenium - 查找所有属性名称以“aria”开头的 HTML 元素