You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash语法`command && break`正确性咨询及Blackduck扫描重试脚本问题

Jenkins中Blackduck扫描失败重试脚本问题及解答

在Jenkins构建流程中,将本地PR推送至Master分支时,Blackduck扫描经常失败,因此希望添加失败重试逻辑。找到command && break语法但不确定用法是否正确,相关Bash脚本如下:

#!/bin/bash
set -ex

. "${0%/*}/common.sh"
. activate "$PYENV_HOME"
for ((i=0;i<5;++i));
do
  if [[ "$BRANCH_NAME" == "master" || "$BRANCH_NAME" == "main" ]]; then
    DETECT_PROJECT_VERSION_NAME="$BRANCH_NAME"
    DETECT_PROJECT_VERSION_PHASE="PRERELEASE"

    bash <(curl -s https://artifactory.dev.com/artifactory/blackduck-detect/detect7.sh) \
      --blackduck.url=https://com_name.app.blackduck.com \
      --blackduck.api.token="${BLACKDUCK_API_TOKEN}" \
      --detect.project.name="${DETECT_PROJECT_NAME}" \
      --detect.project.version.name="${DETECT_PROJECT_VERSION_NAME}" \
      --detect.project.version.phase="${DETECT_PROJECT_VERSION_PHASE}" \
      --detect.code.location.name="${DETECT_PROJECT_NAME}_${BRANCH_NAME}" \
      --detect.source.path="$(pwd)" \
      --detect.excluded.directories=/tests/
      && break
  fi
  sleep 15 
done

脚本语法验证

你使用的command && break语法是正确的:当Blackduck扫描命令执行成功(返回值为0)时,&&后的break会触发,直接跳出循环,终止重试流程;如果命令执行失败(返回值非0),则会跳过break,执行sleep 15等待15秒后,进入下一次循环重试,最多重试5次。

问题解答

  • 能否修改$BRANCH_NAME为本地PR分支名来本地测试该脚本?
    可以直接修改。本地测试时,可在脚本开头手动赋值BRANCH_NAME,例如:
BRANCH_NAME="your-local-pr-branch-name"

这样脚本会进入分支判断逻辑并执行Blackduck扫描。注意需提前配置好BLACKDUCK_API_TOKEN、DETECT_PROJECT_NAME、PYENV_HOME这些环境变量,否则脚本会因变量缺失报错。

  • 能否用上述脚本中的Blackduck扫描代码替换示例中的command?
    完全可以。command && break示例里的command就是指代任意需要执行的命令,你脚本中的Blackduck扫描命令(从bash <(curl ...)到--detect.excluded.directories=/tests/的完整命令段)完全符合要求,当前写法正确,无需额外修改。

内容的提问来源于stack exchange,提问作者killerbee88

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 01:07:42