参考:
jenkins在windows下的安装
基于Jenkins的Android持续集成(自动化打包)

准备工作:

android 开发,先安装好JDK、Android SDK、Gradle、Tomcat、git或svn等。

一、下载Jenkins:

https://jenkins.io/download/

官网地址:http://Jenkins-ci.org/
官网镜像地址:http://mirrors.jenkins-ci.org/war-stable/ (在里面可以选择任意版本的war包,lastest为最新的,推荐下载!)

二、启动Jenkins:

方式一:jdk

c盘建立jenkins文件夹,并把jenkins.war 放在文件夹中。

在这里插入图片描述

执行以下命令:

cd C:\jenkins

java -jar jenkins.war 

在这里插入图片描述

看到Jenkins is fully up and running然后打开浏览器输入:
http://localhost:8080/

在这里插入图片描述

管理员密码位置:

在这里插入图片描述

输入密码进入下一步:

在这里插入图片描述

选择推荐安装并,安装完成即可。

方式二:Tomcat

将jenkins.war文件放入tomcat下的webapps目录下

手动到Tomcat的bin/目录下启动Tomcat执行startup.bat ,

通过浏览器访问:http://localhost:8080/jenkins

三、配置:

sdk :

系统管理 --> 系统设置 --> 全局属性(环境变量)
自定义名字,添加本地的绝对路径

ANDROID_HOME
F:\Android\Sdk

比如:
在这里插入图片描述

jdk、git、gradle配置:

系统管理 --> 全局工具配置 --> jdk/gradle
自定义名字,添加本地的绝对路径

jdk1.8.0
C:\Program Files\Java\jdk1.8.0_131


git
D:\Program Files\Git\bin\git.exe

gradle3.3
D:\Program Files\Android\Android Studio\gradle\gradle-3.3-all\gradle-3.3

比如:

在这里插入图片描述

四、下载相关插件:

系统管理 --> 管理插件 --> 可选插件 --> 右上角过滤关键字 --> 选中 --> 直接安装

常见的插件:

Email Extension Plugin
这个插件是Jenkins的电子邮件出版商的替代品。
它允许配置电子邮件通知的每一个方面:邮件什么时候发送,谁接收,上面说了什么

Gradle Plugin
这个插件允许Jenkins直接调用Gradle构建脚本。

Publish Over SSH
通过ssh发送构建工件

Python Plugin
添加作为构建步骤执行Python脚本的能力。
Python Wrapper Plugin
这个插件为Python编写的插件提供了运行时库。

SSH plugin
这个插件使用ssh协议远程执行shell命令。

Upload to pgyer
这个插件上传APK、IPA文件到pgyer(蒲公英)

如果没有找到需要的插件,还可以离线下载:

http://mirrors.jenkins-ci.org/plugins/

https://wiki.jenkins.io/display/JENKINS/Plugins 打开后右上角搜索下载

参考:
Jenkins插件管理(下载插件错误解决方法)
jenkins离线插件安装入门

五、新建项目并配置

新建 --> 输入一个任务名称 --> 构建一个自由风格的软件项目 --> 确定

1、general:

这里写图片描述

参数化构建过程,可以定义参数用于构建,比如定义渠道、版本等。

这里写图片描述

2、源码管理

支持git和svn,不需要可以选择none。

git和svn要填写仓库url(Repository URL)和账号密码(Credentials)。

这里写图片描述

3、构建触发器:

如果需要自动化,不需要手动触发脚本构建等操作,可以设置触发时机。

比如下面:
每隔五分钟查看代码是否更新,更新了则构建,否则不构建。

这里写图片描述

参考:jenkins - job 构建触发器

4、构建环境:

5、构建:

选择构建方式,并填写相应内容:

这里写图片描述

比如下面:
gradle脚本构建android项目,
upload to pgyer 上传apk到蒲公英。

这里写图片描述

6、构建后操作:

六、报错整理

报错1:

使用 Jenkins 实现持续集成 (Android)
使用 Jenkins 插件上传应用到蒲公英

apk已生成,使用pgyer插件上传蒲公英报错:

[UPLOAD TO PGYER] - upload:mynewapp.apk to https://qiniu-storage.pgyer.com/apiv1/app/upload
[UPLOAD TO PGYER] - upload to pgyer failure!
[UPLOAD TO PGYER] - error code:4
[UPLOAD TO PGYER] - error message:The user not exist

解决:

这里写图片描述

注意User Key填写位置是否为黄色,如果是说明需要重新填写。

在蒲公英官网新建任意APP,在api页面即可获取API Key、User Key(账号下通用)

报错2:

Couldn't find any revision to build. Verify the repository and branch configuration for this job.

查看repository 的 branch :是否存在,不存在删除。

黄色背景是需要重新定义的,要特别注意。

这里写图片描述

问题3:

10:45:24.712 [INFO] [org.gradle.launcher.daemon.client.DaemonClient]  
Received result Failure[value=org.gradle.initialization.ReportedException: 
org.gradle.internal.exceptions.LocationAwareException: 
Task 'assemble${PRODUCT_FLAVORS}Release' not found in root project 'test_pacage'.] 
from daemon DaemonInfo{pid=10068, address=[7e592bdd-d84f-4fe3-b33c-91324dd5020d  
port:55653, addresses:[/127.0.0.1, /0:0:0:0:0:0:0:1]], state=Busy, lastBusy=1520477119665, 
context=DefaultDaemonContext[uid=7135e2d5-ab81-4457-8859-ae03eca7501b,
javaHome=C:\Program Files\Java\jdk1.8.0_131,
daemonRegistryDir=C:\Users\lenovo\.gradle\daemon,pid=10068,
idleTimeout=10800000,daemonOpts=-Xmx1536m,-Dfile.encoding=GBK,
-Duser.country=CN,-Duser.language=zh,-Duser.variant]} (build should be done).
10:45:24.712 [DEBUG] [org.gradle.launcher.daemon.client.DaemonClientConnection] 
thread 1: dispatching class org.gradle.launcher.daemon.protocol.Finished
10:45:24.713 [DEBUG] [org.gradle.launcher.daemon.client.DaemonClientConnection] 
thread 1: connection stop
Build step 'Invoke Gradle script' changed build result to FAILURE
Build step 'Invoke Gradle script' marked build as failure
Finished: FAILURE

解决:

注意执行的打包apk的命令拼接是否和android studio中一样:

clean assemble${PRODUCT_FLAVORS}${BUILD_TYPE} --stacktrace --debug

常见的gradle命令:

# 查看构建版本
./gradlew -v
# 清除build文件夹
./gradlew clean
# 检查依赖并编译打包
./gradlew build
# 编译并安装debug包
./gradlew installDebug
# 编译并打印日志
./gradlew build --info
# 调试模式构建并打印日志
./gradlew build --info --debug --stacktrace
# 强制更新最新依赖,清除构建并构建
./gradlew clean --refresh-dependencies build

# Release模式打包并安装
./gradlew installRelease
# 卸载Release模式包
./gradlew uninstallRelease

# Release模式全部渠道打包
./gradlew assembleRelease
# Release模式 test 渠道打包
./gradlew assembleTestRelease
# debug release模式全部渠道打包
./gradlew assemble
# Release模式小米渠道打包
./gradlew assembleXiaomiRelease

报错4:

Total time: 1 mins 55.993 secs
Build step 'Invoke Gradle script' changed build result to SUCCESS
[test] $ cmd /c call C:\Users\lenovo\AppData\Local\Temp\jenkins610143047616150872.bat

C:\Users\lenovo\.jenkins\workspace\test>curl -F 
"file=C:\Users\lenovo\Desktop\测试打包_release.apk" 
-F "uKey=9bdce1d8eb394872f59d1ae37af09348" -F 
"_api_key=89d9dc80bb48639514dfd9480f5a592d"
 http://www.pgyer.com/apiv1/app/upload 
'curl' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

C:\Users\lenovo\.jenkins\workspace\test>exit 9009 
Build step 'Execute Windows batch command' marked build as failure
Finished: FAILURE

解决:

注意:Linux系统用curl,这里我们Windows系统使用插件来上传到蒲公英即可。

报错5:

Total time: 2 mins 11.231 secs
Build step 'Invoke Gradle script' changed build result to SUCCESS
[test] $ sh -xe C:\Users\lenovo\AppData\Local\Temp\jenkins4135891521239357137.sh
The system cannot find the file specified
FATAL: command execution failed
java.io.IOException: CreateProcess error=2, 系统找不到指定的文件。
	at java.lang.ProcessImpl.create(Native Method)
	at java.lang.ProcessImpl.<init>(Unknown Source)
	at java.lang.ProcessImpl.start(Unknown Source)
Caused: java.io.IOException: Cannot run program "sh"  
(in directory "C:\Users\lenovo\.jenkins\workspace\test"):  
						CreateProcess error=2, 系统找不到指定的文件。
	at java.lang.ProcessBuilder.start(Unknown Source)
	at hudson.Proc$LocalProc.<init>(Proc.java:249)
	at hudson.Proc$LocalProc.<init>(Proc.java:218)
	at hudson.Launcher$LocalLauncher.launch(Launcher.java:930)
	at hudson.Launcher$ProcStarter.start(Launcher.java:450)
	at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:109)
	at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:66)
	at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:744)
	at hudson.model.Build$BuildExecution.build(Build.java:206)
	at hudson.model.Build$BuildExecution.doRun(Build.java:163)
	at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:504)
	at hudson.model.Run.execute(Run.java:1724)
	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
	at hudson.model.ResourceController.execute(ResourceController.java:97)
	at hudson.model.Executor.run(Executor.java:429)
Build step 'Execute shell' marked build as failure
Finished: FAILURE

解决:

Jenkins中把相应的shell插件都下完整。

报错6:

[UPLOAD TO PGYER] - upload file not found,plase check scandir or wildcard!

解决:

查看项目的构建upload to pgyer里的scandir wildcard

拼接后看是否可以找到打的包

这里写图片描述

gradle中打包配置要和蒲公英上传scandir wildcard相对应:

在这里插入图片描述

在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐