繁体   English   中英

AWS 代码管道 CDK TypeScript

[英]AWS CodePipeline CDK TypeScript

当 AWS CDK 代码 (TypeScript) 发生更改并被推送到存储库时,AWS CodePipeline 构建步骤中的install commands不会更新。 项目Build details下的Buildspec部分与创建时的配置相同。

有办法解决吗? 我们对 BuildStep CDK 进行了一些更改,但不会对 AWS CodeBuild 配置详细信息生效。 我只是 AWS CodeBuild 和 CodePipeline 的新手。 任何答案/建议都会有很大的帮助。

示例代码

const pipeline = new CodePipeline(this, 'SamplePipeline', {
    pipelineName: 'SamplePipeline',
    synth: new CodeBuildStep('BuildSynthStep', {
            input: source,
            buildEnvironment: {
                buildImage: codebuild.LinuxBuildImage.STANDARD_5_0
            },
            installCommands: [
                'install_command_1',
                'install_command_2',
                ...
                'install_command_n'
            ],
            commands: [
                'command_2',
                ...
                'command_n'
            ],
        }
    )
});

工件提供者:Amazon S3

CDK Pipeline 的自突变仅在您在应用程序阶段(准确地说是 CDK 阶段)或合成代码构建作业后的其他阶段更改某些内容时应用。

如果您之前运行过一些东西,例如单元测试,那么您将无法进入自我更新作业。

那么,你现在有什么选择?

好吧,根据管道本身进行的更改大多是手动完成的。 因此,您必须在本地计算机上重新运行cdk deploy PipelineStack ,并将您的更改提交到源分支。

您可以通过 3 个步骤完成类似的操作。 (由于 CDK 在运行时读取此文件,CDK 也会获取任何更新):-

  • 创建构建规范文件。

  • 创建代码构建构造函数

  • 使用该构造函数并将构建规范文件传递给BuildSpec.fromObject方法。

在项目的根目录下创建一个 buildspec 目录,并为此示例创建一个您选择的任何文件plan-build spec.yml

version: 0.2
env:
  variables:
    

phases:
  install:
    commands:
      - echo "hello"
  pre_build:
    commands:
      - printenv
      

  build:
    commands:
      - echo 'in build stage'
    

这将是您的代码构建项目的构造函数

this.project = new codebuild.PipelineProject(this, 'codebuild-project', {
        projectName: props.projectName,
        description: props.description, // a Bucket used as a source in CodePipeline must be versioned
        environment: {
            computeType: ComputeType.SMALL,
            buildImage: LinuxBuildImage.AMAZON_LINUX_2_4
        },
        buildSpec: props.buildspec,

    });
}

这将是您将在另一个文件中使用该构造函数的代码。

import { codeBuildProject } from '../lib/constructs/pipeline-codebuild-project'
     const TfPlan = new codeBuildProject(this, 'project', {
          projectName: 'some name',
          description: 'project description',
          buildspec: codebuild.BuildSpec.fromObject(yaml.parse(fs.readFileSync('buildspec/plan-buildspec.yml', 'utf8'))),
        })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM