发布于 2026-01-06 2 阅读
0

使用 AWS CDK Pipelines 和 Bitbucket 进行持续集成和交付 (CI/CD) 入门总结 DEV 的全球展示挑战赛,由 Mux 呈现:展示你的项目!

使用 AWS CDK Pipelines 和 Bitbucket 实现持续集成和交付 (CI/CD)

入门

总结

由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!

启动一个新项目时,我们面临的首要问题是规划基础设施。本文将通过一个简单的示例,演示如何使用 AWS CDK 和 Bitbucket 代码库创建自动化流水线。在深入探讨前提条件和步骤之前,
让我们先来解读一下本文的标题:“使用 AWS CDK Pipelines 实现持续集成和交付”。

持续交付

我假设您已经听说过“持续交付”这个术语,虽然有很多定义,但最简单的定义是:持续交付是一套工具和流程,可以帮助 DevOps 团队更快地交付更高质量的软件。

AWS CDK 与其他平台

AWS CDK 的官方定义是一个开源软件开发框架,用于使用熟悉的编程语言定义云应用程序资源(基础设施)TypeScript, JavaScript, Python, Java and C#

为什么是 CDk 与世界其他地区对抗?

基本上,我们可以将 CDK 与 Serverless Framework、AWS SAM 和 Terraform 进行比较。所有这些框架都用于开发、测试和部署项目,我不会详细介绍它们之间的所有细节和区别!
使用 AWS CDK 的主要优势包括:

  • CDK 易于使用,因为我们将使用与项目中相同的编程语言,它可以集成到您的 IDE 中,您无需学习 Yml 或 Terraform。
  • 组件的可重用性和共享性,就像任何其他软件库一样。

更多详情请查看我朋友Sebastian Bille的这篇文章 ,以及A Cloud Guru的另一篇佳作。

AWS CodeBuild 与 Bitbucket Pipelines 的比较

我最近参加了一次面试,面试过程中需要进行一些代码测试。他们要求我使用 AWS CodeBuild 和 Bitbucket 创建一个流水线。我的第一反应是:为什么你们要用 CodeBuild 而不是 Bitbucket Pipelines?
得到的答案并不令人满意。经过一番搜索,我发现它们的主要区别如下:

  • 与 AWS 服务集成
  • 价格方面,Bitbucket Pipelines 提供的产品套餐选项比 AWS 的按需付费模式更具优势。
  • CodeBuild 集成了 IAM 角色,可通过 AWS 身份验证提供临时 AWS 凭证。

如果您想了解更多相关信息,请查看以下文章:

入门

本文将重点介绍如何创建管道即代码,因此为了演示,我们将创建并部署一个简单的 React 应用。

先决条件

  • 安装最新版本的 NodeJS
  • 应该全局安装 npm 或 yarn。
  • 使用 AWS CDK 安装npm install -g aws-cdkyarn global add aws-cdk
  • AWS CLI
  • AWS账户
  • Bitbucket账户

步骤

1. 创建 Bitbucket 仓库

  • 在Bitbucket中创建一个公共或私有仓库,并将其命名为 myapp
  • 将 Bitbucket 代码库克隆到您的机器

2. 创建 React 应用

  • 在 Bitbucket 仓库的同一目录下创建一个简单的 React 应用。
npx create-react-app my-app
cd my-app
yarn start
Enter fullscreen mode Exit fullscreen mode
  • 将 react-app 代码提交到 Bitbucket

3. 配置 AWS CLI

  • 为您的 AWS 账户生成一个Access KeySecret Access Key
$ > export AWS_ACCESS_KEY_ID="…"
$ > export AWS_SECRET_ACCESS_KEY="…"
$ > export AWS_SESSION_TOKEN="…"
Enter fullscreen mode Exit fullscreen mode

4. 创建基础架构文件夹

  • 在当前文件夹外创建一个新文件夹src,并将其命名为 infra。
  • 导航至基础结构文件夹
  • 初始化 CDK 项目
  cdk init myApp --language typescript
Enter fullscreen mode Exit fullscreen mode

5. 部署基础设施

部署前,我们需要更新infr.ts以下/lib内容:

  • 添加以下依赖项
import * as CDK from "@aws-cdk/core";
import * as CodeBuild from "@aws-cdk/aws-codebuild";
import * as CodePipeline from "@aws-cdk/aws-codepipeline";
import * as CodePipelineAction from "@aws-cdk/aws-codepipeline-actions";
import * as S3 from "@aws-cdk/aws-s3"; 
Enter fullscreen mode Exit fullscreen mode
  • 创建管道和管道工件

    // AWS CodeBuild artifacts
    const outputSources = new CodePipeline.Artifact();
    const outputWebsite = new CodePipeline.Artifact();

    // AWS CodePipeline pipeline
    const pipeline = new CodePipeline.Pipeline(this, "Pipeline", {
      pipelineName: "MyWebsite",
      restartExecutionOnUpdate: true,
    });
Enter fullscreen mode Exit fullscreen mode
  • 添加检出阶段,在此阶段我们将从 Bitbucket 存储库克隆源代码,我们需要connectionArn在此步骤中创建一个,请按照“创建与 Bitbucket 的连接”文档中的说明获取您的connectionArn
// AWS CodePipeline stage to clone sources from bitbucket repository
    pipeline.addStage({
      stageName: "Source",
      actions: [
        new CodePipelineAction.CodeStarConnectionsSourceAction({
          actionName: "Checkout",
          owner: "repository owner name",
          repo: "repository name",
          output: outputSources,
          branch: "master",// the branch you deploy from
          connectionArn:
                  //Paste the generated `connectionArn` here 

        }),
      ],

    });
Enter fullscreen mode Exit fullscreen mode
  • 添加构建阶段来构建我们的网站,我们将添加一个简单的./infra/lib/pipeline.yml文件来运行 CodeBuild 项目。
version: 0.2

phases:
  install:
    runtime-versions:
      nodejs: 12
    commands:
      - yarn install
  build:
    commands:
      - yarn build

artifacts:
  base-directory: ./build
  files:
    - '**/*'

cache:
  paths:
    - './node_modules/**/*'

Enter fullscreen mode Exit fullscreen mode
 // AWS CodePipeline stage to build website and CDK resources
    pipeline.addStage({
      stageName: "Build",
      actions: [
        // AWS CodePipeline action to run CodeBuild project
        new CodePipelineAction.CodeBuildAction({
          actionName: "Website",
          project: new CodeBuild.PipelineProject(this, "BuildWebsite", {
            projectName: "MyWebsite",
            buildSpec: CodeBuild.BuildSpec.fromSourceFilename(
              "./infra/lib/build.yml"
            ),
          }),
          input: outputSources,
          outputs: [outputWebsite],
        }),
      ],
    });
Enter fullscreen mode Exit fullscreen mode
  • 最后阶段是添加部署阶段,我们希望将 React 应用部署到 S3 存储桶,并且每次我们进行新的更改时,都会将其部署到 S3 存储桶。
 // Amazon S3 bucket to store website
const bucketWebsite = new S3.Bucket(this, "Files", {
      websiteIndexDocument: "index.html",
      websiteErrorDocument: "error.html",
      publicReadAccess: true,
    });

    // AWS CodePipeline stage to deploy website and CDK resources
    pipeline.addStage({
      stageName: "Deploy",
      actions: [
        // AWS CodePipeline action to deploy website to S3
        new CodePipelineAction.S3DeployAction({
          actionName: "Website",
          input: outputWebsite,
          bucket: bucketWebsite,
        }),
      ],

    });
Enter fullscreen mode Exit fullscreen mode

资源:

AWS 云开发工具包 (CDK
) 可轻松通过 AWS CDK 以代码形式部署基础设施

总结

您可以使用 GitHub Actions 实现几乎相同的功能,但需要创建一个新的连接,请查看此链接:创建与 GitHub 的连接。
我们可以为不同的阶段(例如开发、测试、生产)创建不同的流水线。
我的 Bitbucket 仓库链接在此。

如果这篇文章对您有帮助,请在评论区告诉我,也欢迎您提出下次可以改进的地方!

请在 Twitter 上关注我@The_Al_Sanad,我会经常在那里写关于无服务器和 DevOps 的文章!

文章来源:https://dev.to/aws-builders/continuous-integration-and-delivery-ci-cd-using-aws-cdk-pipelines-with-bitbucket-4hc3