Jenkins多模块Gradle项目构建配置:可选模块/全量构建传镜像
解决Jenkins多模块Gradle项目的单模块/全量构建问题
方案一:新增全量选项+Groovy脚本生成任务(推荐)
- 修改已有的Choice参数,在选项中添加
all,让用户可以选择单个模块或全量构建 - 添加Execute system Groovy script构建步骤,通过脚本动态生成Gradle任务参数:
def targetProject = env.PROJECT def gradleTasks = targetProject == "all" ? "clean build jib" : "${targetProject}:clean ${targetProject}:build ${targetProject}:jib" env.GRADLE_TASKS = gradleTasks
- 在Invoke Gradle script步骤中,将Tasks字段设置为
${GRADLE_TASKS},同时勾选"Use Gradle wrapper"确保环境一致
方案二:处理空参数+属性文件传递变量
如果你的Choice参数允许空值(默认空代表全量构建),可以用shell+属性文件传递变量:
- 添加Run shell command步骤,生成包含任务参数的属性文件:
if [ -z "$PROJECT" ]; then echo "GRADLE_TASKS=clean build jib" > gradle_tasks.properties else echo "GRADLE_TASKS=$PROJECT:clean $PROJECT:build $PROJECT:jib" > gradle_tasks.properties fi
- 添加Inject environment variables步骤,选择"Properties File Path",填写
gradle_tasks.properties - 在Invoke Gradle script步骤的Tasks字段中填入
${GRADLE_TASKS}
为什么之前的shell变量无效?
Jenkins的每个shell步骤都是独立的进程,直接用export定义的变量无法跨步骤传递。必须通过属性文件、Groovy操作全局环境变量这类方式,才能让后续步骤读取到变量值。
内容的提问来源于stack exchange,提问作者Virkom
相关产品推荐
相关产品推荐

