博客推荐:自动化测试1.Jenkins重启当你更新插件或安装新的插件后就会想要重启了,那如何重启咧?有两种方式:(jenkins_url)safeRestart:在重启前,确保已经
博客推荐:自动化测试
1. Jenkins重启
当你更新插件或安装新的插件后就会想要重启了, 那如何重启咧? 有两种方式:
(jenkins_url)/safeRestart
: 在重启前, 确保已经运行的任务安全结束, 新任务进入队列等待运行
(jenkins_url)/restart
: 强制重启, 不管构建死活
2. Jenkins参数化构建
啥叫参数化构建呢? 简单来说就是配置相关构建参数, 打不同的包. 什么是相关构建参数, 具体来说就是buildType, procductFlavor之类的参数. 流程就跟你配置gradle脚本一样, 只不过配置完后可以通过UI界面控制打包.
parameter-build.png
如图所示, 勾选参数化构建过程, 点击添加参数, 可以看到不同的参数类型, 这里我们需要添加的参数及其类型如下表:
参数名 | 参数类型 | 参数值 |
---|
BUILD_TYPES | Choice | Release Debug |
PRODUCT_FLAVORS | Choice | wandoujia huawei等 |
BUILD_TIME | Date | 2017-11-11 |
BUILD_PATH | String | /var/lib/jenkins/downloadApk |
APP_VERSION | Choice | 1.0.0 1.0.1 |
GIT_TAG | Git | 选择相应版本tag打包 |
具体软件设置如下所示:
- 选择构建类型, 是release版还是debug版, 和gradle脚本中的buildTypes字段相对应, 当然可选类型要和gradle脚本中提供的类型一致, 不然脚本执行机会出错.
build-types.png
product-flavors.png
- 构建时间设置. 之前的文章中的这个时间参数用的是dynamic parameter类型, 但是我在可安装的插件中没有找到 dynamic parameter plugin, 不知道是不是下架了, 于是就用这个date parameter类型来代替. 用这个参数你可以输入不同格式的打包时间, 而不是在gradle脚本中写死. 注意到这里的值是动态输入的, 不是gradle脚本中已有的, 和上面的choice参数类型不一样(静态的, 代码中写死), 这时候需要在构建中传入参数, 即所谓的侵入. 设置很简单, 切换到构建tab, 勾选
Pass all job parameters as Project properties
即可.
build-time.png
- 构建路径. 这个构建路径其实就是最后生成apk文件的路径. 这个路径很重要, 要作为之后从tomcat服务器上下载最新apk文件的物理路径. 这里我把路径设置在Jenkins的安装路径根目录下, 原因是如果设置在安装路径之外, Jenkins生成apk文件会产生io exception错误, 原因应该是用户权限问题, 未得到解决. 同理这个参数也需要在构建中侵入gradle脚本, 所以在脚本中需要添加相同的变量, 在gradle.properties文件中添加设置即可.
var-set.png
build-gradle.png
build-path.png
- app-version 这个就是APP的显示版本啦, 不多说
app-version.png
- GIT-TAG字段. 上面说了, 用作选择不同tag来构建的, 也可以选择不同的branch来构建, 或者两者都包含.
git-tag.png
然后在源码管理这样设置:
git-tag-branch.png
到目前位置就差不多了, 然后在构建tab下添加如下所示的gradle命令
build.png
然后回到工程面板, 点击build with parameters就可以选择参数值进行构建了.
3. 上传apk文件到tomcat服务器, 供内部下载测试
- 安装tomcat:
下载tomcat: curl -O http://apache.mirrors.ionfish.org/tomcat/tomcat-8/v8.0.33/bin/apache-tomcat-8.0.33.tar.
解压:tar xzvf apache-tomcat-8*tar.gz
安装:sudo mkdir /opt/tomcat
sudo cp apache-tomcat-8* /opt/tomcat
这种方式使tomcat可以被当前用户访问 - 配置tomcat开机启动:
查看Java安装路径:sudo update-java-alternatives -l
然后在/etc/systemd/system目录下创建服务文件tomcat.service:sudo vim /etc/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target
[Service]
Type=forking
EnvirOnment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre
EnvirOnment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
EnvirOnment=CATALINA_HOME=/opt/tomcat
EnvirOnment=CATALINA_BASE=/opt/tomcat
EnvirOnment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
EnvirOnment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
User=userName
Group=userName
[Install]
WantedBy=multi-user.target
由于我们Jenkins的端口号是8080, 和tomcat默认的端口和重合, 这里修改一下tomcat的端口号:
在/opt/tomcat
目录下找到conf
目录, 修改其中的server.xml
文件, 在文件中找到
cOnnectionTimeout="20000"
redirectPort="8443" />
将port=8080
改为8088
修改完后, 重新加载systemd:
sudo systemctl daemon-reload
启动tomcat:
sudo systemctl enable tomcat
sudo systemctl start tomcat
确认tomcat已启动:
sudo systemctl status tomcat
看到命令行上显示tomcat active即可
浏览器访问:localhost:8088
看到一只傻猫表示成功.
- tomcat部署web应用:
tomcat部署一般分静态和动态部署, 静态就是指在tomcat启动前部署好, 启动后不可部署; 动态就是指可以在服务器启动之后部署应用, 而不用重启服务器. 这里我们采取静态部署的方式
静态部署又可分为三种方式:
i. 利用tomcat自动部署:
将web目录拷贝到opt/tomcat/webapps下,然后启动服务器就可以了,Tomcat启动时将自动加载应用.
ii. 修改server.xml文件部署:
这种方式可以不必将web目录拷贝到webapps下, 直接在web存储地址部署. 方法如下, 更改/opt/tomcat/conf/server.xml文件, 找到以下内容:
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
里的内容就是添加的代码.
iii. 增加自定义web部署文件
这种方式和方法2差不多, 但不是在server.xml文件中添加Context标签, 而是在/opt/tomcat/conf /catalina/localhost中添加一个xml文件,如download.xml. 在Tomcat安装目录conf/catalina/localhost下, 里面有Tomcat自带的三个应用, 随意复制其中的一个XML文件, 然后修改docbase指向你自己的应用程序, 并把文件名改名, 各参数参见方法2中的标签的参数, 或者你也可以自己新建一个XML文件.
Note: 由于我们需求是这样, 在一个页面上显示一个apk文件列表, 点击下载, 所以需要修改一下/opt/tomcat/conf
目录下的web.xml文件, 修改内容如下:
default
org.apache.catalina.servlets.DefaultServlet
debug
0
listings
true
1
就是把listings的值改为true, 允许页面展示列表, 不然直接访问localhost:8088/downlodaApk
会返回403错误.
好了, 现在去Jenkins构建一下, 然后输入上面的地址, 不出意外应该可以访问到apk文件了.
PS: 如果要用其他设备访问下载地址, 还需要设置一下. 在/opt/tomcat/webapps/manager/META_INF
目录下打开context.xml文件, 作如下修改:
4. 邮箱接收二维码, 扫码下载
通过上面的步骤, 我们可以用手机浏览器查询资源地址下载apk文件, 但这样略显麻烦, 我们想邮箱接收一个二维码, 然后直接扫码下载. 这个需求有两个部分构成:
首先我们先来生成一个二维码, 可以使用蒲公英来生成, 这里我们选择自己生成. 利用qrcode这个库, 配合python3可以手动生成二维码, 具体怎么使用参考这个库的首页使用说明.
在构建tab下点击增加构建步骤, 选择Execute shell, 输入:myqr http://192.168.1.74:8088/downloadApk/${BUILD_TIME} -v 7 -l L -d /var/lib/jenkins/downloadApk/${BUILD_TIME}
再次构建就可以生成一个二维码了.
Note: 在执行前需要先为Jenkins添加python路径
python-path.png
接下来, 我们需要把生成的二维码发送到指定邮箱中.
点击系统配置, 滑到最下, 来到邮件通知进行设置. 可以看到这里发送邮件是走SMTP服务器, 这里选择网易邮箱, 开启SMTP服务, 然后按照如下进行设置:
test-email.png
勾选通过发送测试邮件测试配置, 如果收到邮件说明测试通过.
然后安装extended email plugin, 同样在系统配置中找到Extended E-mail Notification, 按照如下进行配置.
Extended E-mail Notification1.png
Extended E-mail Notification2.png
[Jenkins构建通知]$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!
(邮件由Jenkins自动发出,请勿回复~)
项目名称:$PROJECT_NAME
构建编号:$BUILD_NUMBER
构建说明:${COMMENTS}
构建状态:$BUILD_STATUS
触发原因:${CAUSE}
构建地址:${BUILD_URL}
构建输出日志:http://192.168.1.74:8080/job/${PROJECT_NAME}/${BUILD_NUMBER}/console
下载地址:http://192.168.1.74:8088/downloadApk
二维码下载:![](http://192.168.1.74:8088/downloadApk/${BUILD_TIME}/qrcode.png)
然后在default triggers选择你需要的触发条件.
最后, 来到项目配置中, 在构建后操作中添加Editable Email Notification, 保持默认配置即可, 注意在高级中添加trigger.
重新构建一下就可以收到邮件通知啦.