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

JenkinsfileRunner-将Jenkins管道执行封装为命令行工具的实验 Jenkinsfile Runner - 将Jenkins管道执行封装为命令行工具的实验 立即下载

引言

在个推SDK 开发过程中,通常而言一个完整的开发上线流程是这样的:提出需求-> 需求开发 -> 打包测试 -> 问题修复 -> 打包交付测试验证 -> 测试通过 -> 产品上线。

在这个流程中,不难发现打包是一项重复性劳动,而且我们常常会重复经历问题修复阶段,也就意味着我们在一个开发上线周期内需要进行多个重复性的打包过程。如果能优化这个环节,那么开发效率就能得到显著提升。

除此之外,手动打包往往还容易引入一些风险,比如说打包环境不一致、签名文件泄漏、效率低、包的溯源管理困难等等,所以我们需要一套持续集成的方案来减少这种重复性劳动以及规范打包流程。Jenkins作为持续集成的方案,拥有丰富的插件支持,以下我们将为大家介绍个推基于Jenkins的构建实践经验。

Jenkins 简介

Jenkins 是一款开源的 CI&CD 软件,用于自动化各种开发任务,包括构建、测试和部署软件等。Jenkins 支持多种运行方式,比如通过系统包、Docker 或者独立的 Java 程序的运行。

开发者可以通过选择流水线的方式来创建一个 PipeLine 构建任务,如下:

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

 

通过创建 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 {
                echo "构建前准备"
             }
        }        
        stage('Parse Jenkins Config'){
             steps {
                echo "Jenkins 构建参数解析"
             }
        }
        stage('Checkout Code'){
             steps {
                echo "构建代码检出"
             }
        }
        stage('Android Lint'){
             steps {
                echo "代码静态检测"
             }
        }        
        stage('Unit Testing') {
            steps {
                echo "单元测试"
            }
        }
        stage('Clean') {
            steps {
                echo "编译前环境初始化"
            }
        }
        stage('Build SDK') {
            steps {
                echo "构建 SDK"
            }
        }
        stage('Check JAR') {
            steps {
                echo "Jar 包合规性分析"
            }
        }
        stage('Automated Testing') {
            steps {
                 echo "自动化测试"
            }
        }
        stage('Print SDK') {
            steps {
                echo "构建产物归档"
            }
        }
        stage('Email Notification') {
            steps {
                echo "邮件通知"
            }
        }

    }

}

从上述的 Jenkinsfile 中我们不难得知,每个流水线会由不同的 stage 组成,而每一个 Stage 则可以作为一个独立的小功能模块。开发者可以通过将不同的 stage 进行排列组合来进行相应的扩展。

总结

人工构建过程繁琐、操作耗时,还容易在手动打包过程中引入一些风险。个推使用 Jenkins 自动化构建免去了繁琐的人工操作过程,充分解放了研发人员的生产力。此外,个推使用Pipeline方式“持续集成”构建,让研发人员管理、迭代构建工程更加方便。

最后

在这里我也分享一份由几位大佬一起收录整理的Android学习PDF+架构视频+面试文档+源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料

这些都是我闲暇时还会反复翻阅的精品资料。可以有效的帮助大家掌握知识、理解原理。当然你也可以拿去查漏补缺,提升自身的竞争力。

有需要的话可以前往 Github 链接查阅。

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

 

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

 

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

相信一定可以帮助大家!

磁悬浮轴承控制策略设计及性能对比 摘要:针对高速磁悬浮转子控制问题,本文提出多方案对比分析。建立含陀螺效应的5自由度动力学模型,分析陀螺耦合、质量不平衡等关键挑战。对比四种控制策略:基础PID解耦、交叉反馈+自适应陷波、H∞鲁棒+前馈补偿、滑模控制+观测器,从实时性、鲁棒性等维度评估优劣。推荐采用交叉反馈+H∞+自适应陷波的混合方案,通过内环电流环与外环位置环协同,实现陀螺效应动态解耦和扰动抑制。实施步骤包括系统辨识、控制器设计、硬件部署等,需配合实验验证与参数整定。该方案综合性能最优,适用于高转速、强扰动场景。 阅读详情

相关推荐

point transformer v3结构

分割结构: embedding->enc->dec embedding->enc0->enc1->enc2->enc3->enc4->dec3->dec2->dec1->dec0 embedding ->block0->block1 ->dow->block0->block1 ->dow->block0->block1 ->dow->block0->block1-&gt

weixin_45625419的博客 583

个推基于Jenkins的自动打包构建实践

作者|个推高级安卓研发工程师 萨其拉 引言 在个推SDK 开发过程中,通常而言一个完整的开发上线流程是这样的:提出需求-> 需求开发 -> 打包测试 -> 问题修复 -> 打包交付测试验证 -> 测试通过 -> 产品上线。 在这个流程中,不难发现打包是一项重复性劳动,而且我们常常会重复经历问题修复阶段,也就意味着我们在一个开发上线周期内需要进行多个重复性的打包过程。如果能优化这个环节,那么开发效率就能得到显著提升。 除此之外,手动打包往往还容易引入一些风险,比如说打包环.

个推技术学院 539

【无人机设计与控制】基于PID控制的四旋翼无人机系统Matlab仿真

本文设计并仿真了基于PID控制的四旋翼无人机系统。首先,建立了四旋翼无人机的数学模型,涵盖了无人机的动力学和控制系统。通过PID控制器对四旋翼的姿态和位置进行控制,以实现其稳定飞行。使用MATLAB/Simulink对该系统进行仿真,验证了PID控制算法在四旋翼控制中的有效性。仿真结果表明,PID控制能够较好地调节四旋翼的飞行姿态,并有效抑制外部干扰,使得无人机能够保持平稳飞行。

2401_84610415的博客 1804

jenkins 流水线构建 并发送html邮件

#!/usr/bin/env groovy pipeline{ agent any environment { REVISION = "OperationCenterPlatform.${env.BUILD_ID}" project_name = "ocp-web" project_version = "0.0.1-SNAPSHOT" git_project_bran...

weixin_39517591的博客 2227

告别卡顿!用U盘给你的MacBook Pro 2015+来一次macOS Monterey的‘大扫除’式安装

每次系统升级后,老款MacBook Pro用户最常抱怨的就是"怎么比之前更卡了?"——这不是错觉。系统迭代过程中积累的缓存文件、残留配置和隐形服务,就像房间角落堆积的灰尘,拖慢了整台机器的响应速度。而通过U盘进行的macOS Monterey全新安装,本质上是一次彻底的"数字大扫除":它不仅替换系统文件,还会重建所有索引、清理磁盘碎片,甚至能解决某些玄学般的卡顿问题。对于2015款及之后的MacBook Pro用户,这种安装方式能让老设备重获新生。

weixin_28731223的博客 312

SAP物料主数据表结构全解析:ABAP开发与MM模块必知必会

本文深入解析SAP物料主数据的核心表结构,涵盖MARA、MAKT、MARC、MARD及MVKE等关键表。详细阐述了物料主数据在ABAP开发和MM模块中的存储逻辑与关联关系,帮助开发者和顾问高效处理数据查询、增强功能及业务故障排查,是掌握SAP物料管理基础的必读指南。

weixin_29216957的博客 383

第一集 玩转Android-Studio之认识插件-----摸鱼神器

作为新手小白,我们要正能量,摸鱼只是工作的一部分,是缓解身体机能,大脑疲劳的醒神利器,并没有任何不良引导以上就是今天要讲的内容拉,看到的小伙伴马上体验一下吧。

qq_31876537的博客 1481

Python爬虫实战:避开巨潮资讯网反爬,稳定获取上市公司年报PDF下载地址

本文详细介绍了如何使用Python和Selenium突破巨潮资讯网的动态加载限制,稳定获取上市公司年报PDF下载地址。通过模拟真实用户操作、智能等待策略和反反爬虫技巧,帮助开发者高效爬取财经数据,适用于股票代码查询和年报分析等场景。

weixin_29065659的博客 1668

Intellij IDEA摸鱼插件 看电子书 AndroidStudio 摸鱼插件 摸鱼神器 IdeaTxt

插件项目地址:GitHub - lechenghhh/IdeaTxt: Idea Plugins 项目中包含jar包 按照idea/Android studio插件的安装方式进行安装 使用效果:各项设置与快键键:Alt+P下翻页 Alt+O上翻页并显示Log(伪装) 目前项目还是个缝合怪,单线程,大文件加载较慢,且只有单行显示,无法只能适配宽度,为了简化操作仅有两个快键键,欢迎优化改进贡献~~~ .........

sinat_30352293的博客 5259

Modbus CRC和LRC算法研究及代码实现

一、CRC(循环冗余校验) 1 CRC16实现流程 XOR = 异或 N = 字节的信息位 POLY = CRC16 多项式计算 = 1010 0000 0000 0001 (生成多项式 = 1 + x2 + x15 + x16) 在CRC16中,发送的第一个字节位低字节 2 CRC16实例推导 3 CRC16代码实现 unsigned short CRC16(unsigned char *a...

Hi, Boy 2892

基于STM32、HAL库的WF282A气压传感器 驱动程序设计

测量范围:0-2.5MPa(可根据需求选择其他量程)输出方式:I2C或SPI数字接口。温度补偿范围:-20℃~85℃。低功耗设计,适合电池供电应用。工作电压:3.3V/5V。精度:±0.1%FS。

corlin6688的博客 395

Overlay之在android studio虚拟机上的运行

查看了网上很多的资料,全部是大同小异,使用mk文件,创建的替换文件放到/vendor/overlay。 但是在android studio的虚拟机里面,却没有权限进行文件的编写,就是没有-w权限。所以现在进行总结一下。 对于android studio中进行Overla资源替换。首先需要保证包签名相同,然后需要先将overlay等替换的模块进行安装,就是将对应模块在虚拟机中进行安装。如图所示: 先安装overlay_green、overlay_red等替换的资源,然后在安装app模块。对于安装信息

qq_55663458的博客 743

阻抗控制器实现机器人关节运动控制

本文先对做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章如:PID反馈控制器、前馈控制器、前馈+反馈控制器等等如:机械臂模型(几何解算)控制器、小车底盘运动学模型(几何解算)的控制器、四足机器人模型(预测迭代)的控制器等等如:微分平坦(无人机的轨迹跟随)等等如:MPC优化控制算法如:线性二次调节器(LQR)是基于模型的控制器,使用车辆状态来使误差最小化,Apollo使用LQR进行横向控制。横向控制包含四个组件:横向误差、横向误差的变化率、朝向误差和朝向的变化率。

qq_35635374的博客 366

怎样让你更快的完成工作去“摸鱼”,35岁之后找不到工作怎么办

前言 今天分享的是一位5年工作经验的Java工程师在帝都的面试经验总结,看看这些互联网公司都爱问些什么题,希望对大家的面试有指导意义。 从事Java开发也有5年经验了,10月初自己的开启面试经历之旅,前后应该20天左右,主面互联网公司,一二线大公司或者是融资中的创业公司都面试过,也拿了几个offer,其中包括奇虎360、字节跳动等。 } } } pipeline 和agent分别是声明式流水线的两种特定语法,后者为流水线指定了一个特定的工作区。stages 由多个不同的stage组成,stage可以展示在

m0_69440777的博客 204

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

带你一起来摸鱼(快看摸鱼方法了)

摸鱼源自成语“浑水摸鱼”现多用在上班族之间,指上班时间偷懒,不认真工作。具体表现在上班时间做与工作无关的事。或为凑齐八小时工作时间,早早做好准备等着下班。俗话说,“只工作不玩耍,聪明的孩子也变傻”,这句话似乎让上班摸鱼成了政治正确,上班不摸鱼,好像都对不起自己。 因此,这次我想给大家介绍一些摸鱼工具和摸鱼技巧,让你暂时从枯燥的工作中解放出来,合理享受“带薪休假”。大家是否都喜欢摸鱼吗?让哦带你一起来摸鱼吧 01.摸鱼工具 【电子书】 ①reader作为一款看小说软件,可以将你的屏幕

Mr_strive的博客 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

谈一谈「摸鱼哲学」

loonggg读完需要4分钟速读仅需 2 分钟我发现最近关于职场的一些词语或者话题真的很火,出现了很多之前不太出现的词语,比如:职场 PUA ,摸鱼哲学,内卷化,奋斗逼,打工人之类的,很...

非著名程序员 1395

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

员工经常在“摸鱼”,到底出了什么问题?

摘要:摸鱼现象背后反映的是管理机制的系统性失灵,而非单纯的员工懈怠。管理者需转变角色,从监督者变为价值创造者:1)通过深度沟通挖掘员工内在动机;2)构建"70%基础+30%挑战"的成长阶梯;3)建立即时反馈系统,让进步可视化。关键在于将员工被动执行转化为主动创造,智能绩效工具可辅助实现这一管理转型。真正的管理升级在于激发潜能,而非简单管控。

2501_90178686的博客 1513

摸鱼王

摸鱼:能让你在工作中心旷神怡、惊心动魄、肾上腺素飙升,在老大眼皮底下摸鱼的快感让人欲罢不能。如果你在上班时间点进了这篇文章,你肯定是一位「摸鱼」老手。我朋友大强就是一名摸鱼老手,人称摸鱼王...

方志朋的博客 547

摸鱼小技巧(×)离职小技巧(√)

对于摸鱼,掘金的各位想必不陌生了,看上图就知道了。但是摸鱼怎么摸出新意、摸出境界那就值得探讨了,所以我们今天不讲技术,只讲摸鱼,为此,我采访了清华大学终生致力于摸鱼学研究的张三教授 张三教授核心研究成果: 摸鱼的意义:能让你在工作中心旷神怡、惊心动魄、肾上腺素飙升,在老大眼皮底下摸鱼的快感让人欲罢不能。 在我的苦苦哀求下,张三教授答应将他的摸鱼大法传授给各位。希望每个读者在自己的鱼塘有所建树,摸出来的鱼又肥又大。 提醒一下,一定要读到最后,否则你会错过一款摸鱼终极技能 01. 敲着代码把小说.

linuxguitu的博客 2106

摸鱼王!

往期热门文章: 1、抖音服务器带宽有多大,才能供上亿人同时刷?2、Spring新版本抛弃JVM,可独立部署,网友:要自立门户???3、记一次因 Redis 使用不当导致应用卡死 bug 的...

Java后端技术 1738

程序员每天工作摸鱼俩小时,月薪35K?

职场上有很多奇奇怪怪的事。比如说有人爆肝996,工资却还养不活自己。有人每天工作摸鱼,但是却月薪数万。前端时间,小编在某职场社交平台上看到这么一则帖子#程序员摸鱼2小时月入35k#仔细看下...

优快云业界要闻 953

宝,来摸鱼了!

摸鱼:能让你在工作中心旷神怡、惊心动魄、肾上腺素飙升,在老大眼皮底下摸鱼的快感让人欲罢不能。如果你在上班时间点进了这篇文章,你肯定是一位「摸鱼」老手。我朋友大强就是一名摸鱼老手,人称摸鱼王...

Python数据之道 808

VSCode 摸鱼神器,可以了解一下?

现在使用VsCode编码的人越来越多,凭借着免费、开源、轻量、跨平台的特点收货了一大批忠实粉丝。以其可支持扩展程序(通过安装扩展程序,VSCode可以支持更多新的语言、界面主题、测试器,以及更多的增值服务),而备受广大开发者追捧。除了开发插件外,有哪些可以上班摸鱼的插件呢?这里给大家写一个渔夫指南,汇总10个在VSCode中可以“摸鱼”的好玩插件。如果你知道还有更好玩的摸鱼插件,欢迎推荐!划重点:摸鱼有风险,辞退我不管!下载量:3.6万。

朱雀随云记的博客 1730
上一篇: 阿里巴巴的中台架构PPT告诉你,数据中后和业务中台有什么关系?
下一篇: 总结了30个例子之后,我悟到了Flutter的布局原理
懂你的大海
博客等级 码龄6年 9049粉丝 1381原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值