先来张图看看吧

构思

jenkins gradle 打包apk文件,python myqr 模块生成二维码 放入nginx 访问图片的路径,apk安装包放在 nginx 下载目录。

环境

centos 6.6  sdk(https://developer.android.google.cn/studio/index.html)

gradle (http://services.gradle.org/distributions/)对应自己的版本去下载

jenkins 2.73.3 RPM 安装

java:1.8

python3 环境

python myqr  pillow

nginx 版都都行,开启下载目录

安装完后在/etc/profile 加入环境变量

export JAVA_HOME=/usr/java/jdk1.8.0_101
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export ANDROID_HOME=/opt/SDK
export PATH=$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$PATH

source /etc/profile

配置

插件用到:

Email Extension Plugin

    Subversion Plug-in

    description setter plugin

系统管理->Configure Global Security

系统管理->系统设置

邮件配置

Default Subject:${BUILD_STATUS} - ${PROJECT_NAME} - Build # ${BUILD_NUMBER} !

 Default Content

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<METAHTTP-EQUIV="Pragma" CONTENT="no-cache">
<METAHTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<METAHTTP-EQUIV="Expires" CONTENT="0">
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head> <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
offset="0"> <table width="95%" cellpadding="0" cellspacing="0"
style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
<td>(本邮件是程序自动下发的,请勿回复!)</td>
</tr>
<tr>
<td><h2>
<font color="#0000FF">构建结果 - ${BUILD_STATUS}</font>
</h2></td>
</tr>
<tr>
<td><br />
<b><font color="#0B610B">构建信息</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>项目名称&nbsp;:&nbsp;${PROJECT_NAME}</li>
<li>构建编号&nbsp;:&nbsp;第${BUILD_NUMBER}次构建</li>
<li>SVN&nbsp;版本:&nbsp;${SVN_REVISION}</li>
<li>触发原因:&nbsp;${CAUSE}</li>
<li>构建日志:&nbsp;<a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
<li>构建&nbsp;&nbsp;Url&nbsp;:&nbsp;<a href="${BUILD_URL}">${BUILD_URL}</a></li>
<li>工作目录&nbsp;:&nbsp;<a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
<li>项目&nbsp;&nbsp;Url&nbsp;:&nbsp;<a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
</ul>
</td>
</tr>
<tr>
<td><b><font color="#0B610B">Changes Since Last
Successful Build:</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>历史变更记录 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li>
</ul> ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:<br />%c<br />",showPaths=true,changesFormat="<pre>[%a]<br />%m</pre>",pathFormat="&nbsp;&nbsp;&nbsp;&nbsp;%p"}
</td>
</tr>
<tr>
<td><b>Failed Test Results</b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td><pre
style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">$FAILED_TESTS</pre>
<br /></td>
</tr>
<tr>
<td><b><font color="#0B610B">构建日志 (最后 100行):</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<!-- <tr>
<td>Test Logs (if test has ran): <a
href="${PROJECT_URL}ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip">${PROJECT_URL}/ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip</a>
<br />
<br />
</td>
</tr> -->
<tr>
<td><textarea cols="80" rows="30" readonly="readonly"
style="font-family: Courier New">${BUILD_LOG, maxLines=100}</textarea>
</td>
</tr>
</table>
</body>
</html>

测试是否发送成功

进入:系统管理→Global Tool Configuration

Gradle模块

现在我们来配置项目

新建一个自由风格的项目

svn/git 这些配置,这里就不说了,不会的请自行百度,网上一堆

直接到增加构建步骤这一块

我们选择 Invoke Gradle script

Gradle Version 选择默认了,如果选择你安装的那个到时候会报错,这是一个BUG

Root Build script 使用${WORKSPACE} jenkins 内置变量

Build File 选择你 app下面的build.gradle 文件;

这里使用 了jenkins 内置变量$BUILD_ID 防止生成二维码后,访问缓存

TIME=`date +%F-%H-%M-%S`
echo $BUILD_ID
rm -f /data/download/images/test.jpg cp ${WORKSPACE}/app/build/outputs/apk/app-release.apk /data/download/android/${TIME}-app-release.apk
myqr http://192.168.0.152:9090/${TIME}-app-release.apk -n ${BUILD_ID}-test.jpg -d /data/download/images

构建后操作

<img src='http://192.168.0.152/${BUILD_ID}-test.jpg' width=200px height=200px>

 

邮件里增加了

二维码下载:<br>
<img src='http://192.168.0.152/${BUILD_ID}-test.jpg' width=200px height=200px>
<br>

那会在系统设置下的是全局配置,增加这一段只是为了app项目

生成二维码

  • 下载安装python3和pip,依次配置环境变量。(不会安装请自行百度)
  • 安装图片支持插件Pillow和二维码生成库qrcode

安装Pillow
命令1:pip install Pillow (失败)
命令2:pip install -I --no-cache-dir -v Pillow (成功)

  • 安装myqr  pip install myqr

安装myqr后将 myqr 放入到/usr/bin/下

ln  -s  /usr/local/python/bin/myqr /usr/bin/

生成命令可以参考 https://github.com/sylnsfar/qrcode/blob/master/README-cn.md#%E6%99%AE%E9%80%9A%E4%BA%8C%E7%BB%B4%E7%A0%81

NGINX 配置

#user  nobody;
worker_processes auto; error_log /var/log/nginx/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; pid /var/run/nginx.pid; events {
worker_connections 65535;
use epoll;
} http {
include mime.types;
default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on;
tcp_nopush on;
tcp_nodelay on;
server_tokens off; keepalive_timeout 120; gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/javascript text/xml application/rss+xml application/atom+xml application/rdf+xml image/svg+xml;
gzip_vary on; client_header_buffer_size 16k;
large_client_header_buffers 16 32k;
open_file_cache max=65535 inactive=60s;
open_file_cache_valid 30s;
open_file_cache_min_uses 1; client_max_body_size 50m;
client_body_buffer_size 256k;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m; server {
listen 80;
server_name image.com; charset utf-8; location ~ .*\.(gif|jpg|jpeg|png)$ {
root /data/download/images/;
# expires 24h;
# access_log /var/log/nginx/images.log;
proxy_store on;
proxy_store_access user:rw group:rw all:rw;
proxy_temp_path /data/download/images/;#图片访问路径
proxy_redirect off;
proxy_set_header Host 127.0.0.1;
client_max_body_size 10m;
client_body_buffer_size 1280k;
proxy_connect_timeout 900;
proxy_send_timeout 900;
proxy_read_timeout 900;
proxy_buffer_size 40k;
proxy_buffers 40 320k;
proxy_busy_buffers_size 640k;
proxy_temp_file_write_size 640k;
if ( !-e $request_filename)
{
proxy_pass http://127.0.0.1;#默认80端口
}
} } server {
listen 9090;
server_name android.com; charset utf-8;
root /data/download; location / {
autoindex on; #开启索引功能
autoindex_exact_size off; # 关闭计算文件确切大小(单位bytes),只显示大概大小(单位kb、mb、gb) autoindex_localtime on; # 显示本机时间而非 GMT 时间
}
} }

相信大家看的懂nginx 配置

邮件查看

jenkins 安卓打包生成二维码下载的更多相关文章

  1. iOS - 上架的APP 生成二维码下载

    1.首先打开苹果App Store商店进入到里面,找到需要打开链接地址的应用程序,例如:百度. 2. 在App Store商店里面先点击一下应用程序图标,再按一下…分享按钮. 3. 接着选择分享APP ...

  2. JavaScript的学习--生成二维码

    有一些耗cpu的计算,完全可以在客户端上计算,比如生成二维码. qrcode其实是通过计算,然后使用jquery实现图形渲染和画图.支持canvas和table两种方式生成我们所需的二维码. 具体用法 ...

  3. Springboot生成二维码并下载图片png支持打包成zip

    pom.xml <!--二维码--> <dependency> <groupId>com.google.zxing</groupId> <arti ...

  4. AppStore 中的app怎么样生成二维码,来提供下载

    首先在:iTunes里面找到  AppStore模块,然后搜索你的 App 在App 下载选项有 Copy Link ,拷贝地址 在二维码生成器里直接生成二维码就,OK 如果,想要多个和安卓做一个二维 ...

  5. 生成扫描二维码下载app的二维码的方法

    进入APP store苹果应用程序商店,根据分类找到你要生成二维码的APP,然后在浏览器连接里找到ID后的一串数字就是APP的应用ID了. 安卓系统的appid 在电脑浏览器中打开应用宝官网,http ...

  6. 使用qrcode输入信息生成二维码包含二维码说明信息,点击转化为图片并下载

    说明:输入汉字和数字都可以识别并展示 <body> <h2 id="h2">二维码生成</h2> <br> <span id= ...

  7. js生成二维码以及点击下载二维码

    js生成二维码 jquery.qrcode.js可以快速使用页面生成二维码.但改项目有两个小问题:1.不支持中文:2.不支持二维码中间生成图片. 支持中文的jquery-qrcode jquery.q ...

  8. java后台中处理图片辅助类汇总(上传图片到服务器,从服务器下载图片保存到本地,缩放图片,copy图片,往图片添加水印图片或者文字,生成二维码,删除图片等)

    最近工作中处理小程序宝箱活动,需要java画海报,所以把这块都快百度遍了,记录一下处理的方法,百度博客上面也有不少坑! 获取本地图片路径: String bgPath = Thread.current ...

  9. jQuery.qrcode 生成二维码,并使用 jszip、FileSaver 下载 zip 压缩包至本地。

    生成二维码 引用 jquery.qrcode.js  :连接:https://files.cnblogs.com/files/kitty-blog/jquery.qrcode.js .https:// ...

随机推荐

  1. session中用户信息改变问题

    问题描述: 在web项目中,我们经常将用户登录信息放在session中用来做后续的权限判断等操作,但最近在项目中发现一个奇怪的现象,session中的用户信息和登录时的信息有了差异. 原因: 在后台代 ...

  2. 我理解的js中预解释

    浏览器在执行代码前,先找带var和带function的地方,把带var的声明且赋予初始值undefined,把带function的声明且定义. 带var关键字预解释 让我们先看下这段代码执行的结果: ...

  3. 3YAdmin-专注通用权限控制与表单的后台管理系统模板

    3YAdmin基于React+Antd构建.GitHub搜索React+Antd+Admin出来的结果没有上百也有几十个,为什么还要写这个东西呢? 一个后台管理系统的核心我认为应该是权限控制,表单以及 ...

  4. MVC 之HTML辅助方法

    顾名思义,HTML辅助方法(HTML Helper)就是用来辅助产生HTML之用,在开发View的时候一定会面对许多HTML标签,处理这些HTML的工作非常繁琐,为了降低View的复杂度,可以使用HT ...

  5. 钉钉微应用接入钉钉免登陆配置记录。NET实现

    在这里记录一下我配置的钉钉接入微应用遇到的坑.搞了我几天天才调通.头皮发麻,现在梳理一下,以免别人也入坑. 1.钉钉接入主要要获取钉钉企业员工的ID,然后去自己的应用的数据库里进行匹配然后实现免登陆的 ...

  6. T-sql 编程

    ---------------------------T-SQL编程--------------------------1.声明变量--declare @name nvarchar(50)--decl ...

  7. Java学习--Cookie 和session

  8. 【转】一次由过量线程引发的OOM排查

    mac的话,还得进行下特殊处理:右键mat显示包内容,进入Contents->MacOS下面,会有一个MemoryAnalyzer的命令. 打开终端,进入此路径找到MemoryAnalyzer, ...

  9. 撩课-Web大前端每天5道面试题-Day24

    1.下面的代码将输出什么? ; i < ; i++) { setTimeout(function() { console.log(i); }, i * ); } 闭包在这里能起什么作用? 上面的 ...

  10. dubbo基于tcp协议的RPC框架

    什么是 RPC 框架 谁能用通俗的语言解释一下什么是 RPC 框架? - 远程过程调用协议RPC(Remote Procedure Call Protocol) 首先了解什么叫RPC,为什么要RPC, ...