Jenkins高级篇之Pipeline代码自动化
Anthony_tester
这个作者很懒,什么都没留下…
展开
-
Jenkins高级篇之Pipeline语法篇-1-Pipeline基本介绍
这篇是Pipeline学习的Hello World篇,任何新知识开始学习都比较困难。耐心一点,坚持多看一些官网文档。概念积累多了,我们才能运用和尝试一些具体的实战练习。这篇主要介绍,Pipeline的基本概念,包括,什么是Pipeline, Pipeline脚本类型划分,为什么要选择Pipeline,以及Pipeline一些大的概念,细节的知识,我们后续文章会慢慢学习。 1. 官网文章...原创 2018-10-16 19:30:48 · 21747 阅读 · 6 评论 -
Jenkins高级篇之Pipeline语法篇-2-第一个Pipeline脚本练习
前面一篇,介绍了什么是Pipeline,和Pipeline的基本概念,和几个关键字的基本含义的介绍,真正的涉及到Pipeline的语法还没有开始介绍。这篇先来介绍第一个Pipeline代码,分别用两种模式来写,逐渐开始展开Pipeline的语法学习。1.前提条件准备1)准备一个Jenkins环境我个人有一个VPS,搭建了一个Jenkins,供大家参考。我这个系列的脚本涉及Pipelin...原创 2018-10-17 22:17:53 · 14137 阅读 · 7 评论 -
Jenkins高级篇之Pipeline语法篇-3-第一个Pipeline代码详细解释
前面一篇,我用Jenkins支持的脚本输入框执行构建,还用了github上拉取代码下来进行构建项目。这篇,就来详细解释下每行代码的含义,还有就是复习一下第一篇提到的几个关键字,这样的基础中的基础知识。1.Declarative代码如下pipeline { agent any stages { stage('Build') { ...原创 2018-10-18 21:32:10 · 11323 阅读 · 1 评论 -
Jenkins高级篇之Pipeline语法篇-4-Declarative Pipeline语法-agent
这篇开始跟着官网Pipeline文章来具体学习Pipeline语法知识。我们先从Declarative 模式开始,当然,以后我个人主推使用这个模式,前面已经说了原因。这里再说下Declarative的特点,Declarative Pipeline是Jenkins Pipeline 的一个相对较新的补充, 它在Pipeline子系统之上提出了一种更为简化和有意义的语法。我看到有人把Declarati...原创 2018-10-22 20:32:33 · 20784 阅读 · 3 评论 -
Jenkins高级篇之Pipeline语法篇-5-Declarative Pipeline语法-post/stages/steps
上一篇学习了Agent的这个指令和相关参数的基本使用,基本上掌握了node这个可选参数就好。这一篇,来学习post和stages指令。1.post指令基本概述post部分定义将在Pipeline运行或阶段结束时运行的操作。一些条件后的块的内支持post:部分always,changed,failure,success,unstable,和aborted。这些块允许在Pipeline运行...原创 2018-10-22 20:49:15 · 15876 阅读 · 2 评论 -
Jenkins高级篇之Pipeline语法篇-6-Declarative Pipeline指令:environment/options/parameters
本篇继续介绍Pipeline的基础语法,这篇先看看指令。然后看看常见的几种参数的手工创建和自动化代码创建过程。 指令1:environment该environment指令指定一系列键值对,这些对值将被定义为所有步骤的环境变量或阶段特定步骤,具体取决于environment指令位于Pipeline中的位置。解释一下什么意思,environment{…}, 大括号里面写一些键值对,也就...原创 2018-10-29 21:41:55 · 16839 阅读 · 8 评论 -
Jenkins高级篇之Pipeline语法篇-7-Declarative Pipeline指令:triggers/stage/tool
本篇继续学习Declarative Pipeline的相关指令,本篇学习三个指令,分别是触发器(triggers),stage和tool。触发器主要是方便周期控制自动化提交,stage是在stages{...}下的一个指令,我们平台的大部分代码都在stage内完成,tool主要就是为了三大工具(jdk, gradle,maven)提供环境变量服务的。指令1:triggers该trigger...原创 2018-10-30 20:27:00 · 9312 阅读 · 5 评论 -
Jenkins高级篇之Pipeline语法篇-8-Declarative Pipeline指令:input/when
本篇继续学习指令,input和when这两个。其中input很少使用,when使用多一些,特别涉及嵌套以及逻辑控制,使用when比较好。 指令1:input该input指令允许在一个stage{…}显示提示输入等待。在inpt{…}写一些条件,然后用户触发构建这个job,但是这个时候没有接收到有效的input, job会一直在等待中,你可以在例如job #1的output consol...原创 2018-10-31 20:06:29 · 16689 阅读 · 0 评论 -
Jenkins高级篇之Pipeline-补充篇-如何添加一个windows节点的jenkins agent 服务
为了演示多节点的jenkins环境,我这里补充一篇文章,介绍如何在一个master的jenkins环境上添加一个windows节点。由于我的master 机器是linux,所以我现在就一步一步介绍如何添加一个windows Jenkins 节点到一个linux的master的jenkins,顺便测试一下agent这个指令。1.到 new node页面点击到jenkins->Manag...原创 2018-10-31 22:01:58 · 12033 阅读 · 3 评论 -
Jenkins高级篇之Pipeline语法篇-9-多个stage的关系:顺序和并行
在Declarative Pipeline模式的代码中,可能会在一个stages{…}中声明一窜嵌套的stages{…}, 并以顺序执行。需要指出的是,一个stage{…}必须有且只有一个steps{…}, 或者parallel{…} 或者stages{…}看看下面这个顺序嵌套例子代码pipeline { agent none stages { stage...原创 2018-11-01 21:50:46 · 34717 阅读 · 8 评论 -
Jenkins高级篇之Pipeline方法篇-Pipeline Utility Steps-1-方法findFiles
这篇开始,我逐渐来介绍Pipeline Utility Steps这个插件的一些常用的方法,这些方法就相当于我们使用jdk里面提供的方法。但是前提是在你的Jenkins环境上在管理插件这个地方,你需要搜索并安装Pipeline Utility Steps这个插件,如果没有安装就直接使用里面的方法,会发生错误,下面文章会具体介绍。 为什么会先介绍Pipeline Uti...原创 2018-11-04 20:40:42 · 16181 阅读 · 0 评论 -
Jenkins高级篇之Pipeline方法篇-Pipeline Utility Steps-1-A-开发环境搭建和Jenkins运行代码测试
前面我说过,要陆续介绍模拟真实开发场景。这篇,来补充一篇Jenkins+Pipeline+groovy的开发环境。主要环境就是Eclipse,代码仓库服务采用github。我知道,有些人对于这个已经很熟悉,有些人还没有使用过git,更别说提交代码了。希望这篇,能带给你体验一次开发的感觉,体验一次自己修自己bug的的过程。1.前提条件这篇,我不会一步一步介绍如何搭建环境。有些过程可能就一句话...原创 2018-11-06 21:19:48 · 4304 阅读 · 1 评论 -
Jenkins高级篇之Pipeline方法篇-Pipeline Utility Steps-1-B-代码解释和jenkins debug技巧
这篇主要是对上一篇的代码的一些解释,有些知识在上一篇没有交代清楚,等了解了这些基础知识,下面我们的练习都是围绕这篇的基础进行扩展。1.pipeline stage 文件import hudson.model.*;println env.JOB_NAMEprintln env.BUILD_NUMBERprintln env.WORKSPACEpipeline{ agent a...原创 2018-11-06 22:54:22 · 5648 阅读 · 0 评论 -
Jenkins高级篇之Pipeline方法篇-Pipeline Utility Steps-2-方法readJSON和writeJSON
这篇介绍在Pipeline Utility Steps这个插件里的第二个和第三个方法,和json读写有关。这些方法有一个前提,任何文件都需要放在jenkins的workspace下,执行的job才能去找到文件。Jenkins是没有能力去一个其他磁盘或者网络路径去访问并读取文件的,记住这个很重要。1方法readJSON为了接下来的代码测试,我提前在当前项目中的/testdata路径下新建了一...原创 2018-11-07 23:35:04 · 10756 阅读 · 3 评论 -
Jenkins高级篇之Pipeline方法篇-Pipeline Utility Steps-3-方法readProperties
这篇继续来学习文件相关操作的方法,前面学习了JSON格式文件的读和写,这么介绍一个读取properties文件,这个方法特别是适合Java项目,一个Java项目很多配置文件可能是采用properties类型来写入键值对数据。1.方法readProperties就是从一个xxx.properties文件去读取内容出来,得到是一个map对象。下面我现在/testdata文件夹下创建一个test...原创 2018-11-08 23:17:50 · 3979 阅读 · 1 评论 -
Jenkins高级篇之Pipeline方法篇-Pipeline Utility Steps-4-方法readYaml和writeYaml
本篇继续来介绍Pipeline Utility Steps这个插件支持的特定的方法,前面介绍了读取JSON和读properties文件,这篇来介绍读写yaml类型文件。读取yaml的方法是readYaml,写yaml文件的方法是writeYaml,yaml配置类型文件在linux系统中还是很常见的。1.方法readYaml我在Eclipse项目中的/testdata目录下,提前做好了一个t...原创 2018-11-10 14:34:04 · 8372 阅读 · 0 评论 -
Jenkins高级篇之Pipeline方法篇-Pipeline Basic Steps-1-方法deleteDir和dir、echo、error
这篇开始来学习一个最基础的pipeline组件,这个也是一个独立的插件,在安装pipeline的时候默认会自动安装,插件的名称是pipeline basic steps, 你可以去你自己jenkins环境,插件管理下的installed下面找到这个插件。这篇我们先来学习下两个关于文件夹路径操作的方法。1.pipeline basic steps 官网主页官网有这个basic steps下相...原创 2018-11-11 21:13:09 · 13551 阅读 · 0 评论 -
Jenkins高级篇之Pipeline方法篇-Pipeline Basic Steps-2-方法fileExists、isUnix、pwd
继续来学习pipeline basic steps里面的方法,前面学习了文件夹相关的操作方法,这篇来学习几个布尔类型的返回值的方法。第一个是判断一个文件是否存在,第二个是判断当前执行的环境是不是Linux还是windows。1方法fileExists这是判断一个文件是否存在,返回值是布尔类型,true就表示文件存在,false表示文件不存在。这个我一般是用来验证判断,例如,我调用了一个请求...原创 2018-11-11 22:29:11 · 6557 阅读 · 0 评论 -
Jenkins高级篇之Pipeline方法篇-Pipeline Basic Steps-3-方法mail
这篇重点介绍发送邮件这个方法,或者叫指令,是因为发送邮件这个功能太常用了。这个指令是mail,然后配合几个属性就可以在代码里发送一个比较完整的邮件。我们知道在jenkins中构建之后一般都会执行结果通知,告知构建人和其他项目人员构建的结果是什么状态,一般是失败,成功,取消三种结果。在通过pipeline代码发送邮件之前,你的需要学会在jenkins服务器上配置好smtp邮件服务器。1.Jenk...原创 2018-11-13 19:48:43 · 8286 阅读 · 8 评论 -
Jenkins高级篇之Pipeline方法篇-Pipeline Basic Steps-4-方法readFile和retry,sleep
继续来学习basic steps这个插件支持的方法。前面一篇重点介绍了pipeline代码如何发送邮件,以及在一个html格式的邮件的模块方法里,我用到了readFile这个方法。本篇来学习readFile方法和retry和sleep方法1.方法readFile先看看官网关于这个方法的介绍。这个readFile的功能就是从当然Jenkins的WORKSPACE路径下读一个文件,返回...原创 2018-11-14 16:36:08 · 11139 阅读 · 1 评论 -
Jenkins高级篇之Pipeline方法篇-Pipeline Basic Steps-5-方法timeout,waitUntil,withEnv
继续来学习basic pipeline这个插件的提供的方法,本篇主要学习timeout和waitUntil两个关于时间监控的方法。有时候,我们需要对一个stage执行时间进行精确监控。例如执行这个stage大概20分钟一定可以完成,那么我们就可以使用timeout 设置20分钟,如果操作20分钟还没有执行结束,那么当前这个pipeline stage就会被自动取消,状态显示为aborted。而wa...原创 2018-11-27 23:00:59 · 11563 阅读 · 0 评论 -
Jenkins高级篇之Pipeline方法篇-Pipeline Basic Steps-6-写文件writeFile和git SCM
这篇打算结束basic pipeline这个插件的方法学习,前面和本篇介绍方法,基本把常用的basic pipeline里面的方法都介绍了一遍。如果以后遇到不会的,可以去这个官方网站去查询新的方法介绍,其实官网也是比较坑的,介绍了这个方法的作用,但是没有给出一个具体的代码的示例。就拿https://jenkins.io/doc/pipeline/steps/workflow-basi...原创 2018-12-02 21:47:29 · 11644 阅读 · 1 评论 -
Jenkins高级篇之Pipeline实践篇-1-如何判断文件下载成功举例
本篇开始,举例几个实际的项目小练习。这几个小练习,你通过自动化脚本可以实现,只不过,现在需要转换成pipeline的方式去实现。小练习,就不写module方法,所有的代码都在stage{...}里写。第一个小练习的题目是:在linux的/tmp/test目录下,判断python 3的文件文件是否下载成功。需求分析:在一个目录下判断一个文件是否成功下载?这里我们只考虑linux环境哈,win...原创 2018-12-10 21:49:47 · 13883 阅读 · 0 评论 -
Jenkins高级篇之Pipeline实践篇-2-groovy中字符串操作split()和tokenize()区别
这篇来一个字符串切割的练习,很多人知道字符串切割是用split()方法,但是很少人知道在groovy中,有一个方法叫tokenize(),这两个方法其实都可以实现字符串切割,但是两者还是有区别的,本篇就来学习和掌握两者的共同点和区别。我也是,之前第一选择就是使用split()函数,直到知道有tokenize()方法,1.split()得到结果是一个字符串数组,tokenise()得到结果是一个...原创 2018-12-11 22:00:09 · 20682 阅读 · 0 评论 -
Jenkins高级篇之Pipeline实践篇-3-返回失败的机器的list
前面一篇我们学习了split()和tokenize()两个切片方法的区别,这篇练习,你可以用这两个进行练习。我们还是在linux机器上来做小练习。需求,在一个大型软件自动化运维中,如某一个节点机器运维操作失败,会在路径/tmp/test下产生一些文件。这些文件,可能表示android,ios,mysql,ngix,tomcat等服务器升级失败或者成功。具体规则是这样,出现DB_12.status,...原创 2018-12-16 22:26:35 · 2951 阅读 · 0 评论 -
Jenkins高级篇之Pipeline实践篇-4-Selenium和Jenkins持续集成-freestyle jenkins job
这篇开始,我打算介绍如何把Selenium自动化测试框架和Jenkins做持续集成。今天这篇很基础,很多人都会,就是在jenkins上创建一个freestyle的job,然后能跑起来Selenium的自动化脚本。这里,我们先来看看市场上大部分同行,是如何实现的。这个介绍完了之后,我们依然要回到pipeline的主线上,用pipeline代码和思维去改变selenium自动化持续集成的方式。1....原创 2018-12-23 12:14:52 · 2301 阅读 · 0 评论 -
Jenkins高级篇之Pipeline实践篇-5-Selenium和Jenkins持续集成-Pipelinejob草稿版
前面,我们通过在jenkins上创建一个free style job,然后跑起来我们的selenium自动化测试。现在开始,我们要把这种方式给丢弃,采用pipeline的方式,让更多手工配置操作,写入到代码中去。一开始,我们从简单做起,慢慢来。这篇文章的目标就是,创建并成功运行一个pipeline job,先不考虑灵活的变量,我们只考虑如何在pipeline代码中去执行run.bat...原创 2018-12-23 17:49:01 · 2238 阅读 · 0 评论 -
Jenkins高级篇之Pipeline实践篇-6-Selenium和Jenkins持续集成-pipeline参数化构建selenium自动化测试
这篇来思考下如何写一个方法,可以修改config.properties文件里面的属性。加入这个方法可以根据key修改value,那么我们就可以通过jenkins上变量,让用户输入,来修改config.properties文件里面的值。例如测试服务器地址和浏览器类型的名称。如果用户在Jenkins界面填写浏览器是chrome,那么我们就修改config.properties里面的bro...原创 2018-12-23 22:03:43 · 2714 阅读 · 0 评论 -
Jenkins高级篇之Pipeline实践篇-7-Selenium和Jenkins持续集成-publish html report插件的pipeline使用介绍
前面我介绍了一个pipeline实现selenium的参数化构建过程,这边我来介绍,如何把我们代码测试之后得到的extent report文件,在Jenkins的构建Job中显示。在介绍之前,我更新下几个和前面代码变化之处。1)在run.bat中,我们这篇cd的路径是在jenkins salve机器拉取代码的路径,而不是我之前在机器上的git的文件夹下的项目例如,我配置了一个windows...原创 2018-12-31 14:01:36 · 6090 阅读 · 1 评论 -
Jenkins高级篇之Pipeline实践篇-8-Selenium和Jenkins持续集成-添加事后删除报告功能和解决报告名称硬编码
这篇,我们第一件事情来实现把html报告publish完成之后就删除报告文件。这个是很有必要的操作,虽然我们前面写死了报告名称为index.html,你跑多次测试,都会在test-output文件夹下覆盖原来的html报告文件。但是,就像我们最早的时候,报告名称是特定文字加时间戳命名,那么如果不删除,这个test-output下就有多个html文件。1.代码优化,添加删除报告文件代码我之前...原创 2018-12-31 20:39:00 · 1397 阅读 · 0 评论 -
Jenkins高级篇之Pipeline实践篇-9-Selenium和Jenkins持续集成-日志文件归档和插件rebuild介绍--完结篇
写到这里,我记得我前面提出的两个需求,参数化构建和报告和日志显示就差一个日志文件显示了。本篇就先来介绍如何在jenkins上提供日志文件下载,第二个介绍一下rebuild插件。如果一个jenkins job有十个以上的参数化构建,那么下一次构建,选择rebuild菜单是最方便,rebuild菜单会记住上一次构建的输入值,支持修改后再提交构建。1.日志文件归档早期jenkins中,文件归档使...原创 2019-01-01 19:03:14 · 5402 阅读 · 2 评论 -
Jenkins高级篇之Pipeline技巧篇-1-小白搭建Pipeline项目开发环境
之前,有人和我说,pipeline教程这里,关于如何创建pipeline的git项目和,如何在jenkins上做pipeline的测试这块,在前面文章交代不清楚。这里我补上一篇,通过这一篇,小白也能开始自己动手写一个pipeline的项目。接下来,我还会写几篇文章,主要是实际工作中pipeline项目的一些技巧,我认为算是学习pipeline的中级篇,我也不知道有没有高级篇,学习完前...原创 2019-03-31 20:24:56 · 11757 阅读 · 2 评论 -
Jenkins高级篇之Pipeline技巧篇-2-如何处理多个参数化变量
在前面有一篇文章,我介绍seleinum自动化,如何通过pipeline方式去串联,其中使用了两个变量,一个浏览器类型一个是测试服务器地址。这两个变量,我是在让用户在构建的之前,需要勾选或者填写的。这看起来没有什么问题,那么如果一个项目真的需要很多个参数化变量去构建,那么我们直接这样写肯定不行,本篇就来讨论如下如何优化这个问题。1.问题场景之前的场景是这样,相关文章ht...原创 2019-03-31 22:39:21 · 18954 阅读 · 0 评论 -
Jenkins高级篇之Pipeline技巧篇-3-JSON文件处理多个参数进一步优化
前面一篇,我们实现了把多个构建所需的变量放在Jenkins服务器能读取的一个json文件里。这一篇,在这个基础之上,我们来进行优化和改进,并且引出新的技巧和知识点。1.JSON文件放一个网络共享路径有时候,我们Jenkins服务器不是人人都有权限访问的,特别是生产环境的Jenkins服务器,所以不同人使用不同json文件路径就需要有一个大家共享的文件目录,而且大家都有权限编辑和写入json...原创 2019-04-01 22:14:51 · 7457 阅读 · 0 评论 -
Jenkins高级篇之Pipeline技巧篇-4-根据参数传入条件控制执行不同stage
这篇我来介绍一下之前,很早的时候介绍pipeline语法的时候,有一个指令叫when 和expression,当时由于pipeline知识学习太少,不好举例子去学习消化。到了这里,其实这两个关键字就是用来控制stage的执行,如果你条件有好几个,可以精确控制让哪一些stage执行,让哪一些stage不执行。我这里举例一个自动化测试中的例子,例如我写了多个stage,这个pipeline脚本执行...原创 2019-04-15 23:12:57 · 17162 阅读 · 0 评论 -
Jenkins高级篇之Pipeline技巧篇-5-pipeline中如何代码串联多个job的执行
这篇我来介绍下,pipeline代码中如何把两个JOB(A 和B)给串接起来。我们知道,在图形界面的jenkins中的自由风格的job的设置页眉,我们可以选择,执行完job A之后触发执行Job B, 那么pipeline又是如何实现这一过程呢。环境准备当前我的JobA 就是前面几篇文章一直介绍的那个ProjectA-pipeline-demo,为了演示这个过程,我基于Job A给复制了一...原创 2019-04-16 23:13:34 · 12576 阅读 · 4 评论 -
Jenkins高级篇之Pipeline技巧篇-6-pipeline中使用jenkins share lib 方法
本篇介绍实际工作中一个很重要的技巧,那就是多个pipeline项目中如何使用jenkins 共享库中的方法。什么是jenkins共享库,说白了就是一个共享库项目,也就是一个git仓库中的代码。我们知道,公司中jenkins环境,测试环境可能部署一个,生产环境也部署一个。每个jenkins环境中,公司多个部门都在上面创建不同的jenkins job,那么问题就来了。 多个jenkins job, 特...原创 2019-04-17 22:34:36 · 7199 阅读 · 0 评论