选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

自动为 Java 和 Python 项目创建动态 CI 管道 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

自动为 Java 和 Python 项目创建动态 CI 管道

由 Aromal Raj Jayarajan (AWS)、Amarnath Reddy (AWS)、MAHESH RAGHUNANDANAN (AWS) 和 Vijesh Vijayakumaran Nair (AWS) 创建

摘要

注意: AWS CodeCommit 不再向新客户开放。的现有客户 AWS CodeCommit 可以继续照常使用该服务。了解更多

此模式说明如何使用 AWS 开发人员工具自动为 Java 和 Python 项目创建动态持续集成(CI)管道。

随着技术堆栈的多样化和开发活动的增加,创建和维护在整个组织中保持一致的 CI 管道可能会变得困难。通过在 AWS Step Functions 中自动执行该流程,您可以确保 CI 管道的使用和方法保持一致。

为了自动创建动态 CI 管道,此模式使用以下变量输入:

  • 编程语言(仅限 Java 或 Python)

  • 管道名称

  • 所需管道阶段

注意

Step Functions 使用多个 AWS 服务来协调管道的创建。有关此解决方案中使用的 Amazon Web Services 的更多信息,请参阅此模式的工具部分。

先决条件和限制

先决条件

  • 一个有效的 Amazon Web Services account

  • 部署此解决方案的同一 AWS 区域 中的 Amazon S3 存储桶

  • 一个 AWS Identity and Access Management (IAM) 委托人,该委托人拥有创建此解决方案所需资源所需的 AWS CloudFormation 权限

限制

  • 此模式仅支持 Java 和 Python 项目。

  • 在此模式中预置的 IAM 角色遵循最低权限原则。必须根据您的 CI 管道需要创建的特定资源更新 IAM 角色的权限。

架构

目标技术堆栈

  • 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 工具自动为 Java 和 Python 项目创建动态 CI 管道的工作流程。

图表显示了以下工作流:

  1. AWS 用户以 JSON 格式提供用于创建 CI 管道的输入参数。此输入将启动一个 Step Functions 工作流(状态机),该工作流使用 AWS 开发人员工具创建 CI 管道。

  2. Lambda 函数读取名为 input-reference 的文件夹,该文件夹存储在 Amazon S3 存储桶中,然后生成 buildspec.yml 文件。此生成的文件定义了 CI 管道阶段,并存储回存储参数引用的同一 Amazon S3 存储桶中。

  3. Step Functions 会检查 CI 管道创建工作流程的依赖关系是否存在任何更改,并根据需要更新依赖关系堆栈。

  4. Step Functions 在 CloudFormation 堆栈中创建 CI 管道资源,包括 CodeCommit 存储库、 CodeBuild 项目和 CodePipeline 管道。

  5. CloudFormation 堆栈将所选技术堆栈(Java 或 Python)的示例源代码和 buildspec.yml 文件复制到存储库中。 CodeCommit

  6. CI 管道运行时详细信息存储在 DynamoDB 表中。

自动化和扩缩

  • 此模式仅供在单个开发环境中使用。需要更改配置才能跨多个开发环境使用。

  • 要添加对多个 CloudFormation 堆栈的支持,您可以创建其他 CloudFormation 模板。有关更多信息,请参阅 CloudFormation 文档 CloudFormation中的 AWS 入门

工具

工具

  • AWS Step Functions 是一项无服务器编排服务,可让您搭配使用 AWS Lambda 函数和其他 Amazon Web Services 来构建业务关键型应用程序。

  • AWS Lambda 是一项计算服务,可帮助您运行代码,而无需预置或管理服务器。它仅在需要时运行您的代码,并且能自动扩缩,因此您只需为使用的计算时间付费。

  • AWS CodeBuild 是一项完全托管的构建服务,可帮助您编译源代码、运行单元测试和生成可随时部署的项目。

  • AWS CodeCommit 是一项版本控制服务,可帮助您私下存储和管理 Git 存储库,而无需管理自己的源代码控制系统。

  • AWS CodePipeline 可帮助您快速建模和配置软件发布的不同阶段,并自动执行持续发布软件变更所需的步骤。

  • AWS Identity and Access Management (AWS IAM) 通过控制验证和授权使用您 AWS 资源的用户,帮助您安全地管理对您 AWS 资源的访问。

  • AWS Key Management Service (AWS KMS) 可帮助您创建和控制加密密钥,以帮助保护您的数据。

  • Amazon Simple Storage Service(Amazon S3) 是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。

  • AWS CloudFormation 可帮助您设置 AWS 资源,快速一致地配置这些资源,并在 AWS 账户和区域的整个生命周期中对其进行管理。

  • Amazon DynamoDB 是一项完全托管的 NoSQL 数据库服务,可提供快速、可预测和可扩展的性能。

  • AWS Systems Manager Parameter Store 提供安全的分层存储,用于配置数据管理和密钥管理。

代码

此模式的代码可在 GitHub automated-ci-pipeline-creation存储库中找到。存储库包含创建此模式中概述的目标架构所需的 CloudFormation 模板。

最佳实践

  • 请勿在 CloudFormation 模板或 Step Functions 操作配置中直接输入令牌或密码等凭据(机密)。如果这样做,该信息将显示在 DynamoDB 日志中。相反,请使用 AWS Secrets Manager 来设置和存储密钥。然后,根据需要在 CloudFormation 模板和 Step Functions 操作配置中引用 Secrets Manager 中存储的密钥。有关更多信息,请参阅 Secrets Manager 文档中的什么是 AWS Secrets Manager

  • 为存储在 Amazon S3 中的 CodePipeline 项目配置服务器端加密。有关更多信息,请参阅 CodePipeline 文档中的为存储在 Amazon S3 中的项目配置服务器端加密。 CodePipeline

  • 在配置 IAM 角色时应用最低权限。有关更多信息,请参阅 IAM 文档中的应用最低权限许可

  • 确保您的 Amazon S3 存储桶不可公开访问。有关更多信息,请参阅 Amazon S3 文档中的为您的 S3 存储桶配置阻止公有访问设置。

  • 确保您为 Amazon S3 存储桶激活版本控制。有关更多信息,请参阅 Amazon S3 文档中的在 S3 存储桶中使用版本控制

  • 配置 IAM policy 时使用 IAM Access Analyzer。该工具提供可操作的建议,以帮助您编写安全且实用的 IAM policy。有关更多信息,请参阅 IAM 文档中的使用 AWS Identity and Access Management Access Analyzer

  • 如果可能,请在配置 IAM policy 时定义特定的访问条件。

  • 激活 Amazon CloudWatch 日志以进行监控和审计。有关更多信息,请参阅什么是 Amazon CloudWatch 日志? 在 CloudWatch 文档中。

操作说明

Task描述所需技能

创建 Amazon S3 存储桶。

创建 Amazon S3 存储桶(或使用现有存储桶)来存储解决方案所需的 CloudFormation 模板、源代码和输入文件。

有关更多信息,请参阅 Amazon S3 文档中的步骤 1:创建您的第一个 S3 存储桶。

注意

Amazon S3 存储桶必须位于您要将解决方案部署到的同一 AWS 区域中。

AWS DevOps

克隆 GitHub 存储库。

在终端窗口中运行以下命令来克隆 GitHub automated-ci-pipeline-creation存储库:

git clone https://github.com/aws-samples/automated-ci-pipeline-creation.git

有关更多信息,请参阅 GitHub 文档中的克隆存储库

AWS DevOps

将解决方案模板文件夹从克隆的 GitHub 存储库上传到您的 Amazon S3 存储桶。

复制克隆的 Solution-Templates 文件夹中的内容,并将其上传到您创建的 Amazon S3 存储桶中。

有关更多信息,请参阅 Amazon S3 文档中的上传数据

注意

确保仅上传解决方案模板文件夹的内容。您只能在 Amazon S3 存储桶的根级别上传文件。

AWS DevOps

配置先决条件

Task描述所需技能

创建 Amazon S3 存储桶。

创建 Amazon S3 存储桶(或使用现有存储桶)来存储解决方案所需的 CloudFormation 模板、源代码和输入文件。

有关更多信息,请参阅 Amazon S3 文档中的步骤 1:创建您的第一个 S3 存储桶。

注意

Amazon S3 存储桶必须位于您要将解决方案部署到的同一 AWS 区域中。

AWS DevOps

克隆 GitHub 存储库。

在终端窗口中运行以下命令来克隆 GitHub automated-ci-pipeline-creation存储库:

git clone https://github.com/aws-samples/automated-ci-pipeline-creation.git

有关更多信息,请参阅 GitHub 文档中的克隆存储库

AWS DevOps

将解决方案模板文件夹从克隆的 GitHub 存储库上传到您的 Amazon S3 存储桶。

复制克隆的 Solution-Templates 文件夹中的内容,并将其上传到您创建的 Amazon S3 存储桶中。

有关更多信息,请参阅 Amazon S3 文档中的上传数据

注意

确保仅上传解决方案模板文件夹的内容。您只能在 Amazon S3 存储桶的根级别上传文件。

AWS DevOps
Task描述所需技能

使用克隆存储库中的 template.yml 文件创建 CloudFormation 堆栈来部署解决方案。 GitHub

  1. 登录 AWS 管理控制台,然后打开 AWS CloudFormation 控制台

  2. 选择创建堆栈。此时将显示一个下拉列表。

  3. 在下拉列表中,选择使用新资源(标准)创建堆栈页面将打开。

  4. 指定模板部分,选择上传模板文件旁边的复选框。

  5. 选择 Choose file (选择文件)。然后,导航到克隆 GitHub 存储库的根文件夹,然后选择 t emplate .yml 文件。然后选择 Open (打开)

  6. 选择下一步指定堆栈详细信息页面将打开。

  7. 参数部分中,指定以下参数:

    • 对于 S3 TemplateBucketName,请输入您之前创建的 Amazon S3 存储桶的名称,其中包含此解决方案的源代码和参考资料。确保存储桶名称参数为小写。

    • 对于 Dynamo DBTable,请输入堆栈创建的 DynamoDB 表的名称。 CloudFormation

    • 对于 StateMachineName,输入 CloudFormation 堆栈创建的 Step Functions 状态机的名称。

  8. 选择下一步配置堆栈选项页面将打开。

  9. 配置堆栈选项页面上,请选择下一步。请勿更改任何默认值。此时将打开查看页面。

  10. 查看堆栈创建设置。然后,选择创建堆栈以启动您的堆栈。

注意

创建堆栈时,堆栈会列在堆栈页面上,状态为 CREAT E_IN_PROGRESS。请确保等待堆栈的状态更改为 CREATE_COMPLETE,然后再完成此模式中的其余步骤。

AWS 管理员,AWS DevOps

部署解决方案

Task描述所需技能

使用克隆存储库中的 template.yml 文件创建 CloudFormation 堆栈来部署解决方案。 GitHub

  1. 登录 AWS 管理控制台,然后打开 AWS CloudFormation 控制台

  2. 选择创建堆栈。此时将显示一个下拉列表。

  3. 在下拉列表中,选择使用新资源(标准)创建堆栈页面将打开。

  4. 指定模板部分,选择上传模板文件旁边的复选框。

  5. 选择 Choose file (选择文件)。然后,导航到克隆 GitHub 存储库的根文件夹,然后选择 t emplate .yml 文件。然后选择 Open (打开)

  6. 选择下一步指定堆栈详细信息页面将打开。

  7. 参数部分中,指定以下参数:

    • 对于 S3 TemplateBucketName,请输入您之前创建的 Amazon S3 存储桶的名称,其中包含此解决方案的源代码和参考资料。确保存储桶名称参数为小写。

    • 对于 Dynamo DBTable,请输入堆栈创建的 DynamoDB 表的名称。 CloudFormation

    • 对于 StateMachineName,输入 CloudFormation 堆栈创建的 Step Functions 状态机的名称。

  8. 选择下一步配置堆栈选项页面将打开。

  9. 配置堆栈选项页面上,请选择下一步。请勿更改任何默认值。此时将打开查看页面。

  10. 查看堆栈创建设置。然后,选择创建堆栈以启动您的堆栈。

注意

创建堆栈时,堆栈会列在堆栈页面上,状态为 CREAT E_IN_PROGRESS。请确保等待堆栈的状态更改为 CREATE_COMPLETE,然后再完成此模式中的其余步骤。

AWS 管理员,AWS DevOps
Task描述所需技能

运行您创建的步骤函数。

  1. 登录 AWS 管理控制台,然后打开 Step Functions 控制台

  2. 打开您创建的步骤函数。

  3. 选择启动执行。然后,以 JSON 格式输入工作流的输入值(请参阅以下示例输入)。

  4. 选择启动执行

JSON 格式

{ "details": { "tech_stack": "Name of the Tech Stack (python/java)", "project_name": "Name of the Project that you want to create with", "pre_build": "Choose the step if it required in the buildspec.yml file i.e., yes/no", "build": "Choose the step if it required in the buildspec.yml file i.e., yes/no", "post_build": "Choose the step if it required in the buildspec.yml file i.e., yes/no", "reports": "Choose the step if it required in the buildspec.yml file i.e., yes/no", } }

Java JSON 输入示例

{ "details": { "tech_stack": "java", "project_name": "pipeline-java-pjt", "pre_build": "yes", "build": "yes", "post_build": "yes", "reports": "yes" } }

Python JSON 输入示例

{ "details": { "tech_stack": "python", "project_name": "pipeline-python-pjt", "pre_build": "yes", "build": "yes", "post_build": "yes", "reports": "yes" } }
AWS 管理员,AWS DevOps

确认 CI 管道的 CodeCommit 存储库已创建。

  1. 登录 AWS 管理控制台,然后打开CodeCommit 控制台

  2. 存储库页面上,验证您创建的 CodeCommit 存储库的名称是否出现在存储库列表中。存储库的名称后面附有以下内容:pipeline-java-pjt-Repo

  3. 打开 CodeCommit 存储库并验证示例源代码以及 buildspec.yml 文件是否已推送到主分支。

AWS DevOps

检查 CodeBuild 项目资源。

  1. 登录 AWS 管理控制台,然后打开CodeBuild 控制台

  2. 在 “生成项目” 页面上,验证您创建的 CodeBuild 项目的名称是否出现在项目列表中。项目名称后面附有以下内容:pipeline-java-pjt-Build

  3. 选择您的 CodeBuild 项目名称以打开该项目。然后,查看并验证以下配置:

    • 项目配置

    • 环境

    • BuildSpec

    • 批量配置

    • 构件

AWS DevOps

验证各个 CodePipeline 阶段。

  1. 登录 AWS 管理控制台,然后打开CodePipeline 控制台

  2. 管道页上,验证您创建的管道的名称是否显示在管道列表中。管道名称后面附有以下内容:pipeline-java-pjt-Pipeline

  3. 选择管道的名称以打开管道。然后,查看并验证管道的每个阶段,包括提交部署

AWS DevOps

确认 CI 管道已成功运行。

  1. CodePipeline 控制台的 “管道” 页面上,选择您的管道名称以查看管道的状态。

  2. 验证管道的每个阶段是否具有成功状态。

AWS DevOps

测试设置

Task描述所需技能

运行您创建的步骤函数。

  1. 登录 AWS 管理控制台,然后打开 Step Functions 控制台

  2. 打开您创建的步骤函数。

  3. 选择启动执行。然后,以 JSON 格式输入工作流的输入值(请参阅以下示例输入)。

  4. 选择启动执行

JSON 格式

{ "details": { "tech_stack": "Name of the Tech Stack (python/java)", "project_name": "Name of the Project that you want to create with", "pre_build": "Choose the step if it required in the buildspec.yml file i.e., yes/no", "build": "Choose the step if it required in the buildspec.yml file i.e., yes/no", "post_build": "Choose the step if it required in the buildspec.yml file i.e., yes/no", "reports": "Choose the step if it required in the buildspec.yml file i.e., yes/no", } }

Java JSON 输入示例

{ "details": { "tech_stack": "java", "project_name": "pipeline-java-pjt", "pre_build": "yes", "build": "yes", "post_build": "yes", "reports": "yes" } }

Python JSON 输入示例

{ "details": { "tech_stack": "python", "project_name": "pipeline-python-pjt", "pre_build": "yes", "build": "yes", "post_build": "yes", "reports": "yes" } }
AWS 管理员,AWS DevOps

确认 CI 管道的 CodeCommit 存储库已创建。

  1. 登录 AWS 管理控制台,然后打开CodeCommit 控制台

  2. 存储库页面上,验证您创建的 CodeCommit 存储库的名称是否出现在存储库列表中。存储库的名称后面附有以下内容:pipeline-java-pjt-Repo

  3. 打开 CodeCommit 存储库并验证示例源代码以及 buildspec.yml 文件是否已推送到主分支。

AWS DevOps

检查 CodeBuild 项目资源。

  1. 登录 AWS 管理控制台,然后打开CodeBuild 控制台

  2. 在 “生成项目” 页面上,验证您创建的 CodeBuild 项目的名称是否出现在项目列表中。项目名称后面附有以下内容:pipeline-java-pjt-Build

  3. 选择您的 CodeBuild 项目名称以打开该项目。然后,查看并验证以下配置:

    • 项目配置

    • 环境

    • BuildSpec

    • 批量配置

    • 构件

AWS DevOps

验证各个 CodePipeline 阶段。

  1. 登录 AWS 管理控制台,然后打开CodePipeline 控制台

  2. 管道页上,验证您创建的管道的名称是否显示在管道列表中。管道名称后面附有以下内容:pipeline-java-pjt-Pipeline

  3. 选择管道的名称以打开管道。然后,查看并验证管道的每个阶段,包括提交部署

AWS DevOps

确认 CI 管道已成功运行。

  1. CodePipeline 控制台的 “管道” 页面上,选择您的管道名称以查看管道的状态。

  2. 验证管道的每个阶段是否具有成功状态。

AWS DevOps
Task描述所需技能

删除中的资源堆栈 CloudFormation。

在中删除 CI 管道的资源堆栈 CloudFormation。

有关更多信息,请参阅 CloudFormation 文档中的在 AWS CloudFormation 控制台上删除堆栈

注意

请务必删除名为 -stack 的堆栈<project_name>。

AWS DevOps

在 Amazon S3 中删除 CI 管道的依赖关系,然后 CloudFormation。

  1. 清空名为的 Amazon S3 存储桶DeploymentArtifactBucket。有关更多信息,请参阅 Amazon S3 文档中的清空存储桶

  2. 在中删除 CI 管道的依赖堆栈 CloudFormation。有关更多信息,请参阅 CloudFormation 文档中的在 AWS CloudFormation 控制台上删除堆栈

注意

请务必删除名为的堆栈pipeline-creation-dependencies-stack

AWS DevOps

删除 Amazon S3 模版存储桶。

删除您在此模式的配置先决条件部分中创建的 Amazon s3 存储桶,该存储桶存储此解决方案的模板。

有关更多信息,请参阅 Amazon S3 文档中的删除存储桶

AWS DevOps

清除资源

Task描述所需技能

删除中的资源堆栈 CloudFormation。

在中删除 CI 管道的资源堆栈 CloudFormation。

有关更多信息,请参阅 CloudFormation 文档中的在 AWS CloudFormation 控制台上删除堆栈

注意

请务必删除名为 -stack 的堆栈<project_name>。

AWS DevOps

在 Amazon S3 中删除 CI 管道的依赖关系,然后 CloudFormation。

  1. 清空名为的 Amazon S3 存储桶DeploymentArtifactBucket。有关更多信息,请参阅 Amazon S3 文档中的清空存储桶

  2. 在中删除 CI 管道的依赖堆栈 CloudFormation。有关更多信息,请参阅 CloudFormation 文档中的在 AWS CloudFormation 控制台上删除堆栈

注意

请务必删除名为的堆栈pipeline-creation-dependencies-stack

AWS DevOps

删除 Amazon S3 模版存储桶。

删除您在此模式的配置先决条件部分中创建的 Amazon s3 存储桶,该存储桶存储此解决方案的模板。

有关更多信息,请参阅 Amazon S3 文档中的删除存储桶

AWS DevOps

相关资源

隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。