在部署之前使用AWS CodeBuild或Lambda运行jasmine测试

时间:2017-04-22 18:18:23

标签: node.js aws-lambda jasmine-node aws-codepipeline aws-codebuild

民间,   一直试图找出解雇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阶段失败?如果在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是否适合这种情况,因为我可以想象一些服务需要一段时间来完成单元测试

谢谢!

1 个答案:

答案 0 :(得分:3)

如果有人发现这种情况,两种方式都会奏效。 AWS CodeBuild将在任何非零退出状态代码上失败。因此,任何失败的测试都会导致管道失败。

同样可以用lambda

完成