如何防止Bitbucket管道中的步骤失败?

时间:2020-08-01 10:31:26

标签: pipeline bitbucket-pipelines

我正在运行我的所有测试用例,其中有些测试用例有时会失败,管道会检测到它并导致步骤和构建失败。这将阻止下一步执行(压缩报告文件夹)。我想将该压缩文件作为电子邮件附件发送。

这是我的 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

Screenshot of build failure

步骤:

- cd build/reports 
and
- zip -r testresult.zip BSchrome_winTest

因为- ./gradlew -DBASE_URL=qa2 clean BSchrome_win失败而没有执行

我不希望bitbucket使步骤失败并停止执行Queue的步骤。

2 个答案:

答案 0 :(得分:2)

bitbucket-pipelines.yml文件仅在Unix上运行bash / shell命令。脚本运行器查找每个命令的返回状态代码,以查看它是否成功(status = 0)或失败(status = non-zero)。因此,您可以使用多种技术来控制此状态代码:

在命令末尾添加" || true"

./gradlew -DBASE_URL=qa2 clean BSchrome_win || true

在外壳程序命令的末尾添加"|| true"时,它的意思是“忽略任何错误,并始终返回成功代码0”。更多信息:

使用“ gradlew --continue”标志

./gradlew -DBASE_URL=qa2 clean BSchrome_win --continue

"--continue"标志可用于防止单个测试失败停止整个任务。因此,如果一个测试或子步骤失败,则gradle将尝试继续运行其他测试,直到所有测试都运行为止。但是,如果重要步骤失败,它可能仍会返回错误。更多信息:Ignore Gradle Build Failure and continue build script?

将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部分,则它们将始终运行,而不管上一步的成功/失败状态。

答案 1 :(得分:0)

更好的解决方案

如果您希望脚本中的所有命令都能执行而不会出现错误,请在脚本顶部放置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