macOS 上通过 Jenkins 实现 Android 项目的自动化构建

535 阅读2分钟

在 Android 项目开发中,自动化构建和打包是提高效率的重要手段。本文将介绍如何在 macOS 上通过 Jenkins 实现 Android 项目的自动化构建,并在构建完成后通过钉钉发送通知,其中包含扫码下载 APK 的二维码。

一、环境准备

在开始 Jenkins 的安装和配置之前,我们需要准备好必要的软件环境。以下是详细步骤:

1.1 安装 Homebrew

首先,安装 macOS 包管理工具 Homebrew,这可以帮助我们安装 Jenkins 和其他依赖工具:

bash
复制代码
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

1.2 安装 Java

Jenkins 运行需要 Java 环境,使用以下命令安装 Java:

bash
复制代码
brew install openjdk@11

配置 Java 环境变量:

bash
复制代码
sudo ln -sfn /usr/local/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
export PATH="/usr/local/opt/openjdk@11/bin:$PATH"
export JAVA_HOME=$(/usr/libexec/java_home -v 11)

验证安装:

bash
复制代码
java -version

1.3 安装 Android SDK

使用 Homebrew 安装 Android SDK 以支持 Android 项目:

bash
复制代码
brew install --cask android-sdk

配置 Android SDK 环境变量:

bash
复制代码
export ANDROID_HOME=/usr/local/share/android-sdk
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/platform-tools

1.4 安装 Gradle

Android 项目构建通常使用 Gradle,使用以下命令安装:

bash
复制代码
brew install gradle

验证安装:

bash
复制代码
gradle -v

二、Jenkins 安装与配置

2.1 安装 Jenkins

使用 Homebrew 安装 Jenkins:

bash
复制代码
brew install jenkins-lts

启动 Jenkins 服务:

bash
复制代码
brew services start jenkins-lts

打开浏览器,访问 Jenkins 控制台:http://localhost:8080

2.2 初次登录 Jenkins

首次登录 Jenkins 时,需要输入管理员密码。该密码存储在以下文件中:

bash
复制代码
cat /Users/$(whoami)/.jenkins/secrets/initialAdminPassword

按提示完成初次配置。

三、安装必要插件

在 Jenkins 控制台,点击 "Manage Jenkins" > "Manage Plugins" > "Available",搜索并安装以下插件:

  • Android Emulator Plugin: 用于管理 Android 模拟器。
  • Gradle Plugin: 用于执行 Gradle 构建任务。
  • Git Plugin: 用于从 Git 仓库拉取代码。
  • DingTalk Plugin: 用于发送钉钉通知。

四、创建 Jenkins 构建任务

4.1 创建任务

在 Jenkins 首页,点击 "New Item",输入任务名称,选择 "Freestyle project" 类型,点击 "OK" 进入任务配置页面。

4.2 配置源码管理

在 "Source Code Management" 部分,选择 "Git",并填写项目的 Git 仓库 URL 和凭据。

4.3 配置构建触发器

在 "Build Triggers" 部分,选择触发器方式,例如 "Poll SCM" 或 "Build periodically"。

4.4 配置构建环境

在 "Build Environment" 部分,选择 "Use Gradle Wrapper" 或者直接指定 Gradle 命令,并选择 Gradle 版本。

4.5 配置构建步骤

在 "Build" 部分,选择 "Invoke Gradle script",在 "Tasks" 中输入打包命令:

bash
复制代码
clean assembleRelease

五、生成并发送二维码下载链接

为了方便用户扫码下载构建生成的 APK 文件,我们需要生成下载链接的二维码并将其包含在钉钉通知中。

5.1 生成二维码

首先,通过 Homebrew 安装 qrencode 工具:

bash
复制代码
brew install qrencode

然后在 Jenkins 构建脚本中生成二维码,并保存为图片文件。例如:

groovy
复制代码
task generateQrCode(type: Exec) {
    def apkDownloadUrl = "http://yourserver.com/downloads/app-release.apk"
    def qrCodeFilePath = "${buildDir}/outputs/apk/release/qrcode.png"
    
    commandLine 'qrencode', '-o', qrCodeFilePath, apkDownloadUrl
}

5.2 上传二维码图片

生成二维码图片后,将其上传到服务器以供外部访问。你可以使用 curl 命令将图片上传:

groovy
复制代码
task uploadQrCode(type: Exec) {
    def qrCodeFilePath = "${buildDir}/outputs/apk/release/qrcode.png"
    def uploadUrl = "http://yourserver.com/upload"
    
    commandLine 'curl', '-F', "file=@${qrCodeFilePath}", uploadUrl
}

5.3 在钉钉通知中包含二维码

在钉钉通知中,我们可以使用 Markdown 格式发送消息,将生成的二维码图片嵌入到通知内容中:

groovy
复制代码
task notifyDingTalk {
    doLast {
        def buildStatus = project.hasProperty('buildStatus') ? project.buildStatus : 'UNKNOWN'
        def message = """
        ## Jenkins 构建结果: ${buildStatus}
        - **构建编号**: #${env.BUILD_NUMBER}
        - **项目**: ${env.JOB_NAME}
        - **详情**: [点击查看](${env.BUILD_URL})
        - **APK 下载链接**: [点击下载](${apkDownloadUrl})
        
        ![二维码](http://yourserver.com/downloads/qrcode.png)
        """
        
        def webhookUrl = "https://oapi.dingtalk.com/robot/send?access_token=YOUR_ACCESS_TOKEN"
        def payload = [
            "msgtype": "markdown",
            "markdown": [
                "title": "Jenkins 构建通知",
                "text": message
            ]
        ]

        def process = ['curl', '-X', 'POST', webhookUrl, '-H', 'Content-Type: application/json', '-d', new groovy.json.JsonBuilder(payload).toString()].execute()
        process.waitFor()
    }
}

六、任务串联与执行

最后,将各个任务串联起来,使得在生成 APK 后,自动生成二维码、上传二维码,并发送钉钉通知。

groovy
复制代码
buildApk.finalizedBy(generateQrCode, uploadQrCode, notifyDingTalk)

总结

本文详细介绍了在 macOS 上如何使用 Jenkins 实现 Android 项目的自动化打包,并通过钉钉通知用户扫码下载生成的 APK。通过自动化构建、二维码生成和消息推送,能够大大提高开发和测试的效率。希望这些步骤能帮助你在实际项目中顺利实现 CI/CD 流程。