本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
自动为 Java 和 Python 项目创建动态 CI 管道
由 Aromal Raj Jayarajan (AWS)、Amarnath Reddy ()、() 和 Vijesh Vijayakumaran Nair (AWS) 创作 MAHESH RAGHUNANDANAN (AWS) AWS
摘要
注意: AWS CodeCommit 不再向新客户开放。的现有客户 AWS CodeCommit 可以继续照常使用该服务。了解更多
此模式展示了如何使用AWS开发者工具自动为 Java 和 Python 项目创建动态持续集成 (CI) 管道。
随着技术堆栈的多样化和开发活动的增加,创建和维护在整个组织中保持一致的 CI 管道可能会变得困难。通过在 AWS Step Functions 中实现流程自动化,您可以确保 CI 管道的用法和方法保持一致。
为了自动创建动态 CI 管道,此模式使用以下变量输入:
编程语言(仅限 Java 或 Python)
管道名称
所需管道阶段
注意
Step Functions 通过使用多个AWS服务来协调管道的创建。有关此解决方案中使用的AWS服务的更多信息,请参阅此模式的 “工具” 部分。
先决条件和限制
先决条件
一个活跃的AWS账户
部署此解决方案AWS所在区域的 Amazon S3 存储桶
拥有创建此解决方案所需资源所需的AWS CloudFormation 权限的 Ident AWS ity and Access Management (IAM) 委托人
限制
此模式仅支持 Java 和 Python 项目。
在此模式中配置的IAM角色遵循最低权限原则。必须根据IAM您的 CI 管道需要创建的特定资源来更新角色的权限。
架构
目标技术堆栈
AWS CloudFormation
AWS CodeBuild
AWS CodeCommit
AWS CodePipeline
IAM
Amazon Simple Storage Service(Amazon S3)
AWS Systems Manager
AWS Step Functions
AWS Lambda
Amazon DynamoDB
目标架构
下图显示了使用AWS开发者工具自动为 Java 和 Python 项目创建动态 CI 管道的工作流程示例。
图表显示了以下工作流:
AWS用户以JSON格式提供 CI 管道创建 CI 管道的输入参数。此输入会启动 Step Functions 工作流程(状态机),该工作流程使用AWS开发者工具创建 CI 管道。
Lambda 函数读取名为 input-reference 的文件夹,该文件夹存储在 Amazon S3 存储桶中,然后生成 buildspec.yml 文件。此生成的文件定义了 CI 管道阶段,并存储回存储参数引用的同一 Amazon S3 存储桶中。
Step Functions 会检查 CI 管道创建工作流程的依赖关系是否存在任何更改,并根据需要更新依赖关系堆栈。
Step Functions 在 CloudFormation 堆栈中创建 CI 管道资源,包括 CodeCommit 存储库、 CodeBuild 项目和 CodePipeline 管道。
CloudFormation 堆栈将所选技术堆栈(Java 或 Python)的示例源代码和 buildspec.yml 文件复制到存储库中。 CodeCommit
CI 管道运行时详细信息存储在 DynamoDB 表中。
自动化和扩缩
此模式仅供在单个开发环境中使用。需要更改配置才能跨多个开发环境使用。
要添加对多个 CloudFormation 堆栈的支持,您可以创建其他 CloudFormation 模板。有关更多信息,请参阅 CloudFormation 文档AWS CloudFormation中的入门。
工具
工具
AWSSt ep Functions 是一项无服务器编排服务,可帮助您组合 Lam AWS bda 函数和其他AWS服务来构建业务关键型应用程序。
AWSLambda 是一项计算服务,可帮助您运行代码,而无需预置或管理服务器。它仅在需要时运行您的代码,并且能自动扩缩,因此您只需为使用的计算时间付费。
AWS CodeBuild是一项完全托管的生成服务,可帮助您编译源代码、运行单元测试和生成可随时部署的工件。
AWS CodeCommit是一项版本控制服务,可帮助您私下存储和管理 Git 存储库,而无需管理自己的源代码控制系统。
AWS CodePipeline帮助您快速建模和配置软件发布的不同阶段,并自动执行持续发布软件更改所需的步骤。
AWSIdentity and Access Management (IAM) 通过控制谁经过身份验证并有权使用AWS资源,从而帮助您安全地管理对资源的访问权限。
AWS密钥管理服务 (AWSKMS) 可帮助您创建和控制加密密钥,以帮助保护您的数据。
Amazon Simple Storage Service (Amazon S3) 是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。
AWS CloudFormation帮助您设置AWS资源,快速一致地配置资源,并在各个AWS账户和地区的整个生命周期中对其进行管理。
Amazon DynamoDB 是一项完全托管的SQL无数据库服务,可提供快速、可预测和可扩展的性能。
AWSSystems Manager Parameter Store 为配置数据管理和密钥管理提供安全的分层存储。
代码
此模式的代码可在 GitHub automated-ci-pipeline-creation
最佳实践
请勿在 CloudFormation 模板或 Step Functions 操作配置中直接输入令牌或密码等凭据(机密)。如果这样做,该信息将显示在 DynamoDB 日志中。取而代之的是使用 S AWS ecrets Manager 来设置和存储密钥。然后,根据需要在 CloudFormation 模板和 Step Functions 操作配置中引用 Secrets Manager 中存储的密钥。有关更多信息,请参阅 S AWSecrets Manager 文档中的什么是 Secrets Manager。
为存储在 Amazon S3 中的 CodePipeline 项目配置服务器端加密。有关更多信息,请参阅 CodePipeline 文档中的为存储在 Amazon S3 中的项目配置服务器端加密。 CodePipeline
配置IAM角色时应用最低权限权限。有关更多信息,请参阅文档中的应用最低权限权限。IAM
确保您的 Amazon S3 存储桶不可公开访问。有关更多信息,请参阅 Amazon S3 文档中的为您的 S3 存储桶配置阻止公有访问设置。
确保您为 Amazon S3 存储桶激活版本控制。有关更多信息,请参阅 Amazon S3 文档中的在 S3 存储桶中使用版本控制。
配置IAM策略时使用IAM访问分析器。该工具提供切实可行的建议,以帮助您制定安全和实用的IAM策略。有关更多信息,请参阅IAM文档中的使用 Id AWS entity and Access Management Access Analyzer。
如果可能,请在配置IAM策略时定义特定的访问条件。
激活 Amazon CloudWatch 日志以进行监控和审计。有关更多信息,请参阅什么是 Amazon CloudWatch 日志? 在 CloudWatch 文档中。
操作说明
任务 | 描述 | 所需技能 |
---|---|---|
创建 Amazon S3 存储桶。 | 创建 Amazon S3 存储桶(或使用现有存储桶)来存储解决方案所需的 CloudFormation 模板、源代码和输入文件。 有关更多信息,请参阅 Amazon S3 文档中的步骤 1:创建您的第一个 S3 存储桶。 注意Amazon S3 存储桶必须与您要部署解决方案的AWS区域相同。 | AWS DevOps |
克隆 GitHub 存储库。 | 在终端窗口中运行以下命令来克隆 GitHub automated-ci-pipeline-creation
有关更多信息,请参阅 GitHub 文档中的克隆存储库 | AWS DevOps |
将解决方案模板文件夹从克隆的 GitHub 存储库上传到您的 Amazon S3 存储桶。 | 复制克隆的 Solution-Templates 文件夹中的内容,并将其上传到您创建的 Amazon S3 存储桶中。 有关更多信息,请参阅 Amazon S3 文档中的上传数据。 注意确保仅上传解决方案模板文件夹的内容。您只能在 Amazon S3 存储桶的根级别上传文件。 | AWS DevOps |
任务 | 描述 | 所需技能 |
---|---|---|
使用克隆存储库中的 template.yml 文件创建 CloudFormation 堆栈来部署解决方案。 GitHub |
注意创建堆栈时,堆栈会列在堆栈页面上,状态为 CREATE_ PROGRESS IN_。请务必等待堆栈的状态变为 CREATE_,COMPLETE然后再完成此模式中的剩余步骤。 | AWS管理员,AWS DevOps |
任务 | 描述 | 所需技能 |
---|---|---|
运行您创建的步骤函数。 |
JSON格式化
Java JSON 输入示例
Python JSON 输入示例
| AWS管理员,AWS DevOps |
确认 CI 管道的 CodeCommit 存储库已创建。 |
| AWS DevOps |
检查 CodeBuild 项目资源。 |
| AWS DevOps |
验证 CodePipeline 阶段。 |
| AWS DevOps |
确认 CI 管道已成功运行。 |
| AWS DevOps |
任务 | 描述 | 所需技能 |
---|---|---|
删除中的资源堆栈 CloudFormation。 | 在中删除 CI 管道的资源堆栈 CloudFormation。 有关更多信息,请参阅 CloudFormation 文档中的在AWS CloudFormation 控制台上删除堆栈。 注意请务必删除名为 -stack 的堆栈<project_name>。 | AWS DevOps |
在 Amazon S3 中删除 CI 管道的依赖关系,然后 CloudFormation。 |
注意请务必删除名为的堆栈pipeline-creation-dependencies-stack。 | AWS DevOps |
删除 Amazon S3 模版存储桶。 | 删除您在此模式的配置先决条件部分中创建的 Amazon s3 存储桶,该存储桶存储此解决方案的模板。 有关更多信息,请参阅 Amazon S3 文档中的删除存储桶。 | AWS DevOps |
相关资源
创建使用 Lambda 的 Step Functions 状态机(AWSStep F unctions 文档)
AWSSte@@ p Funct WorkFlow ions 工作室(AWSSt ep Functions 文档)
如何运AWS CloudFormation 作? (AWS CloudFormation 文档)
使用AWS CodeCommit、AWS CodeBuild、AWS CodeDeploy和 AWS CodePipeline(AWS博客文章)完成 CI/CD
IAM以及AWSSTS配额、名称要求和字符限制(IAM文档)