Как передать артефакты в CodePipeline между действиями CodeBuild - PullRequest
3 голосов
/ 13 мая 2019

Я работаю над AWS CodePipeline, используя aws-cdk v0.31.0 в Typescript.

При попытке синтезировать шаблон облачной информации я получаю сообщение об ошибке проверки

throw new Error(`Validation failed with the following errors:\n  ${errorList}`);
          ^
Error: Validation failed with the following errors:
  [SummitCodePipelineDemoStack/Pipeline] Artifact 'compile-output' was used as input before being used as output
at Synthesizer.synthesize (/home/stefan/Private/programmieren/aws/cdk/SummitCodePipelineDemo/node_modules/@aws-cdk/cdk/lib/synthesis.ts:51:15)
at App.run (/home/stefan/Private/programmieren/aws/cdk/SummitCodePipelineDemo/node_modules/@aws-cdk/cdk/lib/app.ts:75:27)
at Object.<anonymous> (/home/stefan/Private/programmieren/aws/cdk/SummitCodePipelineDemo/bin/summit_code_pipeline_demo.ts:8:5)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
at startup (internal/bootstrap/node.js:283:19)
Subprocess exited with error 1

СогласноСообщения об ошибках Я использовал артефакт в качестве входных данных, прежде чем я использовал его в качестве выходных данных - не уверен, как я это сделал.Ниже я предоставил код, который у меня есть

export class SummitCodePipelineDemoStack extends Stack {
  codeRepository: Repository;
  imageDefinitionArtifact: Artifact = new Artifact("imagedefinition_json");

  constructor(scope: App, id: string, props?: StackProps) {
    super(scope, id, props);
    const sourceOutput = new Artifact();
    const compileOutput = new Artifact("compile-output");

    this.codeRepository = this.createCodeCommitRepository();

    new Pipeline(this, "Pipeline", {
      pipelineName: "ThymeLeadDemoBuildPipeline",
      stages: [
        {
          name: "Stage1",
          actions: [this.SourceAction(sourceOutput)]
        },
        {
          name: "Stage2",
          actions: [
            this.BuildAction(sourceOutput, compileOutput),
            this.ContainerAction(compileOutput)
          ]
        }
      ]
    });
      }

  private createCodeCommitRepository(): Repository {
    return new Repository(this, "CodeCommitRepository", {
  repositoryName: "thymeleafdemorepository",
  description: "Spring Boot Demo with Thymeleaf."
    });
  }

  private SourceAction(output: Artifact): Action {
    return new CodeCommitSourceAction({
  repository: this.codeRepository,
  actionName: "SourceAction",
  output
    });
  }

  private ContainerAction(input: Artifact): Action {
    return new CodeBuildAction({
      actionName: "CreationOfContainer",
      project: new PipelineProject(
        this,
        "MyContainerCreationProject",
        this.createProjectProperties()
      ),
      input
    });
  }

  private BuildAction(input: Artifact, output: Artifact): Action {
    return new CodeBuildAction({
      actionName: "CompileCode",
      project: new PipelineProject(this, "CompileProject", {
        projectName: "ThymeLeafDemoCompile",
        environment: {
          buildImage: LinuxBuildImage.UBUNTU_14_04_OPEN_JDK_11
        }
      }),
      input,
      output
    });
  }

  private createProjectProperties(): PipelineProjectProps {
    return {
      projectName: "thymeleafdemocontainerproject",
      environment: {
        buildImage: LinuxBuildImage.UBUNTU_14_04_DOCKER_17_09_0
      }
    };
  }
}

1 Ответ

0 голосов
/ 18 мая 2019

Я сам разобрался с ответом: похоже, это ошибка в самом cdk, и она отслеживается здесь два / три дня https://github.com/awslabs/aws-cdk/issues/2549

...