jenkins - 使用多项目 gradle 构建创建 Jenkins 管道
问题描述
我有一个在本地工作的多项目 Gradle 构建。有一个父 gradle 文件, build.gradle 的 settings.gradle 文件将项目分配给它们各自的 gradle 构建文件:
include 'load'
include 'loadRemote'
project(':loadRemote').buildFileName = 'remoteLoad_build.gradle'
project(':load').buildFileName = 'load_build.gradle'
rootProject.name = 'EquipLoad'
build.gradle 父文件调用buildAll
命令在本地从命令行构建 2 个项目。我创建了一个 Jenkins 文件来构建这两个项目。但 Jenkins 流水线不识别具体的项目任务。这些是buildAll
命令 gradle.projectsEvaluated {
task compileAll (dependsOn: [project(':loadRemote').remoteLoadCleanCompileStage]) {
compileAll.finalizedBy project(':load').loadCleanCompileStage
}
task packageAll (dependsOn: [project(':loadRemote').remoteLoadPackage]) {
packageAll.finalizedBy project(':load').loadPackage
}
task buildAll (dependsOn: [compileAll]) {
buildAll.finalizedBy packageAll
}
}
Jenkins中的错误是它不识别任务project(':loadRemote').remoteLoadCleanCompileStage
如何在 Jenkins 中识别多构建项目?我必须添加 settings.gradle 文件吗?
更新 我认为不同的构建文件不能位于项目中,所以我将它添加到 settings.gradle 文件中
rootProject.name = 'EquipLoad'
include 'load'
project(':load').projectDir = new File(settingsDir, rootProject.rootDir.getAbsolutePath() + "/Load")
project(':load').buildFileName = 'load_build.gradle'
include 'loadRemote'
project(':loadRemote').projectDir = new File(settingsDir, rootProject.rootDir.getAbsolutePath() + "/LoadRemote")
project(':loadRemote').buildFileName = 'remoteLoad_build.gradle'
报错还是一样,build.gradle文件(父级)不识别依赖任务project(':loadRemote').remoteLoadCleanCompileStage
查看调试语句,发现并识别出子构建gradle文件: Evaluating project ':loadRemote' using build file '/var/ .../loadRemote/remoteLoad_build.gradle'。加载构建文件显示相同的文本。然而,这些 gradle 构建文件中的任务在父 build.gradle 文件中无法识别。
解决方案
问题是一个简单的区分大小写的错误。我将文件夹命名为:Load 和 LoadRemote。但在 gradle 脚本中将它们标识为 ':load' 和 ':loadRemote'。通过将脚本文本更改为 ':Load' 和 ':LoadRemote' 解决了我的问题。
推荐阅读
- c# - 锁定 Thread.CurrentThread.CurrentUICulture
- javascript - 三.js | 通过搅拌机对导入的 .obj 模型进行光线投射
- azure-data-factory - 如何从数据工厂中获取 XML?
- c# - azureml sdk 是否支持 c 语言?
- php - 提交GET方法表单后,如何修复“on”和“search=+”字符未出现在Url上?
- php - 带有查询参数的 PHP Elasticsearch
- kubernetes - 禁止:“system:serviceaccount:default:default”无法创建资源。如何添加权限?
- javascript - 从 YouTube Player API 向 iframe 添加 HTML 属性
- python - 在 Visual Studio Code 中编写 Python 时,下划线在 Docstrings 中使用反斜杠进行转义
- android - 重新创建活动时使用原始 Intent