Bamboo 可以将 HTTP 400 Bad 请求解释为失败吗

Can Bamboo interpret an HTTP 400 Bad request as a failure

我们正在使用 CURL 向我们的应用程序之一发出外部 API 请求。如果该请求返回的结果不是 200,我们希望 bamboo 无法通过 "build"。目前,它正在通过。此外,响应中的消息中包含单词 "error"。我希望 Bamboo 能够解析脚本结果并根据响应报告通过或失败。如果 bamboo 无法解释实际请求,我们可能会利用 postman 并对其进行 运行 测试。

这是日志:

simple  01-Mar-2018 08:43:29    Build Comcept.Net - Test Web API - Default Job #3 (COM-TWA-JOB1-3) started building on agent Default Agent
simple  01-Mar-2018 08:43:29    
simple  01-Mar-2018 08:43:29    Build working directory is D:\bamboo-home\xml-data\build-dir\COM-TWA-JOB1
simple  01-Mar-2018 08:43:29    Executing build Comcept.Net - Test Web API - Default Job #3 (COM-TWA-JOB1-3)
simple  01-Mar-2018 08:43:29    Running pre-build action: VCS Version Collector
simple  01-Mar-2018 08:43:29    Starting task 'Test Curl' of type 'com.atlassian.bamboo.plugins.scripttask:task.builder.script'
command 01-Mar-2018 08:43:29    Beginning to execute external process for build 'Comcept.Net - Test Web API - Default Job #3 (COM-TWA-JOB1-3)'\n ... running command line: \nD:\bamboo-home\temp\COM-TWA-JOB1-3-ScriptBuildTask-4890011895813643563.bat\n ... in: D:\bamboo-home\xml-data\build-dir\COM-TWA-JOB1\n ... using extra environment variables: \nbamboo_capability_system_builder_msbuild_MSBuild_v2_0__32bit_=C:\Windows\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe\nbamboo_capability_system_builder_msbuild_MSBuild_v14_0__64bit_=C:\Program Files (x86)\MSBuild.0\bin\amd64\MSBuild.exe\nbamboo_capability_system_builder_msbuild_MSBuild_2017=C:\Program Files (x86)\Microsoft Visual Studio17\BuildTools\MSBuild.0\Bin\MSBuild.exe\nbamboo_resultsUrl=http://britten.hq.comcept.net:8085/browse/COM-TWA-JOB1-3\nbamboo_capability_system_builder_msbuild_MSBuild_v4_0__32bit_=C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe\nbamboo_capability_system_builder_msbuild_MSBuild_v3_5__32bit_=C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe\nbamboo_dependenciesDisabled=false\nbamboo_buildFailed=false\nbamboo_build_working_directory=D:\bamboo-home\xml-data\build-dir\COM-TWA-JOB1\nbamboo_buildKey=COM-TWA-JOB1\nbamboo_shortPlanName=Test Web API\nbamboo_capability_system_builder_msbuild_MSBuild_v3_5__64bit_=C:\Windows\Microsoft.NET\Framework64\v3.5\MSBuild.exe\nbamboo_agentWorkingDirectory=D:\bamboo-home\xml-data\build-dir\nbamboo_buildNumber=3\nbamboo_shortJobName=Default Job\nbamboo_buildResultsUrl=http://britten.hq.comcept.net:8085/browse/COM-TWA-JOB1-3\nbamboo_capability_system_builder_msbuild_MSBuild_v2_0__64bit_=C:\Windows\Microsoft.NET\Framework64\v2.0.50727\MSBuild.exe\nbamboo_capability_system_builder_node_Node_exe=C:\Program Files\nodejs\node.exe\nbamboo_capability_system_jdk_JDK_1_8_0_151__JRE_=C:\Program Files\Java\SE851\nbamboo_capability_system_jdk_JDK=C:\Program Files\Java\SE851\nbamboo_agentId=196609\nbamboo_planName=Comcept.Net - Test Web API\nbamboo_capability_system_builder_devenv_Visual_Studio_2010=C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\nbamboo_plan_storageTag=plan-3309569\nbamboo_shortPlanKey=TWA\nbamboo_ManualBuildTriggerReason_userName=ddivita\nbamboo_shortJobKey=JOB1\nbamboo_capability_system_builder_msbuild_MSBuild_v14_0__32bit_=C:\Program Files (x86)\MSBuild.0\bin\MSBuild.exe\nbamboo_capability_system_builder_msbuild_MSBuild_v4_0__64bit_=C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe\nbamboo_buildTimeStamp=2018-03-01T08:43:29.444-05:00\nbamboo_working_directory=D:\bamboo-home\xml-data\build-dir\COM-TWA-JOB1\nbamboo_planKey=COM-TWA\nbamboo_capability_system_jdk_JDK_1_8=C:\Program Files\Java\SE851\nbamboo_buildResultKey=COM-TWA-JOB1-3\nbamboo_buildPlanName=Comcept.Net - Test Web API - Default Job\n
build   01-Mar-2018 08:43:29    
build   01-Mar-2018 08:43:29    D:\bamboo-home\xml-data\build-dir\COM-TWA-JOB1>c:\curl\curl.exe -v https://api-qa.comcept.net/token 
error   01-Mar-2018 08:43:29      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
error   01-Mar-2018 08:43:29                                     Dload  Upload   Total   Spent    Left  Speed
error   01-Mar-2018 08:43:29    
error   01-Mar-2018 08:43:29      0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 192.168.0.220...
error   01-Mar-2018 08:43:29    * TCP_NODELAY set
error   01-Mar-2018 08:43:29    * Connected to api-qa.comcept.net (192.168.0.220) port 443 (#0)
error   01-Mar-2018 08:43:29    * ALPN, offering h2
error   01-Mar-2018 08:43:29    * ALPN, offering http/1.1
error   01-Mar-2018 08:43:29    * Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
error   01-Mar-2018 08:43:29    * successfully set certificate verify locations:
error   01-Mar-2018 08:43:29    *   CAfile: c:\curl\ca-bundle.crt
error   01-Mar-2018 08:43:29      CApath: none
error   01-Mar-2018 08:43:29    * TLSv1.2 (OUT), TLS header, Certificate Status (22):
error   01-Mar-2018 08:43:29    } [5 bytes data]
error   01-Mar-2018 08:43:29    * TLSv1.2 (OUT), TLS handshake, Client hello (1):
error   01-Mar-2018 08:43:29    } [512 bytes data]
error   01-Mar-2018 08:43:29    * TLSv1.0 (IN), TLS handshake, Server hello (2):
error   01-Mar-2018 08:43:29    { [81 bytes data]
error   01-Mar-2018 08:43:29    * TLSv1.0 (IN), TLS handshake, Certificate (11):
error   01-Mar-2018 08:43:29    { [3180 bytes data]
error   01-Mar-2018 08:43:29    * TLSv1.0 (IN), TLS handshake, Server key exchange (12):
error   01-Mar-2018 08:43:29    { [587 bytes data]
error   01-Mar-2018 08:43:29    * TLSv1.0 (IN), TLS handshake, Server finished (14):
error   01-Mar-2018 08:43:29    { [4 bytes data]
error   01-Mar-2018 08:43:29    * TLSv1.0 (OUT), TLS handshake, Client key exchange (16):
error   01-Mar-2018 08:43:29    } [70 bytes data]
error   01-Mar-2018 08:43:29    * TLSv1.0 (OUT), TLS change cipher, Client hello (1):
error   01-Mar-2018 08:43:29    } [1 bytes data]
error   01-Mar-2018 08:43:29    * TLSv1.0 (OUT), TLS handshake, Finished (20):
error   01-Mar-2018 08:43:29    } [16 bytes data]
error   01-Mar-2018 08:43:29    * TLSv1.0 (IN), TLS change cipher, Client hello (1):
error   01-Mar-2018 08:43:29    { [1 bytes data]
error   01-Mar-2018 08:43:29    * TLSv1.0 (IN), TLS handshake, Finished (20):
error   01-Mar-2018 08:43:29    { [16 bytes data]
error   01-Mar-2018 08:43:29    * SSL connection using TLSv1.0 / ECDHE-RSA-AES256-SHA
error   01-Mar-2018 08:43:29    * ALPN, server did not agree to a protocol
error   01-Mar-2018 08:43:29    * Server certificate:
error   01-Mar-2018 08:43:29    *  subject: CN=*.comcept.net
error   01-Mar-2018 08:43:29    *  start date: Feb 24 00:00:00 2018 GMT
error   01-Mar-2018 08:43:29    *  expire date: Jul 18 12:00:00 2020 GMT
error   01-Mar-2018 08:43:29    *  subjectAltName: host "api-qa.comcept.net" matched cert's "*.comcept.net"
error   01-Mar-2018 08:43:29    *  issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=RapidSSL RSA CA 2018
error   01-Mar-2018 08:43:29    *  SSL certificate verify ok.
error   01-Mar-2018 08:43:29    } [5 bytes data]
error   01-Mar-2018 08:43:29    > GET /token HTTP/1.1
error   01-Mar-2018 08:43:29    
error   01-Mar-2018 08:43:29    > Host: api-qa.comcept.net
error   01-Mar-2018 08:43:29    
error   01-Mar-2018 08:43:29    > User-Agent: curl/7.53.1
error   01-Mar-2018 08:43:29    
error   01-Mar-2018 08:43:29    > Accept: */*
error   01-Mar-2018 08:43:29    
error   01-Mar-2018 08:43:29    > 
error   01-Mar-2018 08:43:29    
error   01-Mar-2018 08:43:29    { [5 bytes data]
error   01-Mar-2018 08:43:29    < HTTP/1.1 400 Bad Request
error   01-Mar-2018 08:43:29    
error   01-Mar-2018 08:43:29    < Cache-Control: no-cache
error   01-Mar-2018 08:43:29    
error   01-Mar-2018 08:43:29    < Pragma: no-cache
error   01-Mar-2018 08:43:29    
error   01-Mar-2018 08:43:29    < Content-Length: 34
error   01-Mar-2018 08:43:29    
error   01-Mar-2018 08:43:29    < Content-Type: application/json;charset=UTF-8
error   01-Mar-2018 08:43:29    
error   01-Mar-2018 08:43:29    < Expires: -1
error   01-Mar-2018 08:43:29    
error   01-Mar-2018 08:43:29    < Server: Microsoft-IIS/7.5
error   01-Mar-2018 08:43:29    
error   01-Mar-2018 08:43:29    < X-Powered-By: ASP.NET
error   01-Mar-2018 08:43:29    
error   01-Mar-2018 08:43:29    < Date: Thu, 01 Mar 2018 13:44:21 GMT
error   01-Mar-2018 08:43:29    
error   01-Mar-2018 08:43:29    < 
error   01-Mar-2018 08:43:29    
error   01-Mar-2018 08:43:29    { [34 bytes data]
error   01-Mar-2018 08:43:29    
error   01-Mar-2018 08:43:29    100    34  100    34    0     0    241      0 --:--:-- --:--:-- --:--:--   241
error   01-Mar-2018 08:43:29    * Connection #0 to host api-qa.comcept.net left intact
build   01-Mar-2018 08:43:29    {"error":"unsupported_grant_type"}
simple  01-Mar-2018 08:43:29    Finished task 'Test Curl' with result: Success
simple  01-Mar-2018 08:43:29    Running post build plugin 'NCover Results Collector'
simple  01-Mar-2018 08:43:29    Running post build plugin 'Artifact Copier'
simple  01-Mar-2018 08:43:29    Running post build plugin 'npm Cache Cleanup'
simple  01-Mar-2018 08:43:29    Running post build plugin 'Clover Results Collector'
simple  01-Mar-2018 08:43:29    Running post build plugin 'Docker Container Cleanup'
simple  01-Mar-2018 08:43:29    Finalising the build...
simple  01-Mar-2018 08:43:29    Stopping timer.
simple  01-Mar-2018 08:43:29    Build COM-TWA-JOB1-3 completed.
simple  01-Mar-2018 08:43:29    Running on server: post build plugin 'NCover Results Collector'
simple  01-Mar-2018 08:43:29    Running on server: post build plugin 'Build Hanging Detection Configuration'
simple  01-Mar-2018 08:43:29    Running on server: post build plugin 'Clover Delta Calculator'
simple  01-Mar-2018 08:43:29    Running on server: post build plugin 'Maven Dependencies Postprocessor'
simple  01-Mar-2018 08:43:29    All post build plugins have finished
simple  01-Mar-2018 08:43:29    Generating build results summary...
simple  01-Mar-2018 08:43:29    Saving build results to disk...
simple  01-Mar-2018 08:43:29    Logging substituted variables...
simple  01-Mar-2018 08:43:29    Indexing build results...
simple  01-Mar-2018 08:43:29    Finished building COM-TWA-JOB1-3.

Bamboo Script task determines its success or failure based on the shell's exit code, which equals the exist code of the last executed command (i.e. 0 for success, everything else for failure). However, curl does not consider any non 2xx HTTP responses to be an error by default, because even for 4xx and 5xx status codes curl itself worked correctly. You can tweak this via the --fail command line flag (from the curl man page):

-f, --fail

(HTTP) Fail silently (no output at all) on server errors. This is mostly done to better enable scripts etc to better deal with failed attempts. In normal cases when an HTTP server fails to deliver a document, it returns an HTML document stating so (which often also describes why and more). This flag will prevent curl from outputting that and return error 22.

This method is not fail-safe and there are occasions where non-successful response codes will slip through, especially when authentication is involved (response codes 401 and 407).

  • 如果 curl 命令不是脚本中执行的最后一个命令,您可以将其退出代码保存在一个变量中 return,或者如果 shell 是 Bash,使用例如在脚本顶部设置 -e 以生成 shell "exit immediately if a command exits with a non-zero status"。 (more detailed explanation).