如何防止 Bitbucket 管道中的步骤失败?
How to prevent a step failing in Bitbucket Pipelines?
我是 运行 我所有的测试用例,其中一些有时会失败,管道检测到它并使步骤和构建失败。这会阻止下一步执行(压缩报告文件夹)。我想将该 zip 文件作为电子邮件附件发送。
这是我的 bitbucket-pipelines.yml 文件
custom: # Pipelines that can only be triggered manually
QA2: # The name that is displayed in the list in the Bitbucket Cloud GUI
- step:
image: openjdk:8
caches:
- gradle
size: 2x # double resources available for this step to 8G
script:
- apt-get update
- apt-get install zip
- cd config/geb
- ./gradlew -DBASE_URL=qa2 clean BSchrome_win **# This step fails**
- cd build/reports
- zip -r testresult.zip BSchrome_winTest
after-script: # On test execution completion or build failure, send test report to e-mail lists
- pipe: atlassian/email-notify:0.3.11
variables:
<<: *email-notify-config
TO: 'email@email.com'
SUBJECT: "Test result for QA2 environment"
BODY_PLAIN: |
Please find the attached test result report to the email.
ATTACHMENTS: config/geb/build/reports/testresult.zip
步骤:
- cd build/reports
and
- zip -r testresult.zip BSchrome_winTest
不执行,因为- ./gradlew -DBASE_URL=qa2 clean BSchrome_win
失败
我不希望 bitbucket 使步骤失败并停止执行队列的步骤。
bitbucket-pipelines.yml
文件只是 Unix 上的 运行ning bash/shell 命令。脚本 运行ner 查找每个命令的 return 状态代码,以查看它是成功 (status = 0)
还是失败 (status = non-zero)
。所以你可以使用各种技术来控制这个状态码:
在命令末尾添加 " || true"
./gradlew -DBASE_URL=qa2 clean BSchrome_win || true
当您将 "|| true"
添加到 shell 命令的末尾时,它意味着“忽略任何错误,并且总是 return 成功代码 0”。更多信息:
- Bash ignoring error for a particular command
- https://www.cyberciti.biz/faq/bash-get-exit-code-of-command/
使用“gradlew --continue”标志
./gradlew -DBASE_URL=qa2 clean BSchrome_win --continue
"--continue"
标志可用于防止单个测试失败而停止整个任务。因此,如果一个测试或子步骤失败,gradle 将尝试继续 运行 其他测试,直到所有测试都 运行。但是,如果重要步骤失败,它仍然可能 return 出错。更多信息:
将 2 个步骤移至 after-script
部分
after-script:
- cd config/geb # You may need this, if the current working directory is reset. Check with 'pwd'
- cd build/reports
- zip -r testresult.zip BSchrome_winTest
如果将创建 zip 的 2 个步骤移动到 after-script
部分,那么它们将始终 运行,而不管上一步的 success/fail 状态如何。
更好的解决方案
如果您希望脚本中的所有命令都执行而不管错误,请将 set +e
放在脚本的顶部。
如果您只是想忽略某个特定命令的错误,请在该命令之前添加 set +e
,在该命令之后添加 set -e
。
示例:
- set +e
- ./gradlew -DBASE_URL=qa2 clean BSchrome_win **# This step fails**
- set -e
也适用于一组命令:
- set +e
- cd config/geb
- ./gradlew -DBASE_URL=qa2 clean BSchrome_win **# This step fails**
- cd config/geb
- set -e
我是 运行 我所有的测试用例,其中一些有时会失败,管道检测到它并使步骤和构建失败。这会阻止下一步执行(压缩报告文件夹)。我想将该 zip 文件作为电子邮件附件发送。
这是我的 bitbucket-pipelines.yml 文件
custom: # Pipelines that can only be triggered manually
QA2: # The name that is displayed in the list in the Bitbucket Cloud GUI
- step:
image: openjdk:8
caches:
- gradle
size: 2x # double resources available for this step to 8G
script:
- apt-get update
- apt-get install zip
- cd config/geb
- ./gradlew -DBASE_URL=qa2 clean BSchrome_win **# This step fails**
- cd build/reports
- zip -r testresult.zip BSchrome_winTest
after-script: # On test execution completion or build failure, send test report to e-mail lists
- pipe: atlassian/email-notify:0.3.11
variables:
<<: *email-notify-config
TO: 'email@email.com'
SUBJECT: "Test result for QA2 environment"
BODY_PLAIN: |
Please find the attached test result report to the email.
ATTACHMENTS: config/geb/build/reports/testresult.zip
步骤:
- cd build/reports
and
- zip -r testresult.zip BSchrome_winTest
不执行,因为- ./gradlew -DBASE_URL=qa2 clean BSchrome_win
失败
我不希望 bitbucket 使步骤失败并停止执行队列的步骤。
bitbucket-pipelines.yml
文件只是 Unix 上的 运行ning bash/shell 命令。脚本 运行ner 查找每个命令的 return 状态代码,以查看它是成功 (status = 0)
还是失败 (status = non-zero)
。所以你可以使用各种技术来控制这个状态码:
在命令末尾添加 " || true"
./gradlew -DBASE_URL=qa2 clean BSchrome_win || true
当您将 "|| true"
添加到 shell 命令的末尾时,它意味着“忽略任何错误,并且总是 return 成功代码 0”。更多信息:
- Bash ignoring error for a particular command
- https://www.cyberciti.biz/faq/bash-get-exit-code-of-command/
使用“gradlew --continue”标志
./gradlew -DBASE_URL=qa2 clean BSchrome_win --continue
"--continue"
标志可用于防止单个测试失败而停止整个任务。因此,如果一个测试或子步骤失败,gradle 将尝试继续 运行 其他测试,直到所有测试都 运行。但是,如果重要步骤失败,它仍然可能 return 出错。更多信息:
将 2 个步骤移至 after-script
部分
after-script:
- cd config/geb # You may need this, if the current working directory is reset. Check with 'pwd'
- cd build/reports
- zip -r testresult.zip BSchrome_winTest
如果将创建 zip 的 2 个步骤移动到 after-script
部分,那么它们将始终 运行,而不管上一步的 success/fail 状态如何。
更好的解决方案
如果您希望脚本中的所有命令都执行而不管错误,请将 set +e
放在脚本的顶部。
如果您只是想忽略某个特定命令的错误,请在该命令之前添加 set +e
,在该命令之后添加 set -e
。
示例:
- set +e
- ./gradlew -DBASE_URL=qa2 clean BSchrome_win **# This step fails**
- set -e
也适用于一组命令:
- set +e
- cd config/geb
- ./gradlew -DBASE_URL=qa2 clean BSchrome_win **# This step fails**
- cd config/geb
- set -e