构建失败后代码构建继续

pkp*_*kpk 18 build aws-codepipeline aws-codebuild

我正在使用git,codebuild和elastic beanstalk构建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
Run Code Online (Sandbox Code Playgroud)

Uns*_*ned 21

CodeBuild通过退出代码检测构建失败.您应确保测试执行在失败时返回非零退出代码.

POST_BUILD只要将始终运行BUILD还运行了(不管BUILD的成功或失败.)也是一样的UPLOAD_ARTIFACTS.这样您就可以检索调试信息/工件.

如果你想POST_BUILD根据成功或失败做一些不同的事情BUILD,你可以测试内置环境变量CODEBUILD_BUILD_SUCCEEDING,1如果设置BUILD成功,则设置为0失败.

  • 我在 post_build 部分添加了一行,让 post_build 失败。CodeBuild 日志可以为您提供构建部分中失败的详细信息。`post_build:命令:-测试“$CODEBUILD_BUILD_SUCCEEDING”=“1”` (3认同)

Sei*_*lah 12

将其添加到构建部分

build:
     on-failure: ABORT
Run Code Online (Sandbox Code Playgroud)

  • 恕我直言,这应该是公认的答案,因为这是官方文档所说的=> https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html (2认同)

wod*_*dka 10

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

我现在发现的最佳方法是在install截面中创建一个小脚本,然后始终像这样使用:

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`
Run Code Online (Sandbox Code Playgroud)


cap*_*ack 10

post_build如果构建部分可能会失败,部分甚至可以运行。扩展前面的答案,您可以使用文件CODEBUILD_BUILD_SUCCEEDINGpost_build 部分中的变量buildspec.yml当且仅当构建部分成功完成时,您才能使 post_build 部分运行。以下是如何实现这一目标的示例:

version: 0.2

phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - $(aws ecr get-login --no-include-email --region $AWS_DEFAULT_REGION)
      - CODEBUILD_RESOLVED_SOURCE_VERSION="${CODEBUILD_RESOLVED_SOURCE_VERSION:-$IMAGE_TAG}"
      - IMAGE_TAG=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
      - IMAGE_URI="$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG"
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...
      - docker build -t $IMAGE_URI .
  post_build:
    commands:
      - bash -c "if [ /"$CODEBUILD_BUILD_SUCCEEDING/" == /"0/" ]; then exit 1; fi"
      - echo Build stage successfully completed on `date`
      - docker push $IMAGE_URI
      - printf '[{"name":"clair","imageUri":"%s"}]' "$IMAGE_URI" > images.json
artifacts:
  files: images.json
Run Code Online (Sandbox Code Playgroud)

  • 当然,你的意思是用`\"`而不是`/"`来转义,对吧?我使用了反斜杠并且它起作用了。 (2认同)