亚马逊AWS官方博客

Amazon CodeCatalyst 初探

在 re:Invent 2022 上亚马逊云科技宣布了新的 DevOps 服务 – Amazon CodeCatalyst(目前还处于预览阶段)—— 一个面向软件开发团队的基于云的协作平台服务。CodeCatalyst 让您可以在其中使用持续集成/持续交付 (CI/CD) 工具规划工作、协作处理代码以及构建、测试和部署应用程序。通过将 亚马逊云科技 账户连接到 CodeCatalyst 空间,您可以轻松地将亚马逊云科技资源与您的项目集成并加以利用。通过这个一站式的平台服务完成应用程序生命周期的所有阶段和方面,您可以快速、自信地交付软件。CodeCatalyst 能够和项目管理工具 JIRA Cloud 进行良好的集成,您能够通过 JIRA board 管理您的工作任务并很方便地追踪代码变更。除此之外,您可以通过 CodeCatalyst workflow 快速地生成持续集成和持续交付 (CI/CD) 流水线,使您能够轻松构建、测试和部署应用程序。

背景:

很多企业客户在进行数字化转型的时候需要通过 DevOps 减少开发和运维团队之间的摩擦和冲突,从而提高团队的效率,客户在落地时候经常会面临以下问题和挑战:

  • 持续提供高质量部署既复杂又缓慢
  • 与他人高效协作具有挑战性
  • 管理应用程序环境越来越复杂
  • 配置新项目是一项费时费力的工作

Amazon CodeCatalyst 可以帮助解决所有这些问题。CodeCatalyst 是一项集成的 DevOps 服务,使开发团队可以轻松地在亚马逊云科技上快速构建和交付应用程序。在接下来的一段时间里,我们将会有一系列文章发布(包括如何在 CodeCatalyst 使用 github actions,如何加速您的 workflow 等),为您剖析 CodeCatalyst 的各个功能,以便您在使用的时候能够顺利的帮您克服在项目落地中遇到的各种挑战和困难。在本篇文章中我们将专注以下两个方面:

  • 利用 CodeCatalyst 和 JIRA Cloud 的集成,这样您能够通过 JIRA Cloud board 管理您的工作任务并很方便地追踪代码变更。
  • 利用 CodeCatalyst workflow 构建一个无服务 restful 微服务的 CICD 流水线,使您能够轻松构建、测试和部署应用程序。

Jira 是一个项目管理应用程序,可帮助敏捷开发团队规划、分配、跟踪、报告和管理工作任务。通过 Jira extenstion 允许您在 Amazon CodeCatalyst 项目中使用 Jira 项目并追踪您的代码变更。

CodeCatalyst workflow 可帮助您在频繁、快速、安全可靠的情况下高质量的完成应用程序部署。CodeCatalyst 使用可视化编辑器(也可以使用 YAML)来快速组装和配置 actions,以编写自动执行 CI/CD 流水线、测试报告和其他手动流程的 workflow。workflow 使用预置计算资源、lambda 计算资源、自定义容器镜像和托管镜像构建基础设施来轻松扩展执行,而不会牺牲灵活性。

前置条件

如果要按照本示例进行操作,您需要:

  • 拥有 JIRA cloud 账户
  • 拥有关联 JIRA 项目空间的权限
  • 拥有在 JIRA cloud 创建好了的项目空间
  • 拥有用于登录 CodeCatalyst 的 Amazon Builder ID
  • 属于某个 space,并在该 space 中为您分配 space 管理员角色。有关更多信息,请参阅在 CodeCatalyst 中创建 space管理 space 的成员space 管理员角色
  • 拥有与您的 space 关联的亚马逊云科技账户,并在该账户中拥有 IAM 角色。有关角色和角色策略的更多信息,请参阅创建 CodeCatalyst 服务角色。

示例

在您创建好 space 后,你需要在 space 中创建一个项目(project),有两种方式创建项目,一种是创建空的项目,然后您需要自己配置代码仓库,工作流等配置。另一种方式是使用蓝图(blueprint),当您使用蓝图的时候,CodeCatalyst 会使用代码仓库、示例源代码、CI/CD 工作流、测试报告以及集成的 issue 跟踪工具创建一个完整的项目。项目蓝图为不同类型的应用程序和框架预配云基础结构、资源,这样您在几分钟之内就可以快速创建一个项目了,然后再根据需要修改相关配置。

在本示例中,我们将使用无服务 restful 微服务蓝图(blueprint)。您可以在 Amazon CodeCatalyst 创建项目并选择该蓝图(blueprint),新建的项目的架构图如下:

项目包含以下云资源:

  • Amazon Lambda Function
  • HTTP API Gateway
  • Amazon DynamoDB Database

很多客户都在使用 JIRA 作为项目管理的工具,他们希望在管理 JIRA 的任务的同时能够清楚的知道开发人员针对某个任务做了哪些代码改动。CodeCatalyst 能够帮您实现这个功能。新项目创建好后,您需要通过页面右上角的 CodeCatalyst Catalog 安装 JIRA Software extention 并配置连接到您的 JIRA Cloud site,然后通过 Linked JIRA projects 功能关联 CodeCatalyst project 和 JIRA Cloud site 的 project,具体操作步骤请查看文档。Project 关联后在您的导航菜单会出现“JIRA issues”菜单,点击后将会自动跳转到您的 JIRA Cloud site。

接下来您需要通过菜单 Code Source > Repositories > Actions > Create branch 创建一个新的分支,分支名为 dev。更改 dev 分支中的一个文件(例如 README.md)并提交。然后您需要在 JIRA Cloud site 的 project 创建一个新的任务,本示例中任务 ID 是 DP-2。请记下这个 ID,接下来我们需要使用它。

接着通过菜单 Pull Request > Create pull request 创建一个新的 PR,在页面的右上角可以选择关联的 JIRA 任务,这里我们选择我们刚刚新建的任务 DP-2,这表明此次代码变更可由此任务追踪。在 PR 页面您也可以选择代码 review 人员,这在团队协作中非常重要,您可以选择不同的团队成员帮您 review PR,这是保证代码质量的一个关键手段。填写完 PR 表单后请点击 Create,这样一个 PR 就已经创建好了。

这个时候如果您去到 JIRA project board,您可以看到 DP-2 任务下面已经有了一个新的图标,点击该图标可以看到这个任务已经关联到一个 PR,并且这个 PR 在 Open 状态。

回到 CodeCatalyst 菜单 Pull requests,选中刚刚创建好的 PR 并点击 merge 按钮,代码就会从 dev 分支合并到 main 分支。再次去到 JIRA project board,我们发现图标已经变成绿色,状态也从 Open 转变成 Merged。

下一步我们来看看新建的 workflow。导航到 CI/CD  > workflows。您将看到列出的两个 workflow。单击 ApplicationDeploymentPipeline,您将看到如下图所示的 workflow。该 workflow 包括三个操作:

1)构建用 Java 编写的后端,包括单元测试。

2)配置 CDK 相关资源。

3)将后端应用部署到 Lambda 。

让我们看一下其中的一些 actions。如果单击每个 action,您将看到有关 workflow 执行的详细信息。例如点击此示例中 BackendTerst。在“Logs”选项卡上,我可以看到构建操作执行了一系列关键步骤以及对应的运行时间。在此示例中,关键步骤包括初始化运行流水线的计算资源,下载源代码,编译,测试等。

如果切换到“Reports”选项卡,您会看到单元测试的结果以及测试覆盖率。在每种情况下,测试都超过了通过率,由图表上的黑条表示。如果没有超过,构建就会失败。

点击对应的测试报告文件可以看到该报告的详细信息,例如您点击 jacoco.xml,就可以看到代码覆盖率明细。包括行覆盖率(Line coverage)和分支覆盖率(Branch coverage),以及源代码每个文件的覆盖率信息。

您还可以点击代码源文件以进一步分析代码覆盖率。例如点击 Todo.java,您可以看到代码中绿色高亮部分表示单元测试已覆盖,红色表示未覆盖。

接下来,让我们通过单击屏幕右上角的“Edit”按钮来检查如何定义 workflow。如果编辑器在 YAML 模式下打开,请使用代码上方的切换按钮切换到 Visual 模式。如果单击 workflow source,将会看到 workflow 是由推送到 master 分支触发的。您可以添加其他触发器。CodeCatalyst 支持在 push 或 pull request 时触发。此外,您可以触发多个分支,包括通配符(例如“release-.*”)。 最后,您可以通过只针对存储库中某些文件的更改(例如“src/.*”)来触发。

现在,让我们看一下 BackendTest action。这是一个构建测试 action。在“Configure”选项卡上,您可以看到将在构建期间执行的 shell 命令。示例中代码的是使用 Java 编写的。在这里,首先执行 mvn compile -p 命令编译代码,然后执行 mvn verify 命令构建项目并运行所有的测试用例,最后执行 npx junit-merge 命令合并测试报告。

接下来,切换到“Outputs”选项卡,我看到 CodeCatalyst 已配置自动为 junit 和其他测试框架生成的测试报告。此外,这里定义了最低单元测试通过率为 60%,行覆盖率为 50%,分支覆盖率为 30%。

最后,让我们检查一下 BackendCDKDeploy action。请注意,到目前为止,您查看的所有 actions 都包含一系列要在其配置中运行的命令。虽然这些 actions 非常灵活,但 CodeCatalyst 还支持专门部署的 action。cdk-deploy action 就是一个例子。顾名思义,此 action 将部署 Cloud Development Kit (CDK)  资源。您也可以在构建 actions 中从 shell 命令调用 cdk deploy。但是,使用专门的部署 action 更容易。CodeCatalyst 支持由 亚马逊云科技和第三方开发的大量的 actions。单击屏幕左上角的 + 号以查看一些示例。 此外,CodeCatalyst 支持 GitHub actions,我们将在后续的文章中专门介绍。

清理

验证测试完毕后,您应删除已部署的资源,以免继续产生费用(有关更多详细信息,请参阅定价页)。首先,删除 CDK 关联的 亚马逊云科技账户中的 CloudFormation 控制台部署的两个堆栈,堆栈将名称类似 xxxAppBackendStack-xxx。其次,导航到“项目设置”并单击“删除项目”按钮,从 CodeCatalyst 中删除项目。

结论

在这篇文章中,您了解了如何通过 CodeCatalyst 和 JIRA 管理任务和追踪相关任务的代码变更,并通过 CodeCatalyst 将可组合的预构建 actions 配置到 CI/CD 流水线中来帮助您快速组装自动化 workflow。该 workflow 包含了构建、测试和部署后端应用程序的 actions。

本篇作者

叶鹏勇

亚马逊云科技解决方案架构师,负责容器以及 DevOps 相关领域的方案的架构设计工作。在容器,微服务,SRE 相关领域有多年的实战经验。

蔡勃

亚马逊云科技资深解决方案架构师,有丰富的大型软件研发及企业数字化转型项目经验。