构建失败后继续编译代码

问题描述:

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

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

post_build阶段将被执行并产生工件。如果需要,post_build很适合关闭构建环境,即使构建失败,构件也可能非常有用。例如。额外的日志,中间文件等

我会建议只对命令使用post_build什么是不可知的你的构建的结果,并正确地初始化构建环境。否则,您可以排除该步骤。

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`