簡體   English   中英

AWS CDK CodePipeline 部署應用程序和 CDK

[英]AWS CDK CodePipeline deploying app and CDK

我將 AWS CDK 與 typescript 一起使用,我想自動化我的 CDK 和代碼 Package 部署。

我有 2 個 github 存儲庫: app-cdkapp-website

我已經設置了一個 CodePipeline,如下所示:

      const pipeline = new CodePipeline(this, 'MyAppPipeline', {
      pipelineName: 'MyAppPipeline',
      
      synth: new ShellStep('Synth', {
        input: CodePipelineSource.gitHub(`${ORG_NAME}/app-cdk`, BRANCH_NAME, {
        }),
        commands: ['npm ci', 'npm run build', 'npx cdk synth']
      })
    });

並添加了一個 beta 階段,如下所示

    pipeline.addStage(new MyAppStage(this, 'Beta', {
      env: {account: 'XXXXXXXXX', region: 'us-east-2' }
    }))

當我將代碼推送到我的 CDK 代碼 package 並部署新資源時,這工作正常。 如何將我的網站存儲庫添加為啟動此管道的源,以不同的方式構建,並將資產部署到必要的資源? 那不應該是 CodePipeline 的源代碼和構建階段的一部分嗎?

我遇到過類似的情況,我必須為存儲庫中的多個 Static S3 站點創建 CDK 管道。

很快,很明顯,這必須使用兩個堆棧來完成,因為 Pipeline 要求 step 的類型為 Stage 並且不支持 Construct。

而我的 Static S3 網站是一個構造(BucketDeployment)。

我處理這種集成的方式如下

deployment_code_build = cb.Project(self, 'PartnerS3deployment',
                                                   project_name='PartnerStaticS3deployment',
                                                   source=cb.Source.git_hub(owner='<github-org>',
                                                                            repo='<repo-name>', clone_depth=1,
                                                                            webhook_filters=[
                                                                                cb.FilterGroup.in_event_of(
                                                                                    cb.EventAction.PUSH).and_branch_is(
                                                                                    branch_name="main")]),
                                                   environment=cb.BuildEnvironment(
                                                       build_image=cb.LinuxBuildImage.STANDARD_5_0
                                                       ))

這添加/提供了一個 Codebuild 項目,它將動態部署 cdk ls 的變更集

上面的 Codebuild 項目將需要一個 buildspecfile 在你的 repo 的根目錄中,並帶有以下代碼(供參考)

version: 0.2
phases:
  install:
    commands:
      - echo Entered in install phase...
      - npm install -g aws-cdk
      - cdk --version
  build:
    commands:
      - pwd
      - cd cdk_pipeline_static_websites
      - ls -lah 
      - python -m pip install -r requirements.txt
      - nohup ./parallel_deploy.sh & echo $! > pidfile && wait $(cat pidfile)
    finally:
      -  echo Build completed on `date`

parallel_deploy.sh的內容如下

#!/bin/bash
for stack in $(cdk list); 
do 
    cdk deploy $stack --require-approval=never &
done;

雖然這很好用,但必須有一個更簡單的替代方案,可以直接在 CDK 管道 class 中導入其他堆棧/結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM