GitHub Actions:检测Javadoc目录及处理Shell命令输出的方法
GitHub Action Javadoc目录检查失败不报错的解决办法
直接让Shell脚本触发失败(最简单方案)
你当前的脚本里,即使ls javadoc执行失败,bash默认会继续执行后续命令,导致工作流不会主动报错。可以用两种方式修复:
方式1:手动检查目录并主动退出
修改工作流步骤如下:
- name: Check that the javadoc folder is created run: | git fetch git checkout javadoc-test # 检查javadoc目录是否存在 if [ ! -d "javadoc" ]; then echo "错误:javadoc目录不存在" exit 1 fi # 可选:检查目录是否有内容(避免生成空的Javadoc目录) if [ -z "$(ls -A javadoc)" ]; then echo "错误:javadoc目录为空" exit 1 fi shell: bash
[ ! -d "javadoc" ]判断目录不存在时,用exit 1抛出非零退出码,GitHub Action会直接标记该步骤失败,终止工作流。- 空目录检查可按需保留,确保生成的Javadoc文件有效。
方式2:开启bash严格模式
在脚本开头添加set -e,让bash在任何命令失败时立即退出:
- name: Check that the javadoc folder is created run: | set -e git fetch git checkout javadoc-test ls javadoc shell: bash
这样不管是git fetch、git checkout还是ls javadoc,只要有一步执行失败,脚本就会立刻退出,工作流随之失败。
结合GitHub Workflow表达式实现条件判断
如果需要在工作流层面做逻辑判断,可以分两步实现:
- name: 检查javadoc目录状态 id: check_javadoc run: | git fetch git checkout javadoc-test if [ -d "javadoc" ]; then echo "exists=true" >> $GITHUB_OUTPUT else echo "exists=false" >> $GITHUB_OUTPUT fi shell: bash - name: 目录不存在时触发失败 if: steps.check_javadoc.outputs.exists == 'false' run: | echo "错误:javadoc目录不存在" exit 1
- 第一步通过
$GITHUB_OUTPUT输出目录存在状态,供后续步骤调用。 - 第二步用Workflow表达式
steps.check_javadoc.outputs.exists == 'false'判断条件,满足时执行报错退出命令。
重要提醒
你之前的代码里bash: shell是参数写反了,正确写法是shell: bash,这个错误也可能导致脚本行为不符合预期!
内容的提问来源于stack exchange,提问作者ThrowsError
相关产品推荐
相关产品推荐

