感觉都好久没写博客了.
最近这小半年自己都不知道忙啥去了,各种乱七八糟的杂事.
今天刚好将迭代的项目从老的环境迁移到专门的Jenkins服务器里面,就加个班写个这个吧.
当初最早为了弄这个,可是没有少找这方面的资料.

本篇博客背景说明.

说一下正在使用的构建代码环境.
每次版本迭代提测,测试都自己去 Jenkins里面去选 接口环境,选 对应代码分支进行 Jenkins自动构建,构建完成后,自动上传至蒲公英,最后在钉钉群内进行消息推送.


前期准备工作.part1

1.构建一个Jenkins环境,具体怎么弄,自行搜索.
2.注册一个蒲公英,类似于fir,用fir也行,这里我用蒲公英演示.
3.用的是钉钉,创建对应的 智能群助手,后面会说明.

前期准备工作.part2

1.默认你Jenkins环境已经搭建成功,
Manage Jenkins --> Manage Plugins
搜索下载

  • Upload to pgyer(有现成插件,不用其实也可以,有单独的服务器,可以自己用服务器IP去请求上传)(如果是用fir的话,就下载这个fir-plugin,具体应该没有多大差异,原理都一样).
  • Dingding[钉钉] Plugin,看名字就知道了,钉钉进行消息通知,除了 智能群助手外,还需要这个进行搭配.

这是2个相关的插件,至于其他的必备插件,
比如说 gitlab/github branch plugin 自定义分支选择,Gradle gradle编译配置,Groovy Postbuild 支持groovy语法等插件,这些一般会在Jenkins环境搭建相关的技术博客内提及或附带.(在本文最后附带我这项目Jenkins环境的插件列表)

2.蒲公英注册好以后,创建应用,拿到API Key 这个是 基本操作,就不作赘述.

3.钉钉 智能群助手 机器人,没有默认的Jenkins,选择 自定义Webhook机器人.

钉钉Webhook机器人相关文档:
https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq

照着文档来,起好名字,消息推送开关打开,保管好Webhook的地址,到时候推送 APP构建完成,推送对应的二维码就靠这个Webhook地址了.


Jenkins新增项目配置说明

新建Item,根据你们自己的项目性质,自己选择,我这肯定就是 Freestyle Project.点击确定后,到了重头戏部分,也就是Jenkins对于你这个项目的配置部分.

emmm…这就是你的项目的窗帘了,赶紧把心目中想好的骚话写出来吧,看到&nbsp,各种标签,你懂得,html…


添加参数

通用–Choice Parameter

自定义接口环境,这个需要下载对应Jenkins插件,以及APP代码这边build.gradle对应自定义buildTypes配置,这个因人而异,不会的,可以自行搜索关键字[Android,自定义buildTypes].
同时建议在描述里面写上对应接口环境的描述,方便测试同事理解选择(小声BB:只有对测试好一点,才会给你少提点BUG,人天缺陷才没有那么难看).

通用–Git Parameter

自定义代码分支选择,毕竟随着版本迭代,master,各种dev,各种temp分支,各种fix分支,一个比一个多,没有这个怎么行.

记住这个里面2个设置的Name, BUILD_TYPE 和 GIT_BRANCH,后面会用到,(具体名字叫啥随便,后面会引用到这个)


这个就是你构建项目的代码来源了,
我这里使用的是Gitlab,所以就填写Git地址了,具体的你们使用SVN还是Github还是码云 还是啥的,都大同小异.

源码管理–Credentials

刚刚搭建好的Jenkins这个可能没有咯,点添加吧.

我司使用的是SSH,这个根据你们自己公司的实际环境去自己选择,
以SSH为例,输入对应的Username,Private Key内打开你的C:\Users\你的电脑用户名\.ssh 内的id_rsa文件, 如果没有弄过SSH的,搜索关键字[SSH生成KEY]

注意,复制Private Key 请全部复制,

包括
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
这2个部分,别问我是怎么知道的.


关于Credentials的管理

可能又有人会问,诶呀,我手抖之前添加错了,我又重新添加了一个,现在跑出2个一模一样的,这可肿么办啊…
看图,在这里管理.


话题拐回来继续说 源码管理这一个配置,
指定分支(为空时代表any) : ${GIT_BRANCH}
看图我的红框,想起前面我提起过的 BUILD_TYPE 和 GIT_BRANCH 吗?
你起了对应的Name,然后你在构建代码的时候,对 代码分支和APP接口环境进行选择,会将对应的选择结果赋予这里.

构建–Invoke Gradle Script

现在已经是9012年了,Android已经都是Gradle编译了,Ant对于Android来说已经是 时代的眼泪了, 勾选Invoke Gradle,选择对应的Gradle版本,请和你当前项目gradle/wrapper/gradle-wrapper.properties内distributionUrl的Gradle版本对应.

可能又会有少年问了,这里面没有我想要的Gradle肿么办呢?
保存 – Jenkins回到首页 – Manage Jenkins – Global Tool Configuration – 选择Gradle安装 – 新增Gradle
写好名称,Install from Gradle.org里面选择好对应的版本,再次回来,发现就有了.
至于Task里面写的,按照每个人的项目需求去自定义,

构建–Upload to pyger with apiV2

这个是我前面提及的蒲公英的上传插件.如果安装好了,那就直接把API_KEY填进去,另外2项就用默认就行.

构建后操作–Groovy Postbuild

这里是最重要的地方,前面配置好了,只是可以进行项目的构建和对应的蒲公英上传,
下面这个Groovy语法可以自定义一些拓展的逻辑,比如说将APP上传到蒲公英后的地址和二维码进行保存,然后结合钉钉的智能群助手进行推送,然后展示在群里面.
下面贴出Groovy代码:

import java.util.*;
import java.text.SimpleDateFormat;//构建结果
def buildResult = manager. getResult()
//构建用户
def buildUser= manager.getEnvVariable("BUILD_USER")
//项目名称
def jobName= manager.getEnvVariable("JOB_NAME")
//构建结果页面
def buildUrl= manager.getEnvVariable("BUILD_URL")
//GIT分支
def gitBranch= manager.getEnvVariable("GIT_BRANCH")manager.listener.logger.println("构建分支:"+gitBranch)
manager.listener.logger.println("构建结果:"+buildResult)
manager.listener.logger.println("构建用户:"+buildUser)
manager.listener.logger.println("项目名称:"+ jobName)if(buildResult == "SUCCESS"){//解析蒲公英上传返回数据//apk下载地址apkDownloadUrl = "https://www.pgyer.com/"+ manager.getEnvVariable("buildShortcutUrl")//apk二维码apkQrCode = manager.getEnvVariable("appQRCodeURL")manager.listener.logger.println("apk下载地址"+apkDownloadUrl)  manager.listener.logger.println("apk二维码地址:"+apkQrCode)  dingding("标题","### 《"+jobName+"》构建成功\n分支:"+gitBranch+"\n\n[APK下载地址]("+apkDownloadUrl+")\n![]("+apkQrCode+")\n\n"+buildUser+" "+getNowTime()+" 构建\n\n[查看详情]("+buildUrl+")")
}else if(buildResult == "ABORTED"){dingding("标题","### 《"+jobName+"》构建被终止\n"+buildUser+" "+getNowTime()+" 终止\n\n[查看详情]("+buildUrl+")")
}else{dingding("标题","### 《"+jobName+"》构建失败\n分支:"+gitBranch+"\n\n"+buildUser+" "+getNowTime()+" 构建\n\n[查看详情]("+buildUrl+")")
}//发送钉钉消息
def dingding(p_title,p_text){manager.listener.logger.println("--------------------------"+p_title+p_text)def json= new groovy.json.JsonBuilder()json {msgtype "markdown"markdown {title p_titletext p_text}at {atMobiles([])isAtAll false}}manager.listener.logger.println("发送钉钉数据:"+json)def connection = new URL("你的自定义Webhook机器人的Webhook地址").openConnection()connection.setRequestMethod('POST')connection.doOutput = trueconnection.setRequestProperty('Content-Type', 'application/json')def writer = new OutputStreamWriter(connection.outputStream)writer.write(json.toString());writer.flush()writer.close()connection.connect()def respText = connection.content.textmanager.listener.logger.println("钉钉返回结果:"+respText )
}
//获取当前时间
def getNowTime(){def str = "";SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Calendar lastDate = Calendar.getInstance();str = sdf.format(lastDate.getTime());return str;
}

注意事项

  1. 获取构建分支等信息获取,
  2. 获取蒲公英上传APP成功后的相关信息
    蒲公英上传成功后,会将返回的参数注入为jenkins的全局变量
    注意使用 manage.getgetEnvVariable(“XXX”)去获取,可获取的具体参数信息见文档

https://www.pgyer.com/doc/api#uploadApp

  1. 推送到钉钉群需要的Webhook地址.

构建后操作–Archive the artifacts

存档!!!

补上最后构建成功推送到钉钉群的效果图


写在最后.

Jenkins是一个很灵活的工具,本篇介绍的只是我当前使用的很狭小的一个实例.
结合插件支持各种拓展,进行各种自动化处理.

比如说
自己写shell命令,写各种逻辑,
自动检测代码提交,定时触发自动构建,发送邮件通知等等…
这里我就不列举了.


最后附上项目的Jenkins的插件列表:





Jenkins + 蒲公英 + 钉钉,构建Android APP自动上传获取对应下载二维码加钉钉群通知推送.相关推荐

  1. Android应用--QR的生成(二维码)

    二维码的定义: 二维码 (2-dimensional bar code),是用某种特定的几何图形按一定规律在平面(二维方向上) 分布的黑白相间的图形记录数据符号信息的. 在许多种类的二维条码中,常用的 ...

  2. android USB摄像头做条形码及二维码扫描(1)

    摘要: 1.前言 2.底层配置 3.JNI实现 4.总结 5.BUG及优化记录 android USB摄像头做条形码及二维码扫描(2) 1. 前言 公司做的产品基于android开发板搭建的控制系统, ...

  3. 如何制作APP下载二维码?

    电信诈骗已经成为一个非常严重的社会问题了. 五花八门的诈骗手段总是让人防不胜防,每天都有很多人因为电信诈骗造成严重的财产损失.全国各地的公安部门也纷纷使出了洪荒之力来加强反诈宣传力度.提升民众反诈意识 ...

  4. APP下载二维码微信扫一扫无法打开解决方案

    微信扫一扫屏蔽了APP下载连接无非是想让大家将资源转移到自家平台,国人微信中毒过深,看到二维码首先想到的一定是微信(好强大的用户引导).为了更好的用户体验,只能向腾讯屈服将应用转移到腾讯平台.当然如果 ...

  5. 钉钉开发平台 —H5微应用-- 扫条形码、二维码 api 示例

    扫条形码.二维码 使用说明 客户端 Android iOS PC 支持说明 支持 支持 不支持 dd.biz.util.scan({type: String , // type 为 all.qrCod ...

  6. App上线后,如何使用二维码进行推广

    众所周知,智能手机在当今生活中越来越流行,APP也随之迅速发展,APP随之迅猛发展,APPstroe和android这两大手机商店的应用总数已经突破100万,同时各应用商店的应用数量也不断增加,应用数 ...

  7. Android 比Zing 更快的二维码 条形码扫描Zbar

    之前项目要用做二维码 条形码的扫描 找资料 大多都是Zing 的,但是 zing 扫描比较慢 而且经常扫描半天不出来 ,如果是近距离的人话根本不行, 体验很差 ,最主要还可能是对zing 的理解不够透 ...

  8. Android 扫描、生成、识别二维码、条码 一库搞定

    他来了,他来了,他带着YXing走来了. YXing 集成了CameraX + zxing, 简洁调用,功能完善,自定义扫码界面,再也不用像以前一样cv一堆冗余的Camera代码进项目了. 怎么集成: ...

  9. Android扫一扫和生成二维码(使用华为ScanKit)

    本文主要讲如何使用华为统一扫码scan Kit进行扫一扫以及生成二维码, 有兴趣的可以看一下华为扫描和Zxing扫描的区别 使用步骤 1.在全局的build.gradle文件里添加华为maven仓库 ...

最新文章

  1. linux 上使用wc -l命令快速查看文件内容有多少行,以及如何匹配指定字符查看多少行
  2. .NET 进程和线程
  3. JDK5.0环境下配置PKCS#11
  4. Unity3D手机斗地主游戏开发实战(02)_叫地主功能实现
  5. Sharepoint学习笔记—ECM系列--4 根据位置设置的默认元数据值(Location-Based Metadata Defaults)
  6. ubuntu 配置 静态ip
  7. 东华理工专科计算机应用,计算机专业考研:东华理工大学计算机应用技术专业介绍...
  8. 在线分析mysql死锁详解_记一次线上mysql死锁分析(一)
  9. javax.persistence.TransactionRequiredException: No transactional EntityManager available
  10. 数学建模之存贮模型详解
  11. 李克平教授讲座——《城市道路交叉口规划规范》解读与绿灯间隔(整理文本)...
  12. 复制命令(COPY)
  13. FaceNet 读书笔记
  14. pandas 读取excel文件
  15. # Ubuntu执行sudo apt-get update提示:E: 仓库 “https://mirrors.ustc.edu.cn/ubuntu focal Release” 没有 Release
  16. 让我们红尘作伴活得潇潇洒洒
  17. Gardner定时同步的matlab实现
  18. VCam 虚拟摄像头 V3.1.0 下载 - 天空软件站 - 聊天工具 - 联络聊天
  19. Oracle19c数据库服务
  20. win10从服务器复制文件出现未知错误,win10系统打开公文包提示“发生未知错误 某些文件未复制”的处理办法...

热门文章

  1. centos部署微博_Centos7下部署Python项目
  2. 二本程序员的向上之路——规划书
  3. Selenium实战教程系列(三)--- Selenium中的动作
  4. SequoiaDB分布式数据库2022.2月刊
  5. python中国官方网-python 官网
  6. 查看端口号是否被占用(情况 命令)
  7. split方法可以实现同时使用多个分隔符劈开字符串方法(分隔sql条件)
  8. 用计算机计算下列各式 11x,2020七年级下册数学复习题
  9. 上网行为管理软件能预防电脑中病毒吗?
  10. 计算机二级成绩划分标准,计算机二级成绩查询2021 计算机二级成绩划分标准