使用 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-cdk或yarn 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
- 将 react-app 代码提交到 Bitbucket
3. 配置 AWS CLI
- 为您的 AWS 账户生成一个
Access Key和Secret Access Key
$ > export AWS_ACCESS_KEY_ID="…"
$ > export AWS_SECRET_ACCESS_KEY="…"
$ > export AWS_SESSION_TOKEN="…"
4. 创建基础架构文件夹
- 在当前文件夹外创建一个新文件夹
src,并将其命名为 infra。 - 导航至基础结构文件夹
- 初始化 CDK 项目
cdk init myApp --language typescript
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";
- 创建管道和管道工件
// 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,
});
- 添加检出阶段,在此阶段我们将从 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
}),
],
});
- 添加构建阶段来构建我们的网站,我们将添加一个简单的
./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/**/*'
// 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],
}),
],
});
- 最后阶段是添加部署阶段,我们希望将 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,
}),
],
});
资源:
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