Jenkins与GitLab CI实现Android持续集成与交付:从构建到发布的完整指南(1):前言

Jenkins与GitLab CI实现Android持续集成与交付:从构建到发布的完整指南(1):前言

本文是「Jenkins与GitLab CI实现Android持续集成与交付:从构建到发布的完整指南」系列的第 1 篇,共 8 篇。

前言

在当今快速迭代的移动应用开发环境中,持续集成(Continuous Integration,CI)和持续交付(Continuous Delivery,CD)已成为现代软件开发流程中不可或缺的一部分。对于 Android 开发团队而言,建立一套高效、可靠的自动化构建、测试和发布系统,能够显著提高开发效率、减少人为错误并加速产品交付周期。

本文将全面探讨如何使用 Jenkins 和 GitLab CI 这两种主流的 CI/CD 工具来实现 Android 项目的持续集成与交付。我们将从基础概念讲起,逐步深入到高级配置和优化技巧,涵盖构建自动化、测试执行、代码质量检查、报告生成以及应用发布等完整流程。

无论您是刚开始接触 CI/CD 的新手,还是希望优化现有流程的经验丰富的开发者,本文都将为您提供实用的指导和深入的见解。我们将通过详细的配置示例、代码片段和最佳实践,帮助您构建一个健壮的 Android CI/CD 管道。

第一章:持续集成基础与工具选择

1.1 持续集成的核心概念

持续集成是一种软件开发实践,要求开发人员频繁地将代码变更集成到共享的主干分支中。每次集成都通过自动化构建和测试来验证,以便尽早发现集成错误。

持续集成的核心价值

  • 快速反馈:开发者提交代码后立即获得构建和测试结果反馈;
  • 早期发现问题:在开发周期早期发现集成问题和缺陷;
  • 减少集成风险:避免长期分支导致的复杂合并冲突;
  • 可部署的软件:始终保持一个可部署的软件版本。

对于 Android 开发而言,持续集成特别重要,因为:

  • Android 应用需要构建成 APK 或 AAB 文件才能运行;
  • 需要在多种设备和 API 级别上进行测试;
  • 发布流程复杂,涉及签名、渠道打包等步骤。

1.2 Jenkins 与 GitLab CI 的比较

在选择 CI/CD 工具时,Jenkins 和 GitLab CI 是两个最受欢迎的选择。下面我们对它们进行详细比较:

特性JenkinsGitLab CI
架构主从架构,可分布式执行基于 Runner,可分布式执行
安装与维护需要独立服务器,维护成本较高与 GitLab 集成,维护简单
配置方式基于 Web UI 或 Groovy DSL基于 YAML 文件(.gitlab-ci.yml)
扩展性插件生态系统丰富,高度可扩展功能较为集中,扩展性适中
集成可与多种工具集成,但需要配置与 GitLab 深度集成,其他工具需配置
学习曲线较陡峭相对平缓
社区支持非常活跃,文档丰富活跃,文档良好
适用场景复杂项目,需要高度定制化GitLab 用户,希望简单 CI/CD 解决方案

1.3 工具选择建议

基于以上比较,我们可以给出以下建议:

选择 Jenkins 时

  • 项目非常复杂,需要高度定制化的构建流程;
  • 已经使用 Jenkins 并对其熟悉;
  • 需要与多种不同的工具和服务集成;
  • 项目不托管在 GitLab 上。

选择 GitLab CI 时

  • 代码已经托管在 GitLab 上;
  • 希望配置简单、维护成本低;
  • 项目相对标准,不需要高度定制化;
  • 团队规模较小,资源有限。

在实际工作中,两种工具也可以结合使用,发挥各自的优势。例如,可以使用 GitLab CI 处理代码提交后的初步构建和测试,而使用 Jenkins 进行更复杂的发布流程和后期测试。

第二章:环境准备与基础配置

2.1 硬件与软件需求

在开始配置 CI/CD 流程前,需要确保有适当的环境。以下是运行 Android CI/CD 的基本要求:

硬件需求

  • CPU:至少 4 核(推荐 8 核或更高,特别是并行运行多个构建时);
  • 内存:至少 8GB(推荐 16GB,大型项目可能需要 32GB);
  • 存储:至少 100GB SSD(Android 构建会产生大量缓存文件);
  • 网络:稳定高速的网络连接(用于下载依赖和上传构建产物)。

软件需求

  • 操作系统:Linux(推荐 Ubuntu LTS 或 CentOS),macOS 或 Windows 也可;
  • Java 开发工具包(JDK):Android 开发需要 JDK 8 或 11,最新建议使用 17(推荐 AdoptOpenJDK);
  • Android SDK:最新稳定版,包含必要的平台工具和构建工具;
  • Docker(可选):用于容器化构建环境,确保一致性;
  • 版本控制系统:Git。

2.2 Jenkins 安装与初始配置

2.2.1 Jenkins 安装

在 Ubuntu 系统上安装 Jenkins 的步骤:

# 1. 添加Jenkins仓库密钥
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -

# 2. 添加Jenkins仓库到源列表
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'

# 3. 更新包索引
sudo apt-get update

# 4. 安装Jenkins
sudo apt-get install jenkins

# 5. 启动Jenkins服务
sudo systemctl start jenkins

# 6. 设置Jenkins开机自启
sudo systemctl enable jenkins

安装完成后,Jenkins 将在默认的 8080 端口运行。通过浏览器访问 http://your-server-ip:8080,按照初始设置向导完成配置。

2.2.2 初始安全配置

从日志中获取初始管理员密码:

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

在 Web 界面输入密码后,选择「Install suggested plugins」安装推荐插件。

  • 创建第一个管理员用户;
  • 配置实例 URL,通常保持默认即可。

2.2.3 安装必要插件

对于 Android CI/CD,需要安装以下关键插件:

  • Android Emulator Plugin:用于管理 Android 模拟器;
  • Git Plugin:Git 集成支持;
  • Gradle Plugin:Gradle 构建支持;
  • Pipeline:定义构建管道;
  • HTML Publisher:发布 HTML 格式的报告;
  • JUnit:处理 JUnit 测试结果;
  • JaCoCo:代码覆盖率支持;
  • SonarQube Scanner(可选):代码质量分析;
  • Google Play Android Publisher(可选):发布应用到 Google Play。

安装插件步骤:

  1. 进入「Manage Jenkins」>「Manage Plugins」;
  2. 选择「Available」标签页;
  3. 搜索上述插件并勾选;
  4. 点击「Install without restart」或「Download now and install after restart」。

2.2.4 配置全局工具

在「Manage Jenkins」>「Global Tool Configuration」中配置:

  • JDK
    • 名称:jdk17;
    • JAVA_HOME:/usr/lib/jvm/java-17-openjdk-amd64
  • Git
    • 名称:Default;
    • Path to Git executable:git
  • Gradle
    • 名称:gradle-8.4;
    • 勾选「Install automatically」;
    • 选择版本:8.4;
    • 其他选项保持默认。

2.3 GitLab CI Runner安装与配置

2.3.1 安装GitLab Runner

在Ubuntu系统上安装GitLab Runner:

# 1. 添加官方仓库
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash

# 2. 安装最新版GitLab Runner
sudo apt-get install gitlab-runner

# 3. 验证安装
gitlab-runner --version

2.3.2 注册Runner

在GitLab项目中,进入”Settings” > “CI/CD” > “Runners”

找到”Set up a specific Runner manually”部分的URL和token

在服务器上运行注册命令:

sudo gitlab-runner register

按照提示输入:

GitLab实例URL:https://gitlab.xxx-host.com/

注册token:从GitLab界面获取

描述:android-runner

标签:android, docker(可选)

执行器:docker(推荐)或shell

如果选择docker执行器,还需要指定默认的docker镜像,如docker:stable

2.3.3 配置Runner

编辑Runner配置文件(通常在/etc/gitlab-runner/config.toml),确保有以下配置:

concurrent = 4
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "android-runner"
  url = "https://gitlab.com/"
  token = "YOUR_TOKEN"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "alpine:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]

2.3.4 安装Docker(如果使用Docker执行器)

# 1. 安装必要依赖
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

# 2. 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# 3. 添加Docker仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# 4. 更新包索引并安装Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# 5. 将当前用户添加到docker组(避免每次使用sudo)
sudo usermod -aG docker $USER
sudo usermod -aG docker gitlab-runner

# 6. 重启docker服务
sudo systemctl restart docker

2.4 Android SDK配置

无论使用Jenkins还是GitLab CI,都需要正确配置Android SDK。

2.4.1 安装Android命令行工具

# 1. 创建Android SDK目录
mkdir -p ~/android-sdk/cmdline-tools
cd ~/android-sdk/cmdline-tools

# 2. 下载命令行工具(版本可能更新,请检查最新)
wget https://dl.google.com/android/repository/commandlinetools-linux-6858069_latest.zip
unzip commandlinetools-linux-6858069_latest.zip
mv cmdline-tools latest

# 3. 添加环境变量
echo 'export ANDROID_HOME=$HOME/android-sdk' >> ~/.bashrc
echo 'export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools' >> ~/.bashrc
source ~/.bashrc

# 4. 接受许可证
yes | sdkmanager --licenses

# 5. 安装基本工具和平台
sdkmanager "platform-tools" "platforms;android-30" "build-tools;30.0.3"

2.4.2 在Jenkins中配置Android SDK

进入「Manage Jenkins」>「Global Tool Configuration」:

  • 找到「Android SDK」部分;
  • 点击「Add Android SDK」按钮;
  • 配置如下:
    • 名称:android-sdk-latest;
    • 取消勾选「Install automatically」;
    • Android SDK home:/home/jenkins/android-sdk(根据实际路径调整)。

2.4.3 在GitLab Runner中配置Android SDK

如果使用Docker执行器,建议创建一个自定义Docker镜像包含Android SDK:

# Dockerfile.android
FROM openjdk:17-jdk

# 安装基本工具
RUN apt-get update && apt-get install -y \
    git \
    wget \
    unzip \
    && rm -rf /var/lib/apt/lists/*

# 设置环境变量
ENV ANDROID_HOME /opt/android-sdk
ENV PATH ${PATH}:${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/platform-tools

# 下载并安装Android SDK
RUN mkdir -p ${ANDROID_HOME}/cmdline-tools && \
    cd ${ANDROID_HOME}/cmdline-tools && \
    wget https://dl.google.com/android/repository/commandlinetools-linux-6858069_latest.zip -O cmdline-tools.zip && \
    unzip cmdline-tools.zip && \
    mv cmdline-tools latest && \
    rm cmdline-tools.zip

# 接受许可证并安装组件
RUN yes | sdkmanager --licenses && \
    sdkmanager "platform-tools" "platforms;android-30" "build-tools;30.0.3"

WORKDIR /app

构建并推送镜像:

docker build -t android-ci-image -f Dockerfile.android .
docker tag android-ci-image your-registry/android-ci-image:latest
docker push your-registry/android-ci-image:latest

然后在.gitlab-ci.yml中使用这个镜像:

image: your-registry/android-ci-image:latest

下一篇我们将探讨「基础构建配置」,敬请关注本系列。

「Jenkins与GitLab CI实现Android持续集成与交付:从构建到发布的完整指南」系列目录

  1. 前言(本文)
  2. 基础构建配置
  3. 自动化测试集成
  4. 代码质量检查
  5. 自动化发布与部署
  6. 高级主题与最佳实践
  7. 2.1 Jenkins多分支Pipeline
  8. 2.2 GitLab CI企业级配置