使用Jenkins布署Android打包平台

渠道加的起来越多了,手动打包再上传真是够了。用下Jenkins来进行集成打包。来定个目标:自动进行构建,完成后上传到七牛云上,获取到下载链接。

环境检查

服务器配置建议:
首先选国外的,你懂的。
内存4G以上。默认2G会提示Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)错误,由内存不足引起。

### 操作系统版本
cat /etc/redhat-release  
CentOS Linux release 7.2.1511 (Core)

### 查看系统内核
uname -a

### 查看磁盘信息
df -h

### 查看指定目录大小
du -sh <目录名>

### cpu信息
cat /proc/cpuinfo

### 内存信息
cat /proc/meminfo

一 基础SDK安装

1.JDK安装

系统自带的jdk功能少,例如javac命令就没有,删除后重新安装。JavaSDK地址

### 删除JDK
rpm -qa | grep jdk
rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.151-5.b12.el7_4.x86_64

### 下载新的
wget --no-cookie --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u161-b12/2f38c3b165be4555a1fa6e98c45e0808/jdk-8u161-linux-x64.tar.gz
tar zxvf jdk-8u161-linux-x64.tar.gz
mv jdk1.8.0_161 /usr/local/jdk1.8.0_161


### 添加`JAVA_HOME`环境变量
vim ~/.bash_profile

JAVA_HOME=/usr/local/jdk1.8.0_161
export JAVA_HOME
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH

source ~/.bash_profile 

### test
java -version
2.Gradle安装

Gradle和AndroidSDK都说用自己电脑的,就不用下载啦,直接拷贝使用。注意拷贝项目使用的Gradle版本。又拷贝了一次和下面的截图不一致。Gradle各个版本地址

## copy file
scp gradle-4.1-all.zip root@192.168.0.106:/home

## unzip 
unzip gradle-4.1-all.zip

## 添加环境变量
vim ~/.bash_profile

GRADLE_HOME=/usr/local/gradle-4.1
export GRADLE_HOME
export PATH=$GRADLE_HOME/bin:$PATH

source ~/.bash_profile 

## 禁用daemon进程
vim ~/.gradle/gradle.properties ##添加文件
org.gradle.daemon=false  ##添加内容

## test
gradle -v

3.AndroidSDK配置

到官网下载Linux版本的SDK

###Linux版本SDK下载
wget https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip

unzip sdk-tools-linux-3859397.zip

mv ~/tools /usr/local/ANDROID/sdk

###环境变量添加
vim ~/.bash_profile

ANDROID_HOME=/usr/local/ANDROID/sdk
export ANDROID_HOME
export PATH=$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$PATH

source ~/.bash_profile
###显示SDK列表
sdkmanager --list

###安装需要的工具
sdkmanager "ndk-bundle"
sdkmanager "build-tools;25.0.3"
sdkmanager "platforms;android-25"

注意直接在tools目录下运行android是无法运行的,必须使用全路径或者把tools加到环境变量中才能使用。

4.Git安装

起步 - 安装 Git

5.Groovy安装。默认不安装也可以

下载后拷贝至指定目录,配置环境变量。

GROOVY_HOME=/Users/hello/Applications/groovy-2.4.15
export GROOVY_HOME
export PATH=$GROOVY_HOME/bin:$PATH

二 环境搭建

1.服务器Tomcat安装。下载对应平台的安装包,直接拷贝到自定义目录即可。

###本地有就直接拷了
scp /Users/hello/Downloads/apache-tomcat-8.5.30.tar.gz  root@192.168.0.106:/home
###或下载
wget http://www-us.apache.org/dist/tomcat/tomcat-8/v8.5.30/bin/apache-tomcat-8.5.30.tar.gz
### 端口更改为80
vim /usr/local/tomcat/conf/server.xml
将Connector port="8080"改为"80"即可。
###启动
sudo ./startup.sh
###关闭 
sudo ./shutdown.sh
###添加自动启动  
vim /etc/rc.d/rc.local

export JAVA_HOME=/usr/local/jdk1.8.0_161 ###必须加
/usr/local/tomcat/bin/startup.sh start

### 添加运行权限
chmod +x /etc/rc.d/rc.local

2. Jenkins,到官网下载安装包,这里选择Generate Java package(.war)进行安装。

下载后直接把jenkins.war文件拷贝到Tomcat的webapps目录下。

wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
mv jenkins.war  /usr/local/tomcat/webapps/

启动Tomcat服务器,访问http://localhost/jenkins进行安装配置。

1. 输入密码

input password

2. 安装插件,使用默认安装即可

install plugins

3. 添加帐户
add accounts

4. 配置环境变量

系统设置中添加ANDROID_HOME

setting android home

全局工具配置配置JDKGradle目录

setting jdk
setting gradle

三 创建任务 

1.创建任务

开始创建一个任务,填写名称,选择构建一个自由风格的软件项目。

task 1

2.源码管理添加

从什么地方获取代码,可使用Git或SVN。

task 1
task 1

3.构建触发器

定义什么情况下触发构建或手动进行构建

task 1

4.构建环境
task 1

在这里使用第三方插件(Environment Injector)进行动态注入变量:读取本地的Properties文件,将变量注入到系统变量中,可在后面直接使用

task 1

5.构建

根据项目选择合适的构建类型,或者执行命令行都可以。

task 1

task 1

6.构建后操作

执行构建完成后需要的操作,可在这里发送邮件通知或作其它操作。 这里指定上传到七牛云上,并获取到完整的下载链接。  

Jenkins插件-上传文件到七牛云,详细使用请点击查看。

task 1

task 1

构建后执行脚本插件PostBuildScript Plugin,可执行shell,groovy,gradle等脚本。

项目之间传递参数插件Parameterized Trigger Plugin
可在项目构建完成后启动其它项目时传递参数过去。

?待解决

Q: jenkins执行groovy脚本时权限处理?如何直接执行不需要批准? 

A: 暂时解决方案:把groovy脚本放在单独路径,不放在git管理库中。任务填写时不勾选Run in Groovy Sandbox,第一次执行时批准一次,后续会默认执行。

默认执行时会报错,使用的有读写文件的api。

[PostBuildScript] - Executing post build scripts.
[PostBuildScript] - Problem occurred: org.jenkinsci.plugins.scriptsecurity.scripts.UnapprovedUsageException: script not yet approved for use
	at org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval.using(ScriptApproval.java:466)
	at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript.evaluate(SecureGroovyScript.java:343)
	at org.jenkinsci.plugins.postbuildscript.service.GroovyScriptExecutor.execute(GroovyScriptExecutor.java:49)
	at org.jenkinsci.plugins.postbuildscript.service.GroovyScriptPreparer.evaluateScript(GroovyScriptPreparer.java:55)
	at org.jenkinsci.plugins.postbuildscript.service.GroovyScriptPreparer.evaluateCommand(GroovyScriptPreparer.java:86)
	at org.jenkinsci.plugins.postbuildscript.processor.Processor.processScriptFiles(Processor.java:139)
	at org.jenkinsci.plugins.postbuildscript.processor.Processor.processScripts(Processor.java:93)
	at org.jenkinsci.plugins.postbuildscript.processor.Processor.process(Processor.java:83)
	at org.jenkinsci.plugins.postbuildscript.processor.Processor.process(Processor.java:77)
	at org.jenkinsci.plugins.postbuildscript.PostBuildScript.perform(PostBuildScript.java:114)
	at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:744)
	at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:690)
	at hudson.model.Build$BuildExecution.post2(Build.java:186)
	at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:635)
	at hudson.model.Run.execute(Run.java:1752)
	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 Scripts' changed build result to FAILURE
Build step 'Execute Scripts' marked build as failure

参考

Android Jenkins+Git+Gradle 持续集成
使用Jenkins搭建iOS/Android持续集成打包平台
浅析 Jenkins 插件开发
Jenkins添加构建后shell cmd的应用插件–PostBuildScript plugin插件
Jenkins项目实战之-Android基于Gradle参数化打不同环境安装包(二)
Jenkins项目实战之
Jenkins插件之环境变量插件EnvInject
Jenkins参数化构建(三)之 Jenkins从文件中读取运行参数–Extended Choice Parameter
jenkins中的环境变量
Jenkins Plugin 获取变量的问题。
Jenkins学习(四)job界面详解
Jenkins 进程内脚本批准–执行Groovy脚本权限处理

Passer avatar
About Passer
Empty
comments powered by Disqus