Jenkins生成发布Javadoc阶段日志显示成功但构建失败
Jenkins流水线Javadoc阶段失败但日志显示成功的解决方法
问题描述
Windows环境下的Generate and publish Javadoc on Windows阶段触发构建失败,但查看执行日志时却显示任务已成功完成。对应的流水线代码如下:
stage('Generate and publish Javadoc on Windows') { when { expression { env.OS == 'BAT' }} steps { dir('') { bat 'gradlew.bat javadoc' javadoc javadocDir: 'build/docs/javadoc', keepAll: true } } }
推测原因是代码无变更导致Javadoc无新内容可发布,进而引发阶段失败。
解决方法
1. 检查Javadoc目录状态后再执行发布
在javadoc步骤前添加目录检查,避免因目录为空或不存在导致失败:
stage('Generate and publish Javadoc on Windows') { when { expression { env.OS == 'BAT' }} steps { dir('') { bat 'gradlew.bat javadoc' script { def javadocDir = new File('build/docs/javadoc') if (javadocDir.exists() && javadocDir.list().length > 0) { javadoc javadocDir: 'build/docs/javadoc', keepAll: true } else { echo "Javadoc目录为空或不存在,跳过发布步骤" } } } } }
2. 强制Gradle生成Javadoc
若Gradle因无代码变更跳过Javadoc任务,可通过clean命令强制重新生成:
bat 'gradlew.bat clean javadoc'
注意:clean会清理构建目录,可能增加构建耗时,按需使用。
3. 配置Javadoc插件容错
如果Jenkins Javadoc插件支持,添加failOnError: false参数,避免无内容时触发阶段失败:
javadoc javadocDir: 'build/docs/javadoc', keepAll: true, failOnError: false
4. 基于代码变更条件执行阶段
通过检查Git提交中是否有Java文件变更,决定是否执行该阶段:
stage('Generate and publish Javadoc on Windows') { when { allOf { expression { env.OS == 'BAT' } expression { def changedFiles = currentBuild.changeSets.flatMap { it.items }.flatMap { it.affectedFiles }.collect { it.path } return changedFiles.any { it.endsWith('.java') } } } } steps { dir('') { bat 'gradlew.bat javadoc' javadoc javadocDir: 'build/docs/javadoc', keepAll: true } } }
内容的提问来源于stack exchange,提问作者Fábio Pires
相关产品推荐
相关产品推荐

