[作者:Surpassme] 因为pipeline是基于Groovy的,所以还是需要一些基础的Groovy知识的。
[作者:Surpassme] Groovy 是Apache旗下的一门基于JVM平台的动态/敏捷编程语言。语法简洁灵活,开发效率也比较高,且能够与Java语言无缝对接,可以在写Groovy时语法按Java的语法继续写,也能在Java中调用Groovy脚本,均可以很好运行。
[作者:Surpassme] Groovy是基于JVM的,所以安装Groovy,需要准备好JDK环境。这里假设大家已经提前准备好JDK环境,仅讲述Groovy环境的准备。操作步骤如下所示:
D:\Program Files\Groovy
:: 新增以下环境变量
GROOVY_HOME="D:\Program Files\Groovy"
:: Path追加以下环境变量
%GROOVY_HOME%\bin
C:\Users\Surpass>groovy -version
Groovy Version: 4.0.5 JVM: 17.0.1 Vendor: Oracle Corporation OS: Windows 10
- 若能正常输出版本信息,则代表安装成功。
- Jenkins 2.x 目前使用的Groovy 版本为2.x,基础的语法应该是一样的,大家可以根据自己的实际情况选择对应的版本学习
[作者:Surpassme] Groovy 支持的工具如下所示:

以下信息来自于Groovy 官网:http://groovy-lang.org/ides.html
除了以下的IDE工具,也可以使用自带的工具来进行简单的代码编写,如下所示:


[作者:Surpassme] 单行注释使用//,示例如下所示:
// 单行注释示例
println "Hello,Surpass"
println "Hello,Surpass" // 单行注释示例
[作者:Surpassme] 多行注释以/*开始,以*/结束。示例如下所示:
/* 多行注释示例
多行注释示例 */
println "Hello,Surpass" /* 多行注释示例
多行注释示例 */
println 1 /* one */ + 2 /* two*/
[作者:Surpassme] 文档注释与多行注释非常像,主要区别是以/**开始,以*/结束,中间每一行以*开头。示例如下所示:
/**
*文档注释
*/
class Person {
/** 姓名*/
String name="Surpass"
/**
* 创建一个吃东西的方法
*
* @param 食物的名称
* @return 喜欢吃的食物的消息
*/
String eat(String foodName){
return "Hello ${name},I like eat ${foodName}"
}
}
[作者:Surpassme] 与Shell类似,有一单行注释比较特殊,称为为Shebang,在Groovy脚本中,以#!开始的行。示例如下所示:
#!/usr/bin/env groovy
println "Hello,Surpass"
[作者:Surpassme] Groovy 主要关键字如下所示:
abstract assert break case catch class
continue def default else finally for
if instanceof switch throw try while
class import package return in as
[作者:Surpassme] 在Groovy中,变量命名通常遵循如下规则:
字母、$和下划线开头,但不能以数字开头以下为合法的变量命名:
def surpass
def surpass8
def _suprass
def $surpass
以下为非法的变更命名:
def 8surpass
def hello+surpass
def hello#surpass
[作者:Surpassme] 引号命名通常出现.表达式之后,通常应用在一些变量带有特殊字符的命名中。示例如下所示:
def map=[:]
def name="Surpass"
map."my name"="Surpass"
map.'my-name'="Surpass"
map."variable-name-${name}"="Hello ${name}"
assert map."my name"=="Surpass"
assert map.'my-name'=="Surpass"
assert map."variable-name-Surpass"=="Hello Surpass"
println "map is ${map}"
输出结果如下所示:
map is [my name:Surpass, my-name:Surpass, variable-name-Surpass:Hello Surpass]
[作者:Surpassme] 在Groovy中主要的变量赋值方式如下所示:
常规赋值,示例如下所示:
// 定义并赋值
def name="Surpass"
// 先定义再赋值
def age
age=28
println "name is ${name}\nage is ${age}"
[作者:Surpassme] Groovy支持一次性给多个变量赋值,示例如下所示:
// 方式一
def (name,age,loc)=["Surpass",28,"Shanghai"]
println "name is ${name},age is ${age},loc is ${loc}" // name is Surpass,age is 28,loc is Shanghai
// 方式二
def hello="Hello,Surpass,Welcome to Shanghai"
def (_,name,welcome)=hello.split(",")
println "name is ${name},welocme is ${welcome}" // name is Surpass,welocme is Welcome to Shanghai
// 方式三
def (name,age)=["Surpass",28,"Shanghai","Wuhan"]
println "name is ${name},age is ${age}" // name is Surpass,age is 28
原文地址:https://www.jianshu.com/p/870a6921f7e3
本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:

很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
//1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json
我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions
Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功
前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
1.在Python3中,下列关于数学运算结果正确的是:(B)a=10b=3print(a//b)print(a%b)print(a/b)A.3,3,3.3333...B.3,1,3.3333...C.3.3333...,3.3333...,3D.3.3333...,1,3.3333...解析: 在Python中,//表示地板除(向下取整),%表示取余,/表示除(Python2向下取整返回3)2.如下程序Python2会打印多少个数:(D)k=1000whilek>1: print(k)k=k/2A.1000 B.10C.11D.9解析: 按照题意每次循环K/2,直到K值小于等
我认为我的问题最好用一个例子来描述。假设我有一个名为“Thing”的简单模型,它有一些简单数据类型的属性。像...Thing-foo:string-goo:string-bar:int这并不难。数据库表将包含具有这三个属性的三列,我可以使用@thing.foo或@thing.bar之类的东西访问它们。但我要解决的问题是当“foo”或“goo”不再包含在简单数据类型中时会发生什么?假设foo和goo代表相同类型的对象。也就是说,它们都是“Whazit”的实例,只是数据不同。所以现在事情可能看起来像这样......Thing-bar:int但是现在有一个新的模型叫做“Whazit”,看起来