Ubuntu下Jenkins的高级配置

博客推荐:自动化测试

1. Jenkins重启

当你更新插件或安装新的插件后就会想要重启了, 那如何重启咧? 有两种方式:
(jenkins_url)/safeRestart: 在重启前, 确保已经运行的任务安全结束, 新任务进入队列等待运行
(jenkins_url)/restart: 强制重启, 不管构建死活

2. Jenkins参数化构建

啥叫参数化构建呢? 简单来说就是配置相关构建参数, 打不同的包. 什么是相关构建参数, 具体来说就是buildType, procductFlavor之类的参数. 流程就跟你配置gradle脚本一样, 只不过配置完后可以通过UI界面控制打包.

《Ubuntu下Jenkins的高级配置》 parameter-build.png

如图所示, 勾选参数化构建过程, 点击添加参数, 可以看到不同的参数类型, 这里我们需要添加的参数及其类型如下表:

参数名参数类型参数值
BUILD_TYPESChoiceRelease Debug
PRODUCT_FLAVORSChoicewandoujia huawei等
BUILD_TIMEDate2017-11-11
BUILD_PATHString/var/lib/jenkins/downloadApk
APP_VERSIONChoice1.0.0 1.0.1
GIT_TAGGit选择相应版本tag打包

具体软件设置如下所示:

  • 选择构建类型, 是release版还是debug版, 和gradle脚本中的buildTypes字段相对应, 当然可选类型要和gradle脚本中提供的类型一致, 不然脚本执行机会出错.

《Ubuntu下Jenkins的高级配置》 build-types.png

  • 构建风味设置, 就是不同渠道号啦.

《Ubuntu下Jenkins的高级配置》 product-flavors.png

  • 构建时间设置. 之前的文章中的这个时间参数用的是dynamic parameter类型, 但是我在可安装的插件中没有找到 dynamic parameter plugin, 不知道是不是下架了, 于是就用这个date parameter类型来代替. 用这个参数你可以输入不同格式的打包时间, 而不是在gradle脚本中写死. 注意到这里的值是动态输入的, 不是gradle脚本中已有的, 和上面的choice参数类型不一样(静态的, 代码中写死), 这时候需要在构建中传入参数, 即所谓的侵入. 设置很简单, 切换到构建tab, 勾选Pass all job parameters as Project properties即可.

《Ubuntu下Jenkins的高级配置》 build-time.png

  • 构建路径. 这个构建路径其实就是最后生成apk文件的路径. 这个路径很重要, 要作为之后从tomcat服务器上下载最新apk文件的物理路径. 这里我把路径设置在Jenkins的安装路径根目录下, 原因是如果设置在安装路径之外, Jenkins生成apk文件会产生io exception错误, 原因应该是用户权限问题, 未得到解决. 同理这个参数也需要在构建中侵入gradle脚本, 所以在脚本中需要添加相同的变量, 在gradle.properties文件中添加设置即可.

《Ubuntu下Jenkins的高级配置》 var-set.png
《Ubuntu下Jenkins的高级配置》 build-gradle.png
《Ubuntu下Jenkins的高级配置》 build-path.png

  • app-version 这个就是APP的显示版本啦, 不多说

《Ubuntu下Jenkins的高级配置》 app-version.png

  • GIT-TAG字段. 上面说了, 用作选择不同tag来构建的, 也可以选择不同的branch来构建, 或者两者都包含.

《Ubuntu下Jenkins的高级配置》 git-tag.png

然后在源码管理这样设置:

《Ubuntu下Jenkins的高级配置》 git-tag-branch.png

到目前位置就差不多了, 然后在构建tab下添加如下所示的gradle命令

《Ubuntu下Jenkins的高级配置》 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文件, 在文件中找到

<Connector port="8080" protocol="HTTP/1.1"  
               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文件, 找到以下内容:
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />
       <Context reloadable="true" docBase="/var/lib/jenkins/downloadApk" crossContext="true" path="/downloadApk"/>
      </Host>

<Context …./>里的内容就是添加的代码.
iii. 增加自定义web部署文件
这种方式和方法2差不多, 但不是在server.xml文件中添加Context标签, 而是在/opt/tomcat/conf /catalina/localhost中添加一个xml文件,如download.xml. 在Tomcat安装目录conf/catalina/localhost下, 里面有Tomcat自带的三个应用, 随意复制其中的一个XML文件, 然后修改docbase指向你自己的应用程序, 并把文件名改名, 各参数参见方法2中的<Context>标签的参数, 或者你也可以自己新建一个XML文件.

Note: 由于我们需求是这样, 在一个页面上显示一个apk文件列表, 点击下载, 所以需要修改一下/opt/tomcat/conf目录下的web.xml文件, 修改内容如下:

    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

就是把listings的值改为true, 允许页面展示列表, 不然直接访问localhost:8088/downlodaApk会返回403错误.
好了, 现在去Jenkins构建一下, 然后输入上面的地址, 不出意外应该可以访问到apk文件了.
PS: 如果要用其他设备访问下载地址, 还需要设置一下. 在/opt/tomcat/webapps/manager/META_INF目录下打开context.xml文件, 作如下修改:

<Context antiResourceLocking="false" privileged="true" >
<!--
 <Valve className="org.apache.catalina.valves.RemoteAddrValve"
        allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
 <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

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路径

《Ubuntu下Jenkins的高级配置》 python-path.png

接下来, 我们需要把生成的二维码发送到指定邮箱中.
点击系统配置, 滑到最下, 来到邮件通知进行设置. 可以看到这里发送邮件是走SMTP服务器, 这里选择网易邮箱, 开启SMTP服务, 然后按照如下进行设置:

《Ubuntu下Jenkins的高级配置》 test-email.png

勾选通过发送测试邮件测试配置, 如果收到邮件说明测试通过.
然后安装extended email plugin, 同样在系统配置中找到Extended E-mail Notification, 按照如下进行配置.

《Ubuntu下Jenkins的高级配置》 Extended E-mail Notification1.png
《Ubuntu下Jenkins的高级配置》 Extended E-mail Notification2.png

[Jenkins构建通知]$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!

(邮件由Jenkins自动发出,请勿回复~)<br>
项目名称:$PROJECT_NAME<br>
构建编号:$BUILD_NUMBER<br>
构建说明:${COMMENTS} <br>
构建状态:$BUILD_STATUS<br>
触发原因:${CAUSE}<br>
构建地址:<A HREF="${BUILD_URL}">${BUILD_URL}</A><br>
构建输出日志:<a href="http://192.168.1.74:8080/job/${PROJECT_NAME}/${BUILD_NUMBER}/console">http://192.168.1.74:8080/job/${PROJECT_NAME}/${BUILD_NUMBER}/console</a><br>
下载地址:<a href="http://192.168.1.74:8088/downloadApk">http://192.168.1.74:8088/downloadApk</a><br>
二维码下载:![](http://192.168.1.74:8088/downloadApk/${BUILD_TIME}/qrcode.png)<br>

然后在default triggers选择你需要的触发条件.
最后, 来到项目配置中, 在构建后操作中添加Editable Email Notification, 保持默认配置即可, 注意在高级中添加trigger.
重新构建一下就可以收到邮件通知啦.

    原文作者:倾倒的吞天壶
    原文地址: https://www.jianshu.com/p/32f12a0bf241
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞