Jenkins部署Android篇4之Pipeline流水线
- Jenkins部署Android篇-1.Mac安装Jenkins
- Jenkins部署Android篇-2.Jenkins使用Github的Webhooks
- Jenkins部署Android篇-3.构建完整Android自动化流程
- Jenkins部署Android篇-4.Pipeline流水线
为什么用流水线
前面三篇基于自由风格的类型Job创建的构建任务.
虽然已经可以实现了从构建, 打包, 上传, 通知. 但是这个步骤却只针对某一个分支(或者多个分支). 也就是无法根据不同分支处理不同逻辑任务. 只能针对分支再创建一个Job任务
而流水线(Pipeline) 让之前页面编辑构建流程, 变成了编写代码去构建. 通过进行一个个任务块编写组成一个大的构建流程. 并且查看构建过程,结果更加直观.
例如下面图片就是, 流水线的构建结果展示:
每个步骤清晰可见.
流水线 有两种方式实现方式:
- 声明式流水线: 通过在任务界面的添加代码
- SCM: 通过仓库根目录的Jenkinsfile文件来执行任务.
稍微整理下, 要做什么样的自动化.
-
master分支: 构建项目->打包(Release)->多渠道->上传蒲公英->上传FTP服务器归档->邮件通知(发版)
-
sandbox分支: 构建项目->打包(Sandbox)->上传蒲公英->邮件通知(通知测试人员)
-
dev分支: 构建项目->打包(Debug)->上传蒲公英->邮件通知(通知测试,产品,UI人员)
-
其他分支: 不处理
-
master分支: 主要保留线上版本代码
-
sandbox分支: 进行预上线环境测试和发布包区别就是log可以输出, 其余一样, (主要检测线上服务器是否有异常, 混淆是否存在问题, 只需产品测试)
-
dev分支: 开发环境测试, 提测后需要UI,产品,测试多方审查
-
其他分支: 开发基于dev检出创建其他分支开发迭代.
以上步骤因公司而异,
那么流程步骤确定了, 就选择实现方式, 这里选择SCM也就是每个分支下的代码仓库都存在一个Jenkinsfile文件来声明自己构建逻辑.
但这样有个问题, 运维如果需要进行构建的修改, 那么可能也需要频繁的操作开发人员代码仓库, 并且有些步骤任务其实是通用的, 每个文件都声明一个方法, 不利于后期更改. 所以这里选择扩展共享库
扩展共享库: 就是把所有的构建任务细节提取到另一仓库, 并封装成一个个任务方法, 而代码仓库只要选择需要的任务进行组序执行即可.
大体流程: 如下
没了… 没啥具体实现
整理Docker安装Jenkin Android所需要的大体步骤
是大体步骤, 详细配置前三篇都有.
- 安装Blue Ocean镜像
docker run -d
-p 11006:8080 // 设置外部访问接口为11006
-p 11007:50000
-v /etc/localtime:/etc/localtime // 设置时区
-e TZ="Asia/Shanghai"
-v /var/run/docker.sock:/var/run/docker.sock
-v /Users/suzeyu/Documents/workspace/docker/jenkins_mount/jenkins:/var/jenkins_home // 挂载镜像工作目录为本地电脑的Jenkins文件夹
-v /Users/suzeyu/Library/Android:/usr/local/android // 挂载Android SDK
-v /Users/suzeyu/.gradle/wrapper/dists:/usr/local/gradle // 挂载Gradle
--name jenkinsblue jenkinsci/blueocean // 设置别名并安装
- 打开Jenkins网页localhost:11006,并重置密码,安装推荐插件, 设置账户
- 进入到首页, 继续安装其他需要的插件. 如下
插件名称 | 插件功能 |
---|---|
Android Signing | android打包签名 |
Build Name and Description Setter | 优化Job的任务名字 |
Build Timestamp | 时间格式化插件 |
build user vars | 优化Job的任务名字 |
Date Parameter | 时间参数 |
description setter | |
Email Extension | 邮件通知 |
Generic Webhook | git钩子 |
Multibranch Scan Webhook Trigger | git钩子 |
Publish Over FTP | 上传其他文件服务器 |
Upload to pgyer | 蒲公英上传apk |
- 系统管理 -> 全局工具配置
- JDK环境 内置的openJdk(/opt/java/openjdk), 本地都可以
- Git环境 内置的(/usr/bin/git), 本地都可以
- Gradle环境
- 系统管理 -> Manage Credentials(凭据)
这一步主要设置访问Git仓库的凭据, 和设置apk签名文件, 和邮箱通知的凭据
需要两个Git仓库
- 一个项目代码仓库
- 一个SCM流水线构建流程仓库
需要一个签名文件 需要一个邮箱
- Username with password类型, 创建邮箱凭据
- Certificate类型, 创建apk签名文件凭据
- Secret text类型, git仓库访问
- Username with passwordt类型, git仓库访问(https方式, 也可以添加ssh使用ssh方式操作)
- 系统管理 –> 全局安全设置
标记格式器选择为:Safe HTML
- 系统管理 –> 系统配置
- 修改Jenkins URL
- 添加系统管理员邮件地址
- 全局属性中的环境变量添加Android SDK
- GitHub服务器添加token的Certificate类型凭据(不使用github不需要添加)
- Global Pipeline Libraries 添加流水线使用的共享仓库
- Extended E-mail Notification 设置邮件通知发送者
- Publish over FTP 设置上传文件到服务器配置
- 新建流水线任务
必要的设置:
- 分支源: 添加代码仓库地址
- 扫描多分支流水线触发器的Scan by webhook 设置源代码仓库的钩子监听
如果项目代码分支存在Jenkinsfile文件, 那么就会被添加进来, 共享扩展库如果没问题那么就可以构建