2

伙计们,一直在尝试找出启动 CodeBuild 项目的正确方法,该项目要么在编译和运行 jasmine 测试后生成工件,要么失败并阻止 CodePipeline 继续部署。

如果我buildspec.yml看起来像:

version: 0.1

phases:
  install:
    commands:
      - echo Installing... Running npm install
      - npm install
  pre_build:
    commands:
      - echo pre_build...
  build:
    commands:
      - echo Testing... Running npm test
      - npm test
  post_build:
    commands:
      - echo Build completed on `date`
artifacts:
  files:
    - '**/*'

我应该如何退出npm test灵态?如果 jasmine 测试中的任何一个失败npm test,还会产生工件吗?

我的另一个想法是,如果任何测试失败,会发生以下情况:

    var params = {
        jobId: jobId,
        failureDetails: {
            message: JSON.stringify(message),
            type: 'JobFailed',
            externalExecutionId: context.invokeid
        }
    };
    codepipeline.putJobFailureResult(params, function(err, data) {
        ...
    });

或向 CodeBuild 发送停止信号?

var params = {
  id: 'STRING_VALUE' /* required */
};
codebuild.stopBuild(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

或者我如何终止构建以不产生工件?也许我弄错了,它应该是一个启动单元测试的 Lambda 函数。我不确定 Lambda 是否适合这个,因为我可以想象一些服务需要一段时间才能完成单元测试

谢谢!

4

1 回答 1

3

万一有人偶然发现这一点,两种方法都可以。AWS CodeBuild 将在任何非零退出状态代码上失败。因此,任何失败的测试都会导致管道失败。

同样可以用 lambda

于 2017-04-23T05:09:09.597 回答