程序地带

使用Jenkins+Pipline 持续构建自动化部署之安卓源码打包、测试、邮件通知


一、引言

Jenkins 2.x的精髓是Pipeline as Code,那为什么要用Pipeline呢?jenkins1.0也能实现自动化构建,但Pipeline能够将以前project中的配置信息以steps的方式放在一个脚本里,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程,形成流水式发布,构建步骤视图化。简单来说,Pipeline适用的场景更广泛,能胜任更复杂的发布流程。举个例子,job构建工作在master节点,自动化测试脚本在slave节点,这时候jenkins1.0就无法同时运行两个节点,而Pipeline可以。


二、Pipeline的几个基本概念:
Stage: 阶段,一个Pipeline可以划分为若干个Stage,每个Stage代表一组操作。注意,Stage是一个逻辑分组的概念,可以跨多个Node。
Node: 节点,一个Node就是一个Jenkins节点,或者是Master,或者是slave,是执行Step的具体运行期环境。
Step: 步骤,Step是最基本的操作单元,小到创建一个目录,大到构建一个Docker镜像,由各类Jenkins Plugin提供。
三、PIpeline语法

1.Pipeline支持两种语法:Declarative Pipeline(在Pipeline 2.5中引入,结构化方式)和Scripted Pipeline,两者都支持建立连续输送的Pipeline。
共同点:
两者都是pipeline代码的持久实现,都能够使用pipeline内置的插件或者插件提供的steps,两者都可以利用共享库扩展。
区别:
两者不同之处在于语法和灵活性。Declarative pipeline对用户来说,语法更严格,有固定的组织结构,更容易生成代码段,使其成为用户更理想的选择。但是Scripted pipeline更加灵活,因为Groovy本身只能对结构和语法进行限制,对于更复杂的pipeline来说,用户可以根据自己的业务进行灵活的实现和扩展。下面介绍中使用Scripted Pipeline语法。


四、Pipeline配置
1.新建一个“流水线”的job


2.配置Pipeline脚本。


上图是以执行git仓库的脚本文件配置的Pipline脚本,也可以选择第一种方式,直接输入以下脚本也是可以的


pipeline{
agent {
label "master"
}
stages{
stage("安卓程序源码同步") {
steps {
sh "mkdir -p AndroidSampleApp"
dir("AndroidSampleApp"){
git branch:"master", url:"https://gitee.com/sfboy/AndroidSampleApp.git"
}
}
}
stage("安卓编译打包") {
steps {
sh """
. ~/.bash_profile
cd AndroidSampleApp
sh gradlew clean assembleDebug
"""
}
}
stage("安卓部署") {
steps {
sh """
. ~/.bash_profile
cd AndroidSampleApp
apk=app/build/outputs/apk/debug/app-debug.apk
{
#try: 卸载现有的安卓app
adb uninstall com.appsflyer.androidsampleapp
} || {
#catch
echo "no com.appsflyer.androidsampleapp package"
}
#安装安卓app
adb install $apk
"""
}
}
stage("自动测试程序源码同步") {
steps {
sh "mkdir -p iAppBVT_Python"
dir("iAppBVT_Python"){
git branch:"master", url:"https://gitee.com/sfboy/iAppBVT_Python.git"
}
}
}
stage("运行自动化测试") {
steps {
sh """
. ~/.bash_profile
cd iAppBVT_Python
#更新python依赖库
pip3 install -r requirements.txt
#运行自动化测试
pytest -sv test/bvt_test.py --tc-file iAppBVT_Python.json --tc-format json
"""
}
}
stage("发布测试包") {
steps {
archiveArtifacts artifacts: "AndroidSampleApp/app/build/outputs/apk/debug/app-debug.apk"
}
}
stage("通知邮件") {
steps {
emailext body: "$DEFAULT_CONTENT", recipientProviders: [[$class: "RequesterRecipientProvider"]], subject: "$DEFAULT_SUBJECT"
}
}
}
}

然后保存即可,Pipline的配置相对还是比较简单的,构建结果如下


五、总结

Pipeline可以很方便实现流水式的持续交付,执行阶段通过视图一目了然。更过详细的资料可以访问官方文档 https://jenkins.io/doc/book/pipeline/


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/feng0815/p/14287056.html

随机推荐

long 雪花算法_海量数据分库分表方案(一)算法方案

long 雪花算法_海量数据分库分表方案(一)算法方案

本文主要描述分库分表的算法方案、按什么规则划分。循序渐进比较目前出现的几种规则方式,最后第五种增量迁移方案是我设想和推荐的方式。后续章再讲述技术选型和分库分表后带来的问题。。背景随着业务...

梁大发 阅读(671)

基建管控系统_基建项目管理系统

1基建项目管理系统班级:造价一班学号:2011311073姓名:张荣斌成绩:一、需求分析随着现代技术的发展,基建档案数字资源的建设...

静默修行 阅读(836)

Linux安装jdk8环境

话不多说,走起1,安装vim命令包,此操作如果执行不了,需要使用root权限执行//执行以下命令,进行安装,下图为执...

子非我鱼 阅读(431)

python编码程序_python 编码

网页的编码方式是简体中文gb2312(查看网页源码,可以看到),而python内部的编码方式为unicode,之前的代码是这样的:content...

weixin_39987847 阅读(710)

pip下载包成功,但是找不到包

原因1:版本不对,如用环境变量设置的python3.7路径,那么用的就是3.7的pip.exe安装了包。却用的是2.7的python运行原因2:...

巫_月 阅读(896)

配置虚拟机域名

购买云虚拟主机,火速云(www.hsyes.com)价格便宜比较适合学生党(36-266¥)购买阿里域名添加域名解析进入阿里云搜索域名进入如下界...

转业不 阅读(247)

spark编程基础--2.2scala基础知识

spark编程基础--2.2scala基础知识

 :load  读写文件 for循环表达式对循环的控制breakable数据结构--数组数据结构--元祖数据结构--列表  Range集合- 可变的集合可以在原集合上进行添加、更新及删除...

GLoomyHarbor 阅读(686)

Virtual DOM 的实现原理

VirtualDOM的实现原理概念为什么使用VirtualDOM虚拟DOM的作用和虚拟DOM库虚拟DOM的作用虚拟DOM库Snabbdom基本使用创建项目导入Snabbdom代码演示模块Snabbdo...

shenzhenya 阅读(687)

em模型补缺失值_ML4fun系列(六):EM算法

em模型补缺失值_ML4fun系列(六):EM算法

EM算法最早接触EM算法的地方想必就是在对高斯混合模型进行求解的时候。那就从高斯混合模型开始了解EM算法的工作机理。高斯混合模型(GMM)高斯混合模型是一种无监督学习方法.他是用多个高斯分布函数的线性...

枣泥酥 阅读(489)