本文将介绍Jenkins的安装(包括少许的配置),集成例子使用svn+gradle来集成android。
目录送给你
下载安装
官方下载 ,可以选择下载安装包。也可以使用war包。
war包可以放到tomcat的webapps目录,来通过tomcat来启动jenkins。
安装:
安装包直接安装,最后打开http://localhost:8080。
war包开启tomcat服务后,打开http://localhost:8080/jenkins来进行安装。
安装中需要输入密钥,war包安装是从控制台复制,安装包是在xml文件中(页面有提示)
插件列表
除了默认安装的外android还需要,可以直接搜索
Android Lint Plugin
Gradle Plugin
Subversion Plug-in(SVN)
description setter plugin(构建完毕后显示的设置)—如果想显示html格式的,则需要设置 全局安全设置(Markup Formatter 为 Safe HTMLs)
Git plugin(Git插件)
Subversion Plug-in(SVN插件)
安装插件的时候可能出错无法安装,没有关系,我们可以先跳过,等jenkins安装完成后再处理
插件安装失败的处理
找到Jenkins下的hudson.model.UpdateCenter.xml
修改url为:http://mirror.xmission.com/jenkins/updates/update-center.json
再次打开即可重新选择插件安装
Jenkins的系统配置
下面我就我修改的系统配置做一下说明
全局安全配置
1.Markup Formatter 选择为 Safe HTMLs。用来html格式的内容(我构建后显示的文字写成了html格式)
全局工具配置
- JDK,选择jdk的目录(这个没什么好说的)
- Git
SVN好像不用配置。 - gradle (这里是重点了~~~)
首先我项目中使用的是jenkins配置的gradle,所以我需要配置在全局工具中。如果你使用的是gradlew也就是你的svn或者git中有gradle,那这个配置可以不用。
但是我实验gradlew的时候老是出错,所以选择了jenkins的gradle,因为我还一个eclipse项目(┬_┬)
另一点,我电脑没有设置gradle全局变量(其实没什么用,而且gradle一直在升级)
下面是我配置的gradle,是不是有点多,你只配置你项目打包需要的就行。
新建项目
终于进入正题:新建–>起名字–>构建一个自由风格的项目
下面说一下项目的参数配置
项目配置
如果不懂的可以点开每个条目后面的?(问号),解释的还是很清楚的
General
我这里只说2个
1. 参数化构建过程
这里可以放置打包的参数,比如我打release或者debug包。也可以放一些特殊参数,直接可以在build.gradle通过 $参数名 来获取到。当然我每个项目都添加了一个String的params,用来说明这次打包的版本说明,比如我打包的用途,来做区分。
2. 使用自定义的工作空间
默认的使用jenkins的工作空间,我用的war包 所以在C:\Users\a.jenkins\workspace
使用自定义的会单独在C:\Users\a.jenkins\自定义的空间。构建是会新建一个 工程名称的文件夹下,其实影响并不大。
源码管理
如果我们把git插件和svn插件下载好后,可以远程下载代码。
git或者svn的帐号是通过add 添加的
说几个经验把:
1. 我们开始测试阶段可以先使用none来通过本地构建,成功后在使用远程来后去源码。
2. 我们可能需要下载多个模块来构建,这里可以先写一个模块的地址,然后把脚本写到某个文件,再后面的构建阶段把其他的下载下来。具体后面还会提及。
构建
构建之前还一个构建触发器,可以使用定时构建,也可以每提交一次就构建。由于我选择的是手动构建,所以我怕误导大家,说错话。
回归正题。构建的时候我们可以选择gradle、ant等。我以gradle为例子来说明。
1. 构建之前,你可能需要有一些准备,那么可能用到Execute shell比如刚才说的下载其他的模块。我的eclipse的项目就是把build.gradle等跟gradle有关的都写到了一个文件中,正常还是用eclipse开发,构建的时候把文件赋值到根目录。
2. 构建,gradle使用Invoke Gradle script 我推荐使用全局配置的gradle版本(我使用gradlew老是出错),下面直接写gradle task,这里我们可以添加params,比如assemble${BUILD_TYPE},根据参数可以打包debug、release。
3. 构建完后,我这里需要把apk放到蒲公英中,蒲公英官网有文档说明如何集成用jenkins访问蒲公英。也是用到了Execute shell。
我项目中都是把脚本放到代码中了,也可以直接在jenkins中写。
我的clone的脚本主要是把文件放到根目录
#!/bin/bash
echo "====================== COPY INIT FILE ==========================="
cd $WORKSPACE
cd 项目
cd jenkins
cd init
for fileItem in `ls` ; do
cp -rp $fileItem $WORKSPACE/$fileItem
done
我的uploa脚本主要是把打好的包发布到蒲公英
#!/bin/bash
filename=""
if [ $BUILD_TYPE == "Release" ]; then
filename=$WORKSPACE/market/build/outputs/apk/market-release.apk
else
filename=$WORKSPACE/market/build/outputs/apk/market-develop.apk
fi
#创建json日志文件
postfiledir=$WORKSPACE/tmp
postfilename=$postfiledir/upload_app.txt
if [ ! -e "$postfiledir" ]; then
mkdir $postfiledir
echo "创建了日志文件夹"
fi
if [ ! -e "$postfilename" ]; then
touch $postfilename
echo "创建了日志文件"
fi
curl -F "file=@${filename}" -F "uKey=蒲公英的userkey" -F "_api_key=蒲公英的apikey" http://www.pgyer.com/apiv1/app/upload >${postfilename}
url=$(cat ${postfilename}|awk -F'"' '{print $(NF-1)}'|sed 's#\\##g')
echo "appQRCodeURL:<a>$BUILD_TYPE</a><br><img src=$url>"
文章最后对一些用到的简单的shell脚本说明一下。
构建后操作
构建完后,我用来显示二维码,和该版本的信息。这里说明2点
1. 正则表达式的匹配 构建后我们可以使用正则表达式来匹配控制台的输出来。我这里匹配的是我刚才脚本的二维码地址 appQRCodeURL:(.)。支持多个正则,appQRCodeURL:(.),(.*)
2. deccription中可以写我们的构建参数、正则(使用\n,表示第几个正则)等。
3. 展示的乱码问题,我由于使用的war包没找到jenkins.xml文件。所以我在构建参数中添加了一个String parameter 在description中写成$BUILD_CONTENT \1,来展示构建的说明。
好了,基本就这些,最后写一下shell脚本的简单语法,我原来并没有用过。
Shell 脚本
开始使用#!/bin/bash声明文件属性
1. echo "" 打印
2. 变量声明中间没有空格:APP_GIT_NAME=
3. 复制文件:
cp -rp $filename $path/$filename
4. 遍历文件夹下的文件:
for fileItem in `ls` ;do
cp -rp $fileItem $filepath/$fileItem
done
5. if语句,需要使用fi来结束,[] 之间要有空格
if [ -e "$CURR_PATH/lib" ]; then
rm -rf $CURR_PATH/lib
fi
最后有一个git clone的好办法,可以在地址中加入用户名和密码,例:
https://用户名:密码@gitee.com/xxx/xxx.git