即使命令在 buildspec.yml 中失败,AWS Build Project 也会成功
AWS Build Project succeeds even when a command fails in buildspec.yml
我正在使用 AWS CodeBuild 通过无服务器框架将函数部署到 AWS lambda。
这是我的 buildspec.yml,
version: 0.2
phases:
install:
runtime-versions:
nodejs: 10
commands:
- echo installing Mocha...
- npm install -g mocha
- echo installing Serverless...
- npm install -g serverless
pre_build:
commands:
- echo running npm install for global project...
- npm install
- echo running npm install for each function...
- folders=src/*
- for value in $folders;
do
echo $value
npm --prefix $value install $value;
done
build:
commands:
- sls package
- serverless deploy --stage $STAGE --region $AWS_DEFAULT_REGION | tee deploy.out
post_build:
commands:
- echo done
# - . ./test.sh
问题是,即使 serverless deploy --stage $STAGE --region $AWS_DEFAULT_REGION | tee deploy.out
命令失败,构建项目在代码管道中被 AWS codebuild 显示为成功。
当无服务器部署命令失败时,我希望构建状态为失败。
发生这种情况是因为 post_build
执行是否 build
失败或成功。因此它不会衡量构建失败,post_build
无论如何都会 运行。 build phase transitions.
中对此进行了解释
您可以通过检查 CODEBUILD_BUILD_SUCCEEDING
env variable:
“手动”检查 build
是否在 post_build
中失败来纠正此问题
- CODEBUILD_BUILD_SUCCEEDING:当前构建是否成功。如果构建失败则设置为 0,如果构建成功则设置为 1。
因此,在您的 post_build
中,您可以检查 CODEBUILD_BUILD_SUCCEEDING == 0
和 exit 1
是否为真。
post_build:
commands:
- if [[ $CODEBUILD_BUILD_SUCCEEDING == 0 ]]; then exit 1; fi
- echo done
# - . ./test.sh
您的命令:
- serverless deploy --stage $STAGE --region $AWS_DEFAULT_REGION | tee deploy.out
... 不是 return 失败时的非零代码,这是构建失败所必需的。命令 tee
屏蔽了来自 serverless deploy
的 return 代码,因为它本身正在使用“0” return 代码进行响应。
我建议将命令重写为:
- serverless deploy --stage $STAGE --region $AWS_DEFAULT_REGION > deploy.out
- cat deploy.out
我正在使用 AWS CodeBuild 通过无服务器框架将函数部署到 AWS lambda。
这是我的 buildspec.yml,
version: 0.2
phases:
install:
runtime-versions:
nodejs: 10
commands:
- echo installing Mocha...
- npm install -g mocha
- echo installing Serverless...
- npm install -g serverless
pre_build:
commands:
- echo running npm install for global project...
- npm install
- echo running npm install for each function...
- folders=src/*
- for value in $folders;
do
echo $value
npm --prefix $value install $value;
done
build:
commands:
- sls package
- serverless deploy --stage $STAGE --region $AWS_DEFAULT_REGION | tee deploy.out
post_build:
commands:
- echo done
# - . ./test.sh
问题是,即使 serverless deploy --stage $STAGE --region $AWS_DEFAULT_REGION | tee deploy.out
命令失败,构建项目在代码管道中被 AWS codebuild 显示为成功。
当无服务器部署命令失败时,我希望构建状态为失败。
发生这种情况是因为 post_build
执行是否 build
失败或成功。因此它不会衡量构建失败,post_build
无论如何都会 运行。 build phase transitions.
您可以通过检查 CODEBUILD_BUILD_SUCCEEDING
env variable:
build
是否在 post_build
中失败来纠正此问题
- CODEBUILD_BUILD_SUCCEEDING:当前构建是否成功。如果构建失败则设置为 0,如果构建成功则设置为 1。
因此,在您的 post_build
中,您可以检查 CODEBUILD_BUILD_SUCCEEDING == 0
和 exit 1
是否为真。
post_build:
commands:
- if [[ $CODEBUILD_BUILD_SUCCEEDING == 0 ]]; then exit 1; fi
- echo done
# - . ./test.sh
您的命令:
- serverless deploy --stage $STAGE --region $AWS_DEFAULT_REGION | tee deploy.out
... 不是 return 失败时的非零代码,这是构建失败所必需的。命令 tee
屏蔽了来自 serverless deploy
的 return 代码,因为它本身正在使用“0” return 代码进行响应。
我建议将命令重写为:
- serverless deploy --stage $STAGE --region $AWS_DEFAULT_REGION > deploy.out
- cat deploy.out