构建失败后代码继续构建

问题描述 投票:21回答:4

我正在使用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
build aws-codepipeline aws-codebuild
4个回答
23
投票

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。失败了。


11
投票

CodeBuild使用环境变量CODEBUILD_BUILD_SUCCEEDING来显示构建过程是否正确。

我现在发现的最佳方法是在安装部分创建一个小脚本,然后始终使用类似的方式:

BUILD

0
投票

将执行post_build阶段,并将生成工件。如果需要,post_build可以很好地正确关闭构建环境,即使构建失败,工件也可能有用。例如。额外的日志,中间文件等。

我建议仅将post_build用于与生成结果无关的命令,并适当地取消初始化生成环境。否则,您可以仅排除该步骤。


0
投票
即使构建部分可能失败,也会运行

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
© www.soinside.com 2019 - 2024. All rights reserved.