热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Ubuntu下Jenkins的高级配置

博客推荐:自动化测试1.Jenkins重启当你更新插件或安装新的插件后就会想要重启了,那如何重启咧?有两种方式:(jenkins_url)safeRestart:在重启前,确保已经

博客推荐:自动化测试

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文件, 在文件中找到

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

《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自动发出,请勿回复~)

项目名称:$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.
重新构建一下就可以收到邮件通知啦.


推荐阅读
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • Node.js 教程第五讲:深入解析 EventEmitter(事件监听与发射机制)
    本文将深入探讨 Node.js 中的 EventEmitter 模块,详细介绍其在事件监听与发射机制中的应用。内容涵盖事件驱动的基本概念、如何在 Node.js 中注册和触发自定义事件,以及 EventEmitter 的核心 API 和使用方法。通过本教程,读者将能够全面理解并熟练运用 EventEmitter 进行高效的事件处理。 ... [详细]
  • 在 CentOS 7 上部署和配置 RabbitMQ 消息队列系统时,首先需要安装 Erlang,因为 RabbitMQ 是基于 Erlang 语言开发的。具体步骤包括:安装必要的依赖项,下载 Erlang 源码包(可能需要一些时间,请耐心等待),解压源码包,解决可能出现的错误,验证安装是否成功,并将 Erlang 添加到环境变量中。接下来,下载 RabbitMQ 的 tar.xz 压缩包,并进行解压和安装。确保每一步都按顺序执行,以保证系统的稳定性和可靠性。 ... [详细]
  • 在 CentOS 6.4 上安装 QT5 并启动 Qt Creator 时,可能会遇到缺少 GLIBCXX_3.4.15 的问题。这是由于系统中的 libstdc++.so.6 版本过低。本文将详细介绍如何通过更新 GCC 版本来解决这一问题。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 大家好,我是李白。本文将分享一个从零开始的全栈项目,涵盖了设计、前端、后端和服务端的全面学习过程。通过这个项目,我希望能够帮助初学者更好地理解和掌握全栈开发的技术栈。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 字节码开发笔记:深入解析与应用技巧 ... [详细]
  • TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得
    TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得 ... [详细]
  • 利用Jenkins与SonarQube集成实现高效代码质量检测与优化
    本文探讨了通过在 Jenkins 多分支流水线中集成 SonarQube,实现高效且自动化的代码质量检测与优化方法。该方案不仅提高了开发团队的代码审查效率,还确保了软件项目的持续高质量交付。 ... [详细]
  • 前后端分离 以及使用工具 基础
    前后端分离开发YapiSwagger项目部署在项目中,前端代码和后端代码混合在一起,是存在问题的,存在什么问题呢?主要存在以下几点问题:1).开发人员同时负责前端和后 ... [详细]
  • WinMain 函数详解及示例
    本文详细介绍了 WinMain 函数的参数及其用途,并提供了一个具体的示例代码来解析 WinMain 函数的实现。 ... [详细]
  • 在探讨如何在Android的TextView中实现多彩文字与多样化字体效果时,本文提供了一种不依赖HTML技术的解决方案。通过使用SpannableString和相关的Span类,开发者可以轻松地为文本添加丰富的样式和颜色,从而提升用户体验。文章详细介绍了实现过程中的关键步骤和技术细节,帮助开发者快速掌握这一技巧。 ... [详细]
author-avatar
手机用户2602916737
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有