目录

Jenkins部署Android篇4之Pipeline流水线

https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fraw.githubusercontent.com%2Fsromku%2Fbuild-android-jenkins%2Fmaster%2Fassets%2Fbuild-android-wip.png&refer=http%3A%2F%2Fraw.githubusercontent.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1649935615&t=43d7d98bdb16cd16c633d285d833a855

为什么用流水线

前面三篇基于自由风格的类型Job创建的构建任务.

虽然已经可以实现了从构建, 打包, 上传, 通知. 但是这个步骤却只针对某一个分支(或者多个分支). 也就是无法根据不同分支处理不同逻辑任务. 只能针对分支再创建一个Job任务

流水线(Pipeline) 让之前页面编辑构建流程, 变成了编写代码去构建. 通过进行一个个任务块编写组成一个大的构建流程. 并且查看构建过程,结果更加直观.

例如下面图片就是, 流水线的构建结果展示:

1.png

每个步骤清晰可见.

流水线 有两种方式实现方式:

  1. 声明式流水线: 通过在任务界面的添加代码
  2. SCM: 通过仓库根目录的Jenkinsfile文件来执行任务.

稍微整理下, 要做什么样的自动化.

  • master分支: 构建项目->打包(Release)->多渠道->上传蒲公英->上传FTP服务器归档->邮件通知(发版)

  • sandbox分支: 构建项目->打包(Sandbox)->上传蒲公英->邮件通知(通知测试人员)

  • dev分支: 构建项目->打包(Debug)->上传蒲公英->邮件通知(通知测试,产品,UI人员)

  • 其他分支: 不处理

  • master分支: 主要保留线上版本代码

  • sandbox分支: 进行预上线环境测试和发布包区别就是log可以输出, 其余一样, (主要检测线上服务器是否有异常, 混淆是否存在问题, 只需产品测试)

  • dev分支: 开发环境测试, 提测后需要UI,产品,测试多方审查

  • 其他分支: 开发基于dev检出创建其他分支开发迭代.

以上步骤因公司而异,

那么流程步骤确定了, 就选择实现方式, 这里选择SCM也就是每个分支下的代码仓库都存在一个Jenkinsfile文件来声明自己构建逻辑.

但这样有个问题, 运维如果需要进行构建的修改, 那么可能也需要频繁的操作开发人员代码仓库, 并且有些步骤任务其实是通用的, 每个文件都声明一个方法, 不利于后期更改. 所以这里选择扩展共享库

扩展共享库: 就是把所有的构建任务细节提取到另一仓库, 并封装成一个个任务方法, 而代码仓库只要选择需要的任务进行组序执行即可.

大体流程: 如下

2.png

没了… 没啥具体实现

整理Docker安装Jenkin Android所需要的大体步骤

是大体步骤, 详细配置前三篇都有.

  1. 安装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     // 设置别名并安装
  1. 打开Jenkins网页localhost:11006,并重置密码,安装推荐插件, 设置账户
  2. 进入到首页, 继续安装其他需要的插件. 如下
插件名称 插件功能
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
  1. 系统管理 -> 全局工具配置
  • JDK环境 内置的openJdk(/opt/java/openjdk), 本地都可以
  • Git环境 内置的(/usr/bin/git), 本地都可以
  • Gradle环境
  1. 系统管理 -> Manage Credentials(凭据)

这一步主要设置访问Git仓库的凭据, 和设置apk签名文件, 和邮箱通知的凭据

需要两个Git仓库

  • 一个项目代码仓库
  • 一个SCM流水线构建流程仓库

需要一个签名文件 需要一个邮箱

  • Username with password类型, 创建邮箱凭据
  • Certificate类型, 创建apk签名文件凭据
  • Secret text类型, git仓库访问
  • Username with passwordt类型, git仓库访问(https方式, 也可以添加ssh使用ssh方式操作)
  1. 系统管理 –> 全局安全设置

标记格式器选择为:Safe HTML

  1. 系统管理 –> 系统配置
  • 修改Jenkins URL
  • 添加系统管理员邮件地址
  • 全局属性中的环境变量添加Android SDK
  • GitHub服务器添加token的Certificate类型凭据(不使用github不需要添加)
  • Global Pipeline Libraries 添加流水线使用的共享仓库
  • Extended E-mail Notification 设置邮件通知发送者
  • Publish over FTP 设置上传文件到服务器配置
  1. 新建流水线任务

必要的设置:

  • 分支源: 添加代码仓库地址
  • 扫描多分支流水线触发器Scan by webhook 设置源代码仓库的钩子监听

如果项目代码分支存在Jenkinsfile文件, 那么就会被添加进来, 共享扩展库如果没问题那么就可以构建