当前位置: 首页 > 知识库问答 >
问题:

代码构建执行在构建失败后继续,而不是停止

卢毅
2023-03-14

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

共有3个答案

傅安宁
2023-03-14

即使生成部分可能失败,也会运行post_build部分。扩展前面的答案,您可以在buildspec.yml文件的post_build部分中使用变量CODEBUILD_BUILD_SUCCEEDING。当且仅当生成部分成功完成时,您可以使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
郭修平
2023-03-14

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

我现在发现的最好的方法是在install 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`
焦驰
2023-03-14

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

只要还运行了BUILDPOST\u BUILD将始终运行(无论BUILD成功与否)这同样适用于UPLOAD\u工件。这样您就可以检索调试信息/工件。

如果您想根据BUILD的成功与否在POST\u BUILD中执行不同的操作,可以测试内置环境变量CODEBUILD\u BUILD\u successing,如果BUILD成功,则将其设置为1,如果失败,则将其设置为0

 类似资料:
  • 默认情况下, 只要有任务调用失败, Gradle就会中断执行. 这可能会使调用过程更快, 但那些后面隐藏的错误就没有办法发现了. 所以你可以使用 --continue 选项在一次调用中尽可能多的发现所有问题. 采用 --continue 选项, Gralde 会调用每一个任务以及它们依赖的任务. 而不是一旦出现错误就会中断执行.所有错误信息都会在最后被列出来. 一旦某个任务执行失败,那么所有依赖于

  • 问题内容: 使用Gradle管理Android的依赖关系是一种怪异的方式。它们必须以不同的方式下载到本地存储库中。设置CI构建时,这很麻烦,因为可以在多个节点上运行。因此,我正在使用sdk- manager-plugin 在构建时下载Android依赖项。我似乎在使用sdk-manager- plugin时遇到了一个老错误,尽管它会在构建时下载依赖项,但是在该命令上将不可用。 下次运行该命令时,一

  • 我正在尝试调试Java代码,这是唯一的hello world程序。 上面的代码没有错误。但是VisualStudio代码一直向我警告这条消息,即使代码没有错误。但每次单击“继续”时,VisualStudio代码都可以成功调试Java代码。 我真的不知道哪个版本失败了。 这是我的发布会。用于Java调试器的json。我设置正确了吗? 在中,我可以在将文件保存为,并使用来构建。 我真的不知道哪个构建失

  • 我在一个Java桌面应用程序中使用gradle。 IDE是NetBeans&我想从我的Java类生成一些自动化的JSON。 我实现了3个类(仅POJOs)&试图通过Gradle导入'com.github.reinert',名称:'jjschema',版本:'1.11'。 jjschema将打印java对象的JSON等价物。 然而,gradle并没有解析这些类&也没有下载依赖项。 这是我的gradl

  • 问题内容: 作为构建过程的一部分,我正在运行git commit作为execute shell步骤。但是,如果工作空间中没有任何更改,则Jenkins将使构建失败。这是因为当没有更改要提交时,git返回错误代码。我想中止构建,或者在这种情况下将其标记为不稳定。有任何想法吗? 问题答案: 要在 命令 失败时停止进一步执行: 要在 命令 失败时继续执行: