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
相关产品推荐
相关产品推荐

