保姆级教程:在Ubuntu 20.04上用Bamboo 8.0和Docker搞定Java项目CI/CD

张开发
2026/4/21 17:05:57 15 分钟阅读

分享文章

保姆级教程:在Ubuntu 20.04上用Bamboo 8.0和Docker搞定Java项目CI/CD
从零构建Java项目CI/CD流水线Bamboo 8.0与Docker深度实践指南当你面对一个需要频繁迭代的Java项目时手动构建、测试和部署的效率瓶颈会越来越明显。想象一下这样的场景每次代码提交后系统自动完成编译、测试、打包甚至部署到测试环境——这就是CI/CD的魅力所在。本文将带你用Bamboo和Docker在Ubuntu 20.04上搭建一套完整的自动化构建流水线即使你是第一次接触这些工具也能跟着这份指南一步步实现。1. 环境准备与工具安装在开始之前我们需要确保服务器具备基础运行环境。Ubuntu 20.04 LTS是个稳妥的选择它提供了长期支持且对各类开发工具兼容性良好。1.1 Java开发环境配置虽然我们的项目最终会运行在容器中但Bamboo服务本身需要Java环境。这里推荐安装OpenJDK 8作为Bamboo的运行环境sudo apt update sudo apt install -y openjdk-8-jdk验证安装是否成功java -version提示如果系统中需要同时管理多个Java版本可以考虑使用update-alternatives工具进行版本切换。1.2 Bamboo 8.0安装与配置Bamboo是Atlassian公司推出的CI/CD工具以其与Jira、Bitbucket等产品的深度集成而闻名。以下是安装步骤下载Bamboo 8.0的安装包wget https://product-downloads.atlassian.com/software/bamboo/downloads/atlassian-bamboo-8.0.0.tar.gz解压到指定目录sudo tar -zxvf atlassian-bamboo-8.0.0.tar.gz -C /opt创建Bamboo数据目录并设置权限sudo mkdir /var/bamboo-home sudo chown -R $(whoami):$(whoami) /var/bamboo-home配置Bamboo主目录 编辑/opt/atlassian-bamboo-8.0.0/atlassian-bamboo/WEB-INF/classes/bamboo-init.properties文件添加bamboo.home/var/bamboo-home启动Bamboo服务/opt/atlassian-bamboo-8.0.0/bin/start-bamboo.sh启动后通过浏览器访问http://服务器IP:8085完成初始配置。首次访问时会要求输入许可证密钥可以选择申请试用许可证。2. Docker环境搭建与优化容器化技术是现代化CI/CD流水线的核心组件它能够确保构建环境的一致性和可重复性。2.1 Docker引擎安装Ubuntu 20.04上安装Docker CE的推荐方式sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo deb [archamd64 signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io验证Docker是否安装成功sudo docker run hello-world2.2 Docker配置调优为了提高构建效率建议对Docker进行以下优化配置国内镜像加速器 创建或修改/etc/docker/daemon.json{ registry-mirrors: [https://registry.docker-cn.com], log-driver: json-file, log-opts: { max-size: 100m, max-file: 3 } }调整Docker存储驱动根据实际文件系统选择sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json -EOF { storage-driver: overlay2 } EOF应用配置并重启Dockersudo systemctl daemon-reload sudo systemctl restart docker3. 定制项目构建镜像标准Ubuntu镜像通常不包含Java项目构建所需的全部工具我们需要定制一个包含JDK和Gradle的专用镜像。3.1 准备构建材料创建一个专用目录存放构建材料mkdir -p ~/docker-build/java-builder cd ~/docker-build/java-builder下载所需软件包JDK 11: Oracle官网Gradle: Gradle官网3.2 编写Dockerfile以下是一个优化过的Dockerfile示例包含了缓存清理和分层优化FROM ubuntu:20.04 # 设置时区避免交互式提示 ENV DEBIAN_FRONTENDnoninteractive RUN apt-get update \ apt-get install -y --no-install-recommends \ ca-certificates \ curl \ unzip \ rm -rf /var/lib/apt/lists/* # 安装JDK 11 COPY jdk-11.0.12_linux-x64_bin.tar.gz /tmp/ RUN tar -xzf /tmp/jdk-11.0.12_linux-x64_bin.tar.gz -C /opt \ rm /tmp/jdk-11.0.12_linux-x64_bin.tar.gz # 安装Gradle COPY gradle-7.1.1-bin.zip /tmp/ RUN unzip /tmp/gradle-7.1.1-bin.zip -d /opt \ rm /tmp/gradle-7.1.1-bin.zip # 设置环境变量 ENV JAVA_HOME/opt/jdk-11.0.12 ENV GRADLE_HOME/opt/gradle-7.1.1 ENV PATH$PATH:$JAVA_HOME/bin:$GRADLE_HOME/bin # 创建工作目录 RUN mkdir /workspace WORKDIR /workspace3.3 构建并测试镜像执行构建命令docker build -t java-gradle-builder:1.0 .构建完成后可以运行一个临时容器测试环境docker run -it --rm java-gradle-builder:1.0 bash -c java -version gradle --version4. 代码仓库配置与连接Bamboo支持多种版本控制系统这里以Bitbucket为例说明如何配置代码仓库连接。4.1 项目仓库准备确保你的Java项目已经推送到Bitbucket仓库。如果是新项目可以按以下步骤初始化git init git add . git commit -m Initial commit git remote add origin 你的Bitbucket仓库URL git push -u origin master4.2 Bamboo仓库配置登录Bamboo控制台导航到Repositories页面点击Add repository按钮选择Bitbucket Cloud填写仓库URL和认证信息测试连接确保配置正确注意如果使用私有仓库需要提供具有读取权限的账户凭证。建议使用应用密码而非主账户密码。5. 创建Bamboo构建计划构建计划(Plan)是Bamboo中CI/CD流程的核心组织单元它定义了从代码检出到构建完成的完整流程。5.1 新建项目与计划在Bamboo控制台点击Create按钮选择Create a new plan填写项目信息Project name: 你的项目名称Plan name: 构建计划名称如CI BuildPlan key: 自动生成的唯一标识符关联之前配置的代码仓库设置触发方式手动或自动轮询5.2 配置构建任务(Job)一个典型的Java项目构建Job包含以下任务(Tasks)Source Code Checkout从版本控制系统检出代码Docker Configuration指定使用的构建镜像Image: java-gradle-builder:1.0如果需要从私有仓库拉取需配置认证信息Script执行构建命令chmod x gradlew ./gradlew clean build5.3 配置构建触发器为了实现真正的持续集成我们需要配置自动构建触发器在Plan配置页面选择Triggers添加Polling trigger设置轮询间隔如每2分钟检查一次变更指定触发的分支通常是master/main6. 高级配置与优化基础流水线搭建完成后我们可以通过一些高级配置提升构建效率和可靠性。6.1 构建缓存策略Gradle构建可以利用缓存显著提升后续构建速度。配置方法在Dockerfile中添加缓存目录卷VOLUME [/root/.gradle/caches]在Bamboo Job配置中挂载主机目录作为缓存volumes: - /data/gradle-cache:/root/.gradle/caches6.2 多阶段构建支持对于复杂项目可以配置多个阶段(Stages)的构建流程Build Stage编译代码、运行单元测试Test Stage运行集成测试Package Stage生成可部署的制品每个阶段可以配置不同的环境和执行条件。6.3 构建通知配置及时获取构建状态对于快速响应问题至关重要在Plan配置页面选择Notifications添加邮件通知规则成功/失败时发送通知指定收件人列表可选集成Slack等即时通讯工具7. 常见问题排查即使按照指南操作实践中仍可能遇到各种问题。以下是几个常见问题的解决方案。7.1 权限相关问题症状构建过程中出现Permission denied错误解决方案确保Docker容器以适当用户运行对于需要执行权限的脚本如gradlewchmod x gradlew检查挂载卷的权限设置7.2 网络连接问题症状依赖下载失败或超时解决方案在Dockerfile中配置国内镜像源对于Gradle配置init.gradle使用国内仓库allprojects { repositories { maven { url https://maven.aliyun.com/repository/public } } }7.3 资源不足问题症状构建过程中容器被杀死或超时解决方案增加Bamboo Agent的内存分配调整Docker容器的资源限制docker: memory: 2g cpu-count: 2对于大型项目考虑拆分多阶段构建8. 生产环境建议当你的CI/CD流水线准备投入生产环境时还需要考虑以下方面安全性加固使用专用账户而非root运行服务定期更新基础镜像和安全补丁限制构建容器的权限高可用性配置多个Bamboo Agent实现负载均衡设置构建队列避免资源争用监控与日志集中收集和分析构建日志设置构建指标监控成功率、耗时等备份策略定期备份Bamboo主目录版本化Dockerfile和构建脚本这套基于Bamboo和Docker的CI/CD方案已经在多个Java项目中得到验证从中小型应用到复杂的微服务架构都能良好支持。关键在于根据项目特点调整构建策略和资源配置逐步建立起适合团队的高效交付流程。

更多文章