首页 > 解决方案 > 如何使用 aws codebuild 提高 jenkins 性能以构建大型 Java 工件和 docker 映像?

问题描述

我们的 Jenkins 是在 aws 中设置的,我们没有设法使用奴隶。由于平台很大,并且一些工件包含许多其他工件,因此当多个开发人员提交到不同的存储库并被迫同时运行多个作业时,我们的 jenkins 就会达到极限。

目的是: - 留在 jenkins,因为我们的流程是基于它记录的,并且我们使用许多插件,例如测试结果摘要和 github 集成 - 在 codebuild 中运行作业并在 jenkins 中获得反馈以提高性能

有这方面的最佳实践吗?

标签: amazon-web-servicesdockerjenkinsaws-codebuild

解决方案


我们执行了以下步骤来在 jenkins 之外构建大型工件: - 安装 jenkins codebuild 插件 - 创建 jenkins 管道 - 在 s3 中存储用于 maven 构建的 settings.xml - 在系统管理器参数中存储访问权限以在 codebuild 和 maven 中使用

  • 创建具有必要权限和以下功能的 codebuild 项目: -- 从 s3 获取 settings.xml -- 使用必要的访问数据运行 maven -- 将测试结果存储在 s3

  • 使用以下功能创建 jenkinsfile: -- 获取 commitID 并使用它运行 codebuild -- 从 s3 获取生成的测试结果文件并将其传递给 jenkins -- 从 s3 删除生成的文件 -- 将文件传递给 jenkins 以显示测试结果

通过这种方法,我们设法将运行时间减少到 5 分钟。

我们面临的下一个挑战是在 Java 微服务之上构建和 Angular 应用程序,创建一个 docker 映像并将其推送到不同的环境。这项工作在詹金斯运行了大约 25 分钟。

我们执行了以下步骤在 jenkins 之外构建 docker 映像: - 安装 jenkins codebuild 插件 - 创建 jenkins 管道 - 在 s3 中存储用于 maven 构建的 settings.xml - 在系统管理器参数中存储访问权限以在 codebuild 和 maven 中使用

  • 创建具有必要权限和以下功能的 codebuild 项目: -- 从 s3 获取 settings.xml -- 在所有环境中登录 ecr -- 构建 angular 应用程序 -- 构建 java 应用程序 -- 复制 docker build 所需的文件 -- 构建docker image -- 推送到所有环境

  • 使用以下功能创建 jenkinsfile: -- 获取两个存储库的分支名称以从中构建 docker 映像 -- 获取分支最新的 commitID -- 使用两个 commitID 调用 codebuild 项目(请注意,主存储库将需要 buildspec)

通过这种方法,我们设法将运行时间减少到 5 分钟。

示例代码在:https ://github.com/felipeloha/samples/tree/master/jenkins-codebuild


推荐阅读