如何防止 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”。更多信息:

使用“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