怎样让你更快的完成工作去“摸鱼”,GitHub重磅官宣

文章介绍了个推如何使用JenkinsPipeline进行版本控制和构建管理,强调了代码检测、模块组合、单元测试和Docker容器在打包流程中的作用,以实现自动化和可控的构建环境。
摘要由CSDN通过智能技术生成

通过创建 Jenkinsfile 进行版本控制,如下:

怎样让你更快的完成工作去“摸鱼”?

Jenkins Pipeline 允许你像写代码一样管理你的构建脚本。我们通常可以通过创建 Jenkinsfile 控制版本从而更好地进行功能的更新迭代。一个声明式流水线语法的基本结构如下:

pipeline {

agent any

stages {

stage(‘Build’) {

steps {

//

}

}

stage(‘Test’) {

steps {

//

}

}

stage(‘Deploy’) {

steps {

//

}

}

}

}

pipeline 和agent分别是声明式流水线的两种特定语法,后者为流水线指定了一个特定的工作区。stages 由多个不同的stage组成,stage可以展示在 stage view 中,用来表示构建环节中的不同阶段。steps我们可以理解成每个构建阶段中包含的不同步骤。通常我们的构建指令可以在这里编写。

接下来本文将介绍关于个推使用 Jenkins 持续集成方案的实践(本文基于 Jenkins 2.19,使用 Jenkins Pipeline 构建)。

需求分析

====

以个推的实践经验来分析,在打包过程中,我们最好能有一种控制代码风险的机制,这种机制能够自动化地控制有关风险代码进入打包环节,并中断打包流程,给出风险警示。另外,中大型项目的模块依赖往往比较复杂,我们应提供一种按需依赖组合的方式。研发人员还可以引入一些自动化测试,保证代码的质量。综上所述,一个打包方案的需求分析如下:

  1. 代码检测:在多人开发中,除了代码 review,我们还需要在构建阶段引入一定的代码检测机制,对一些风险代码进行扫描检测,比如内存泄漏、不可退出循环等等,以规避此类代码打包上线。

  2. 模块组合:个推 SDK 有许多不同的功能业务模块,但是一些模块并非打包所必须,所以在打包的过程中研发人员需要根据不同的需求将相应的模块组合打包,输出产物。

  3. 单元测试:为了在一定程度上规避问题代码的上线,在构建之前,我们需要先对代码进行单元测试。只有通过了单元测试才能继续进行SDK构建。

  4. SDK 构建:个推 SDK 经常会有一些定制需求,而这些定制需求的功能类似,所以我们可以根据不同的定制需求,结合个推的预编译插件,选择编译不同的代码,以减少开发成本。

  5. Jar/AAR 文件合规性检验:对 SDK 来说,构建输出的产物一般为 aar 或 jar 文件。为保证输出的文件合规性,我们需要对输出产物的格式(包括版本号、域名等信息)做最终的检测。

  6. 真机自动化测试(可选):如果我们希望生成的 SDK 可以在真机上模拟运行测试,则可以选择这个步骤。

  7. 资料包归档:由于我们最后输出的文件包含集成文档、demo 等等,所以构建的最后阶段,我们需要将这些资源文件进行归档并放到指定的目录下。

  8. 通知构建者:有些时候构建可能需要一定的时间,构建者会异步地去处理其他事情。当构建完成的时候,我们需要通知相关的构建人员。

根据上述需求的分析,一个完整的持续集成流程图如下所示:

怎样让你更快的完成工作去“摸鱼”?

首先,进入准备阶段(prepare), 在该阶段会进行打包前的准备工作,比如环境准备等。接着是解析编译打包相关参数(parse jenkinsConfig), 用于之后的打包构建,包括模块依赖组合的支持等。

然后是拉取相关打包代码(checkout code)阶段。随后进入代码检测(Android Lint)阶段和单元测试阶段(Unit Testing)。通过前面的单元测试以及代码检测之后就可以进入我们的编译 SDK 阶段(Build SDK)了, 在该阶段我们可以配合个推的预编译插件以及相关的打包环境变量参数,选择相对应的模块组合或者选择对应的功能代码进行按需编译。

编译完成后,我们需要对相关的输出产物(JAR/AAR)进行格式检测(CheckJar 阶段)。待检测通过就可以进行真机模拟测试了(Automated Testing 阶段,可选),随后就可以输出构建产物(PrintSDK 阶段)并发送邮件通知相关构建人员(Email Notification 阶段)。至此,一次完整的打包流程已经结束。

Android 构建环境管理

==================

上文介绍了打包构建方案的流程,但是在实践中,我们会发现随着构建的任务越来越多,构建的环境会变得越来越繁杂,难以管理。

痛点分析:当我们依赖于宿主机构建 Android 时,不同的项目有着不同的 gradle 环境。随着 gradle 的升级、项目的迭代,当不同的构建项目任务数量越来越庞大时,宿主机的 gradle 环境就越容易出现污染。另外,由于构建的环境依赖宿主机的编译环境,一旦宿主机的编译环境发生变化,就很容易对构建项目产生影响。

为解决这个问题,我们可以将不同的 Android gradle 构建环境放进一个 Docker 容器中。Docker 是一个开源的应用容器引擎,可以实现虚拟化,也可以由开发者打包应用或者依赖包到一个轻量级、可移植的容器,然后发布至不同的机器上。容器完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 App), 更重要的是容器性能开销极低。

在每次编译构建时我们都依赖于一个 Docker 容器的环境,通过这种方式将任务之间的编译环境以及与宿主机之间通过 Docker 容器隔离开来,这样可以保证宿主机的环境变化对编译任务不产生影响,保证构建环境的干净。再之后随着 gradle 版本升级,我们需要升级并发布对应的Docker镜像版本,以兼容高版本的编译环境、做相应的环境版本管理。

Jenkins Pipeline 提供了使用 Docker 镜像作为构建环境的功能,代码如下:

pipeline {

agent {

docker {

image ‘allbears/jenkins-android:1.0.1’

}

}

}

维护和扩展

使用 Pipeline 构建时,开发者可以通过维护 Jenkinsfile对打包功能进行版本管理。这种构建方式更方便,开发者可以自由地回归历史版本进行打包。Jenkinsfile 的大致结构模板如下。

pipeline{

agent {

docker {

image ‘allbears/jenkins-android:1.0.1’ //指定构建环境

}

}

stages {

stage(‘Prepare’){

steps {

总结

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的Android开发中高级必知必会核心笔记,共计2968页PDF、58w字,囊括Android开发648个知识点,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。


以上分享【Android开发中高级必知必会核心知识笔记】七大模块整套学习资料均免费分享,需要的小伙伴,我已经上传到GitHub了,大家自取就可以了。白嫖可以,别忘了给我点个关注哈。

【Android开发中高级必知必会核心知识笔记】

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

2021年虽然路途坎坷,都在说Android要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。相信自己,没有做不到的,只有想不到的。

虽然面试失败了,但我也不会放弃入职字节跳动的决心的!建议大家面试之前都要有充分的准备,顺顺利利的拿到自己心仪的offer。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

img-xsic8sWP-1711015500960)]
[外链图片转存中…(img-yuMiLGFS-1711015500960)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-eMtRGz9Y-1711015500960)]

  • 28
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值