目录
1)创建一个文件Dockerfile,文件无后缀,写入以下代码
[2)在Dockerfile文件所在目录执行(my-jenkins-android 未自定义镜像名称)](#2)在Dockerfile文件所在目录执行(my-jenkins-android 未自定义镜像名称))
[3)运行容器,注意替换 "/path/to/your/android-sdk"](#3)运行容器,注意替换 “/path/to/your/android-sdk”)
[1)创建项目 :点击New item 护着 Create a job](#1)创建项目 :点击New item 护着 Create a job)
4)配置ssh(如果使用ssh://的命令需要这一步,如果https://,则在地址中添加账号密码即可)
[① 在jenkins内部创建ssh目录](#① 在jenkins内部创建ssh目录)
[② copy本地config、pem、known_hosts文件到这里](#② copy本地config、pem、known_hosts文件到这里)
5)补全SDK中的cmdline-tools文件(如果存在此目录则跳过---下载的sdk为linux系统版本会包含此目录)
[3)去ngrok注册账号 uqngrok --- Log in](#3)去ngrok注册账号 uqngrok — Log in)
[4)下载一个令牌软件,需要用于以后的登录认证,例如 Google Authenticator,](#4)下载一个令牌软件,需要用于以后的登录认证,例如 Google Authenticator,)
[5)配置 ngrok token到本地](#5)配置 ngrok token到本地)
[6)启动 ngrok ,下面命令中的8080为你要暴漏的端口号,与jenkins 服务一致即可](#6)启动 ngrok ,下面命令中的8080为你要暴漏的端口号,与jenkins 服务一致即可)
简介:
通过在本地搭建jenkins服务,运行Android项目(参考 阿里摩天轮),这里为初级设置,旨在能让项目在jenkin运行起来
1、工具介绍:
AI工具必不可少,这是最好的搜索引擎,半个老师 ,配置过程中遇到的问题可以问它,但是需要辨别真伪,ai也不是全能的 ,可能会回复错误信息误导大家,但总体要比人脑强大DeepSeekChat with DeepSeek AI -- your intelligent assistant for coding, content creation, file reading, and more. Upload documents, engage in long-context conversations, and get expert help in AI, natural language processing, and beyond. | 深度求索(DeepSeek)助力编程代码开发、创意写作、文件处理等任务,支持文件上传及长文本对话,随时为您提供高效的AI支持。https://chat.deepseek.com/
jenkins:布置任务的平台
wsl:Windows Subsystem for Linux 一般系统自带,但是可能遇到系统内嵌的版本过低,需要升级的问题。jenkins会在这个子系统里
docker:管理jenkins 镜像、容器的工具
ngrok:内网穿透,让外网可以访问jenkins地址(若无需外网访问,或已经布置在了服务器,则不需要)
2、搭建jenkins
1)创建一个文件Dockerfile,文件无后缀,写入以下代码
FROM jenkins/jenkins:lts-jdk17
USER root
# 安装必要工具
RUN apt update && apt install -y wget unzip
# 设置Android SDK环境
ENV ANDROID_HOME=/opt/android-sdk
ENV PATH=$PATH:$ANDROID_HOME/cmdline-tools/bin:$ANDROID_HOME/platform-tools
# 下载Android命令行工具---代码标注1
RUN mkdir -p ${ANDROID_HOME} && cd ${ANDROID_HOME} && \
wget https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip && \
unzip commandlinetools-linux-*.zip && \
mv cmdline-tools latest && \
mkdir cmdline-tools && \
mv latest cmdline-tools/
# 接受许可证并安装组件---代码标注1
RUN yes | ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --licenses && \
${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager "platform-tools" "platforms;android-34" "build-tools;34.0.0"
USER jenkins
以上代码中,有两处写"代码标注1",如果不想在镜像内重复下载SDK,想使用本地存在的SDK,并且 容器opt/android-sdk 目录下存在文件夹"cmdline-tools",可以去除这两段代码,在后面的创建容器时,需要加挂载SDK的指令(见第三步:运行容器)
方案 | 优点 | 缺点 |
---|---|---|
镜像内安装 SDK | 自包含,无需宿主机依赖 | 镜像体积大,更新 SDK 需重建镜像 |
挂载本地 SDK | 节省空间,SDK 版本与宿主机一致 | 需管理宿主机 SDK 权限和路径 |
2)在Dockerfile文件所在目录执行(my-jenkins-android 未自定义镜像名称)
docker build -t my-jenkins-android .
3)运行容器,注意替换 "/path/to/your/android-sdk"
docker run -d \ --name jenkins \ -p 8080:8080 -p 50000:50000 \ -v /path/to/your/android-sdk:/opt/android-sdk \ # 挂载本地 SDK -v jenkins_data:/var/jenkins_home \ my-jenkins-android
这一步运行完成,会输出一个密钥,记录下来,登录jenkins页面的时候需要输入
如下图

可以在docker 客户端 的Containers中看到多出来的一个容器
4)访问jenkins
通过上面命令可以看到我们设置的端口号未8080,localhost:8080 来访问这个jenkins容器

输入前面创建容器时返回的密钥,如果忘记了 去/var/jenkins_home/secrets/initialAdminPassword这个下面找(docker中可以用UI 窗口 查看),这是容器挂载地址。
如果使用命令 先进入 容器
docker exec -u root -it android-jenkins /bin/bash
解释:
1.android-jenkins为容器名称
2.-u root 可不加,这个指令表示root 权限进入 容器
5)配置jenkins
1.下载插件---按推荐下载
2.创建管理账号
3.填写挂载的Url
4.登陆账号
到这一步jenkins已创建完成
3、创建任务及搭建编译Android必要配置
1)创建项目 :点击New item 护着 Create a job

2)起一个名字,这里我们选择流水线,Pipeline

3)写入脚本
①直接点击左侧Pipeline,写入脚本

pipeline {
agent any
environment {
ANDROID_HOME = '/opt/android-sdk'
PATH = "${ANDROID_HOME}/tools:${env.PATH}" // 安全追加PATH
}
stages {
stage('Clean Workspace') {
steps {
cleanWs() // 或者使用 deleteDir()
}
}
stage('Checkout') {
steps {
sh '''
echo "=== 开始克隆代码 ==="
export GIT_SSH_COMMAND="ssh -i /var/jenkins_home/.ssh/joel.pem -o StrictHostKeyChecking=no"
git clone -b <分支名称> <git地址> .
echo "=== 代码克隆完成 ==="
'''
}
}
// 明确构建目录(二选一)
stage('Build') {
steps {
dir('webproject') { // 如果Gradle项目在webproject子目录
sh 'chmod +x ./gradlew'
sh './gradlew assembleRelease_gp' //构建命令
//默认Release 命令应该是./gradlew assembleRelease
}
// 或者直接使用根目录(删除dir块)
}
}
stage('Archive') {
steps {
// 精确指定APK路径
archiveArtifacts artifacts: 'webproject/app/release_gp/*.apk',
fingerprint: true
}
}
}
}
注意:
① git地址与分支名称的替换;
② 构建命令根据情况修改(assemble+buildTypeName,name首字母大写,例如assembleRelease,如果构建abb 则assemble替换为bundle);
③ 输出路径及名称更改(assemble命令对应后缀为apk,bundle对应aab)
4)配置ssh(如果使用ssh://的命令需要这一步,如果https://,则在地址中添加账号密码即可)
① 在jenkins内部创建ssh目录
1. 进入容器内部的 shell
docker exec -it jenkins /bin/bash
2. 进入 jenkins_home 目录
cd /var/jenkins_home
#进入之后 输入dir 或ls命令可以看到所有文件,如果存在.ssh,跳过第三步
3. 创建 .ssh 目录
mkdir .ssh
4. 设置严格的权限(SSH 对权限非常敏感,组和其他用户不能有写权限)
chmod 700 .ssh
5. 退出容器 或直接按Ctrl+Z
exit
② copy本地config、pem、known_hosts文件到这里
(以下命令中中间的" jenkins"替换成自己的容器名称,在步骤2.3 的命令里 --name)
#copy 配置文件
docker cp C:/Users/<用户名>/.ssh/config jenkins:/var/jenkins_home/.ssh/config
#配置密钥
docker cp C:/Users/<用户名>/.ssh/pub.pem jenkins:/var/jenkins_home/.ssh/pub.pem
docker cp C:/Users/<用户名>/.ssh/known_hosts jenkins:/var/jenkins_home/.sshknown_hosts
5)补全SDK中的cmdline-tools文件(如果存在此目录则跳过---下载的sdk为linux系统版本会包含此目录)
创建临时目录并进入
mkdir -p /tmp/android-cmdline
cd /tmp/android-cmdline
下载最新版本的 command line tools
wget https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip
解压到 Android SDK 目录
unzip commandlinetools-linux-9477386_latest.zip -d /opt/android-sdk/
移动文件到正确的位置
mv /opt/android-sdk/cmdline-tools /opt/android-sdk/latest
mkdir -p /opt/android-sdk/cmdline-tools
mv /opt/android-sdk/latest /opt/android-sdk/cmdline-tools/
清理临时文件
rm -rf /tmp/android-cmdline
rm -f /opt/android-sdk/commandlinetools-linux-*.zip
设置环境变量
export ANDROID_HOME=/opt/android-sdk
export PATH=ANDROID_HOME/cmdline-tools/latest/bin:PATH
6)开始执行构建命令

7)查看构建结果或构建输出

4、内网穿透(本地服务暴漏给外网)
1)下载ngrok
在 Jenkins 服务器上下载 ngrok
wget https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz
tar -xzf ngrok-v3-stable-linux-amd64.tgz
或者直接下载
curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null
echo "deb https://ngrok-agent.s3.amazonaws.com buster main" | sudo tee /etc/apt/sources.list.d/ngrok.list
sudo apt update && sudo apt install ngrok
2)配置环境变量
将 ngrok 移动到 /usr/local/bin/
mv /ngrok /usr/local/bin/ chmod +x /usr/local/bin/ngrok
3)去ngrok注册账号uqngrok --- Log in
4)下载一个令牌软件,需要用于以后的登录认证,例如 Google Authenticator,
5)配置 ngrok token到本地
ngrok config add-authtoken $YOUR_AUTHTOKEN
6)启动 ngrok ,下面命令中的8080为你要暴漏的端口号,与jenkins 服务一致即可
ngrok http 8080
命令执行完之后可以看到输出这个窗口,接下来可以用这个地址在不同网络访问试一下了!!
需要登陆自己在jenkins设置的账号才能登录,在设置中可以增加账号

常见命令:
1、进入容器( 中间 -u root 表示 权限 可不带)
docker exec -u root -it android-jenkins /bin/bash
2、查看镜像:
docker images
3、创建容器
docker run -d \ --name android-jenkins \ -p 8080:8080 -p 50000:50000 \ -v jenkins-data:/var/jenkins_home \ -v /opt/android-sdk:/opt/android-sdk \my-android-jenkins
或者在powerShell 中执行
docker run -d `
--name android-jenkins `
-p 8080:8080 -p 50000:50000 `
-v jenkins-data:/var/jenkins_home `
-v ${env:LOCALAPPDATA}/Android/Sdk:/opt/android-sdk `
my-android-jenkins
4、再次启动容器
docker start android-jenkins
停止
docker stop android-jenkins
删除
docker rm android-jenkins
.强制停止并删除(如果容器卡住)
docker rm -f android-jenkins
删除关联的存储卷( 彻底清理数据(包括 Jenkins 配置和构建历史))
docker volume rm jenkins-data
显示列表(容器内部linux 命令)
ls
遇到其他问题,尽可问AI,文章头部给出了deepseek 地址
若文章中有错误的地方,欢迎指正!