amazon-web-services - 如何使用 aws codebuild 提高 jenkins 性能以构建大型 Java 工件和 docker 映像?
问题描述
我们的 Jenkins 是在 aws 中设置的,我们没有设法使用奴隶。由于平台很大,并且一些工件包含许多其他工件,因此当多个开发人员提交到不同的存储库并被迫同时运行多个作业时,我们的 jenkins 就会达到极限。
目的是: - 留在 jenkins,因为我们的流程是基于它记录的,并且我们使用许多插件,例如测试结果摘要和 github 集成 - 在 codebuild 中运行作业并在 jenkins 中获得反馈以提高性能
有这方面的最佳实践吗?
解决方案
我们执行了以下步骤来在 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
推荐阅读
- python - 获取 Python Decimal 的精确十进制字符串表示?
- python - 从数据创建一个列表以包含多个条目,然后遍历列表以返回一个字符串
- javascript - 如何在Javascript中强制清除间隔
- c - 函数中动态分配的结构
- machine-learning - 为什么要在机器学习中连接特征?
- jquery - 单击按钮并通过 jquery 更改为不同的网页后,用图像填充 css 网格
- c - 如何做一个ANSI颜色代码
- c# - 无法使用另一个 .exe 启动 .exe
- php - 使用 supervisord 运行多个 php 实例,但运行任务的一半
- python - 如何在不删除先前对象的情况下更新 Django 中的多对多字段?