我正在使用git,代码构建和弹性beantalk构建CI / CD管道。
在由于测试用例的语法错误而导致构建失败的代码构建执行过程中,我看到代码构建进展到下一个阶段,并最终继续产生工件。
我的理解是,如果构建失败,则应该停止执行。这是正确的行为吗?
请参阅下面的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(与POST_BUILD
的成功或失败无关。)BUILD
也是如此。这样,您可以检索调试信息/工件。
如果要根据BUILD
的成功或失败而在UPLOAD_ARTIFACTS
中执行其他操作,则可以测试POST_BUILD
,如果BUILD
成功则设置为builtin environment variable CODEBUILD_BUILD_SUCCEEDING
,如果CODEBUILD_BUILD_SUCCEEDING
成功则设置为1
。失败了。
CodeBuild使用环境变量CODEBUILD_BUILD_SUCCEEDING来显示构建过程是否正确。
我现在发现的最佳方法是在安装部分创建一个小脚本,然后始终使用类似的方式:
BUILD
将执行post_build阶段,并将生成工件。如果需要,post_build可以很好地正确关闭构建环境,即使构建失败,工件也可能有用。例如。额外的日志,中间文件等。
我建议仅将post_build用于与生成结果无关的命令,并适当地取消初始化生成环境。否则,您可以仅排除该步骤。
post_build部分。扩展先前的答案,可以在0
文件的post_build部分中使用变量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`
。您可以使post_build节运行仅当且仅当>> build节成功完成。以下是如何实现此目的的示例:
CODEBUILD_BUILD_SUCCEEDING