2017-10-05 129 views
3

我使用git,codebuild和elastic beanstalk構建CI/CD管道。構建失敗後繼續編譯代碼

由於測試用例的語法錯誤而導致構建失敗時,在執行代碼構建期間,我看到codebuild進展到下一個階段,並最終生成工件。

我的理解是,如果構建失敗,執行應該停止。這是一個正確的行爲?

請參閱下面的buildspec。

version: 0.2 

phases: 
    install: 
    commands: 
     - echo Installing package.json.. 
     - npm install 
     - echo Installing Mocha... 
     - npm install -g mocha 
    pre_build: 
    commands: 
     - echo Installing source NPM placeholder dependencies... 
    build: 
    commands: 
     - echo Build started on `date` 
     - echo Compiling the Node.js code 
     - mocha modules/**/tests/*.js 
    post_build: 
    commands: 
     - echo Build completed on `date` 
artifacts: 
    files: 
    - modules/* 
    - node_modules/* 
    - package.json 
    - config/* 
    - server.js 

回答

2

CodeBuild通過退出代碼檢測構建失敗。你應該確保你的測試執行失敗時返回一個非零的退出代碼。

POST_BUILD will always run as long as BUILD was also run(不管BUILD是成功還是失敗)。UPLOAD_ARTIFACTS也是如此。這樣可以檢索調試信息/工件。

如果你想要做一些不同的POST_BUILD取決於BUILD的成功或失敗,你可以測試builtin environment variable CODEBUILD_BUILD_SUCCEEDING,它被設置爲1如果BUILD成功,0如果它失敗了。

+0

任何想法如何確保退出代碼? – pkpk

0

post_build階段將被執行併產生工件。如果需要,post_build很適合關閉構建環境,即使構建失敗,構件也可能非常有用。例如。額外的日誌,中間文件等

我會建議只對命令使用post_build什麼是不可知的你的構建的結果,並正確地初始化構建環境。否則,您可以排除該步驟。

0

CodeBuild使用環境變量CODEBUILD_BUILD_SUCCEEDING來顯示構建過程是否似乎正確。

我發現現在最好的辦法是創建在安裝secion一個小腳本,然後送花兒給人使用,如:返回

phases: 
    install: 
    commands: 
     - echo '#!/bin/bash' > /usr/local/bin/ok; echo 'if [[ "$CODEBUILD_BUILD_SUCCEEDING" == "0" ]]; then exit 1; else exit 0; fi' >> /usr/local/bin/ok; chmod +x /usr/local/bin/ok 
    post_build: 
    commands: 
     - ok && echo Build completed on `date`