保姆级教程:在Ubuntu 20.04上用Bamboo 8.0 + Docker搞定Java项目CI/CD
从零构建基于Bamboo和Docker的Java项目CI/CD流水线实战指南
在当今快节奏的软件开发环境中,持续集成和持续交付(CI/CD)已成为现代DevOps实践的核心。对于Java开发者而言,如何快速搭建一套稳定、高效的自动化构建与部署流水线,是提升团队交付效率的关键。本文将手把手带你完成从Ubuntu服务器环境准备到Bamboo与Docker集成,最终实现Java项目自动化构建的全过程。
1. 环境准备与基础配置
1.1 Ubuntu 20.04服务器初始化
在开始安装Bamboo之前,我们需要确保服务器环境满足基本要求。以下是一组推荐的初始化命令:
# 更新系统包索引 sudo apt-get update && sudo apt-get upgrade -y # 安装常用工具 sudo apt-get install -y curl wget unzip zip vim net-tools # 创建软件安装目录 sudo mkdir -p /usr/local/software/{java,bamboo}对于生产环境,建议配置swap分区以提高系统稳定性:
# 检查现有swap free -h # 创建4GB swap文件 sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile # 永久生效 echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab1.2 JDK环境配置
Bamboo 8.0需要JDK 8或更高版本支持。以下是安装OpenJDK 11的步骤:
# 安装OpenJDK 11 sudo apt-get install -y openjdk-11-jdk # 验证安装 java -version javac -version # 设置JAVA_HOME环境变量 echo 'export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64' | sudo tee -a /etc/profile echo 'export PATH=$JAVA_HOME/bin:$PATH' | sudo tee -a /etc/profile source /etc/profile2. Bamboo 8.0安装与配置
2.1 下载与安装Bamboo
从Atlassian官网获取Bamboo 8.0的安装包:
# 下载Bamboo wget https://www.atlassian.com/software/bamboo/downloads/binary/atlassian-bamboo-8.0.0.tar.gz # 解压到安装目录 sudo tar -zxvf atlassian-bamboo-8.0.0.tar.gz -C /usr/local/software/bamboo/ # 设置Bamboo主目录 echo 'bamboo.home=/usr/local/software/bamboo-home' | sudo tee -a /usr/local/software/bamboo/atlassian-bamboo/WEB-INF/classes/bamboo-init.properties2.2 启动与初始化配置
启动Bamboo服务:
cd /usr/local/software/bamboo/atlassian-bamboo-8.0.0 ./bin/start-bamboo.sh访问Bamboo控制台(默认端口8085)完成初始配置:
- 选择"Express"快速安装模式
- 设置管理员账户信息
- 配置基础URL(建议使用域名而非IP)
- 完成许可证配置(可先选择试用)
提示:生产环境建议配置反向代理(如Nginx)并启用HTTPS,同时考虑使用MySQL等外部数据库替代默认的嵌入式数据库。
3. Docker环境搭建与优化
3.1 Docker引擎安装
# 安装依赖 sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common # 添加Docker官方GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # 添加Docker仓库 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" # 安装Docker CE sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io # 验证安装 sudo docker run hello-world3.2 Docker配置优化
调整Docker守护进程配置以提高性能:
# 创建或修改daemon.json sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://registry.docker-cn.com"], "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "3" }, "storage-driver": "overlay2" } EOF # 重启Docker服务 sudo systemctl restart docker配置Docker用户组,避免频繁使用sudo:
sudo groupadd docker sudo usermod -aG docker $USER newgrp docker4. 构建Java项目专用Docker镜像
4.1 准备基础环境
创建项目目录结构:
mkdir -p ~/java-project-docker/{jdk,gradle} cd ~/java-project-docker下载必要的软件包:
- JDK 11: Oracle官网
- Gradle: Gradle官网
4.2 编写Dockerfile
# Dockerfile FROM ubuntu:20.04 # 设置时区 ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 安装基础工具 RUN apt-get update && \ apt-get install -y --no-install-recommends \ curl \ unzip \ zip \ vim \ git \ && rm -rf /var/lib/apt/lists/* # 添加JDK COPY jdk/jdk-11.0.12_linux-x64_bin.tar.gz /tmp/ RUN tar -zxvf /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/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 /workspace # 验证安装 RUN java -version && gradle --version4.3 构建与测试镜像
docker build -t java-gradle-builder:1.0 . # 测试镜像 docker run -it --rm java-gradle-builder:1.0 bash5. Bamboo项目配置与自动化构建
5.1 创建Bamboo项目
- 登录Bamboo控制台
- 导航至"Create" > "Create project"
- 填写项目信息:
- 项目名称:Java CI/CD Pipeline
- 项目键:JAVACI
- 项目描述:Java项目自动化构建与部署流水线
5.2 配置代码仓库连接
- 创建新的Plan:
- Plan名称:Build and Deploy
- Plan描述:自动构建Java项目并生成Docker镜像
- 配置仓库连接:
- 选择Git/Bitbucket
- 输入仓库URL
- 配置认证信息(建议使用SSH密钥)
5.3 设置构建任务
在Job配置中添加以下关键Task:
- Source Code Checkout:自动拉取最新代码
- Docker Task:使用我们构建的java-gradle-builder镜像
- Script Task:执行构建命令
# 构建脚本示例 chmod +x gradlew ./gradlew clean build- Artifact Download:配置构建产物收集
- Docker Build:构建应用镜像(可选)
5.4 配置触发器
设置自动构建触发器:
- 轮询间隔:5分钟
- 分支监控:master, develop
- 构建条件:仅当代码变更时触发
6. 高级配置与优化技巧
6.1 构建缓存优化
在Dockerfile中添加Gradle缓存层:
# 在ENV定义后添加 ENV GRADLE_USER_HOME=/root/.gradle # 在WORKDIR前添加 RUN mkdir -p $GRADLE_USER_HOME VOLUME $GRADLE_USER_HOME6.2 多阶段构建支持
对于复杂项目,可考虑多阶段Docker构建:
# 第一阶段:构建 FROM java-gradle-builder:1.0 as builder COPY . /workspace RUN ./gradlew build # 第二阶段:运行时 FROM openjdk:11-jre-slim COPY --from=builder /workspace/build/libs/*.jar /app/app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/app/app.jar"]6.3 Bamboo Agent配置
对于分布式构建环境,可配置多个Bamboo Agent:
# 在Agent服务器上 java -jar atlassian-bamboo-agent-installer.jar http://bamboo-server:8085/agentServer/7. 常见问题排查
7.1 构建失败诊断
检查构建日志的常见步骤:
- 确认Bamboo Agent有足够资源(CPU、内存)
- 验证网络连接(特别是到代码仓库和Docker Registry)
- 检查构建环境变量是否正确设置
7.2 性能优化建议
- 并行构建:配置Bamboo并行执行独立任务
- 缓存策略:利用Docker层缓存和Gradle缓存
- 资源限制:为Docker容器设置合理的CPU和内存限制
7.3 安全最佳实践
- 使用专用服务账户而非root运行Bamboo和Docker
- 定期更新所有组件(Bamboo、Docker、JDK等)
- 配置适当的防火墙规则和网络隔离
