利用Jenkins实现Android自动化打包

推荐通过WAR文件安装(https://jenkins.io/zh/doc/book/installing/#war文件)

(参考文档)[https://www.jianshu.com/p/177376ff2a0d]

# 配置jdk环境之后执行(使用powershell)
java -jar ./jenkins.war --httpPort=9090
# 访问,等待安装完成浏览器自动刷新
http://localhost:9090

# 按照网页提示,完成以下步骤:
## [输入密码]: C:\Users\jcleng\.jenkins\secrets\initialAdminPassword
## [安装推荐的插件],等待安装完成
## [配置密码]
# Android 打包相关配置
## 系统管理(Manage Jenkins)->全局工具配置(Global Tool Configuration),在这里进行 JDK、Git、Gradle 的配置,设置你本地对应的路径即可
## 系统管理->系统设置(Configure System)->全局属性->Environment variables,增加一对儿 ANDROID_HOME 的环境变量(就是sdk)
## 应用,确定

# 其他说明:
Gradle位置: C:\Users\jcleng\.gradle\wrapper\dists

创建一个新任务

# 创建一个Freestyle project
# General开始配置,再配置[高级->使用自定义的工作空间]
# 配置git
# 配置[构建->Invoke Gradle script],选择之前配置的版本,tasks填写clean build
# 返回主界面,开始构建,查看构建输出
# 构建的apk位置: (工作目录)D:\auto\test\app\build\outputs\apk

构建常见问题

Starting a Gradle Daemon, 1 busy and 6 stopped Daemons could not be reused, use --status for details
# 停止构建
# 停止其他构建
gradle --stop
# 删除目录里面文件
C:\Users\Administrator\.gradle\daemon\5.4.1\
# 项目根目录gradle.properties增加:
org.gradle.daemon=true
# 再次尝试

> Task :androidFrame:lint FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':androidFrame:lint'.
> Lint found errors in the project; aborting build.
  
Fix the issues identified by lint, or add the following to your build script to proceed with errors:
...
android {
    lintOptions {
        abortOnError false
    }
}
...
# 代码不规范导致,找到该框架,编辑build.gradle,在android添加:
lintOptions {
    abortOnError false
}

生成签名

# jdk目录
keytool -genkey -alias suibian.keystore -keyalg RSA -validity 3650 -keystore suibian.keystore
# 填写完成之后Y

参数构建

# 配置工程>General>This project is parameterized
## 增加一个Choice Parameter(各种选择可以通过参数的形式传递给打包服务,然后选择性打包)
名称: API_ENVIRONMENT
:
DEV
RELEASE
## 增加一个String Parameter
## 保存配置信息等(域名/签名),如签名文件
名称: KEYSTORE
: D:\jenkins\suibian.keystore

构建参数保存之后把参数传递给项目

# 配置[构建->Invoke Gradle script],选择之前配置的版本,tasks填写:
build -P API_ENVIRONMENT=${API_ENVIRONMENT} -P KEYSTORE=${KEYSTORE}
# Excute Windows batch command是构建完成之后的操作,比如上传到服务器等

流程

用户触发配置

# 触发远程构建 (例如,使用脚本)
123456
# 然后配置授权 Configure Global Security
安全矩阵 job>read/build
# 注意如果是有参数的需要传参,不然会手动选择构建
http://192.168.1.118:9090/job/%E6%B5%8B%E8%AF%95%E6%89%93%E5%8C%85apk/build?token=123456
http://192.168.1.118:9090/job/%E6%B5%8B%E8%AF%95%E6%89%93%E5%8C%85apk/buildWithParameters?token=123456&FUSERID=1&FVSERSION=1.0

使用变量

Windows:%BUILD_NUMBER%        %变量名%
Linux:${BUILD_NUMBER} ,也可以直接使用$BUILD_NUMBER
D:\phpEnv\php\php-72\php.exe -f D:\jenkins\php\3config.php %FUSERID% %FVSERSION%

获取编译状态

http://192.168.1.118:9090/job/%E6%B5%8B%E8%AF%95%E6%89%93%E5%8C%85apk/lastBuild/api/xml
http://192.168.1.118:9090/job/%E6%B5%8B%E8%AF%95%E6%89%93%E5%8C%85apk/lastBuild/api/json
# 获取队列信息
http://192.168.1.118:9090/job/%E6%B5%8B%E8%AF%95%E6%89%93%E5%8C%85apk/api/json

# 正在编译: building: true,
# 编译成功: result: "SUCCESS",
# 获取传入的参数(数组,name是键):
ret.actions.parameters

配置apk位置

# 参考 https://gitee.com/jcleng/Jenkinsandroid/raw/master/app/build.gradle

下载地址

http://192.168.1.118/1/apks/0.1.apk

/configs/目录需要的配置

# 证书
qhs.jks
# app图标
appicon.png
# 启动图
1080x1920.png
1536x2048.png
1125x2436.png
750x1334.png
640x1136.png
640x960.png

构建参数 配置常量

FUSERID
FVSERSION

配置构建触发事件

http://192.168.1.118:9090/job/tk_android/buildWithParameters?token=e10adc3949ba59abbe56e057f20f883e&FUSERID=1&FVSERSION=0.1

git配置,以及构建增加覆盖配置

echo "开始覆盖配置文件..."
D:\phpEnv\php\php-72\php.exe -f D:\jenkins\php\3config.php %FUSERID% %FVSERSION% %WORKSPACE%

勾选

Delete workspace before build starts

构建编译命令

clean build -P FUSERID=${FUSERID} -P FVSERSION=${FVSERSION}

获取构建状态

http://192.168.1.118/getstatus.php?userid=1&version=1.0