所以在我的 Jenkins 构建中,当我将本地 PR 推送到 Master 时,
blackduck
在 Master 分支中扫描经常失败。所以我想介绍一些代码让它在失败时重试,我在网上查了一下,发现了一个有用的 command && break
语法,但我不确定我是否正确使用它。
这是代码:
#!/bin/bash
set -ex
. "${0%/*}/common.sh"
. activate "$PYENV_HOME"
n=0
until [ "$n" -ge 5 ]
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
n=$((n+1))
sleep 15
done
如果可以的话,我再问一个简单的问题;引入代码后,我想在本地测试一下,所以可以简单地将
"$BRANCH_NAME"
更改为我本地 PR 分支的名称吗?
提前非常感谢。
但是我可以用我的整个代码代替
command
吗?
我的
Bash 命令语法正确吗?command && break
是的。
我会将其重构为
bash <(curl..... && break
。我也只会 for i in $(seq 5)
或 for ((i=0;i<5;++i))
而不是 while
。我认为没有理由在每个循环中都进行if [ "$BRANCH_NAME" == "master"...
。也更喜欢 if
而不是 &&
。使用 shellcheck 检查您的脚本。此外,您可以使用 $PWD
代替 $(pwd)
。
#!/bin/bash
set -ex
. "${0%/*}/common.sh"
. activate "$PYENV_HOME"
if [[ "$BRANCH_NAME" == "master" || "$BRANCH_NAME" == "main" ]]; then
DETECT_PROJECT_VERSION_NAME="$BRANCH_NAME"
DETECT_PROJECT_VERSION_PHASE="PRERELEASE"
for ((i=0;i<5;++i)); do
if
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/
then
break
fi
done
fi
因此可以简单地将“$BRANCH_NAME”更改为我当地 PR 分支机构的名称吗?
这只是一个变量,设置它并导出。
BRANCH_NAME=stuff ./yourscript
但是我可以用我的整个代码代替命令吗?
一般来说是的。研究 bash 中的命令退出状态