本文为在霍格沃兹测试开发学社中学习到的一些技术,写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~
jenkins-Pipeline 入门教程
一、什么是Pipeline
Pipeline,简而言之,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化;
Pipeline 是Jenkins 2.X 的最核心的特性,帮助Jenkins 实现从CI 到 CD 与 DevOps的转变。
Pipeline 是一组插件,让jenkins 可以实现持续交付管道的落地和实施。持续交付管道是将软件从版本控制阶段到交付给用户/客户的完整过程的自动化表现。
二、Pipeline任务
2.1、创建Pipeline任务
- 新增任务,选择流水线
- Pipeline定义有两种方式: 一种是Pipeline Script ,是直接把脚本内容写到脚本对话框中; 另一种是 Pipeline script from SCM (Source Control Management–源代码控制管理,即从gitlab/github/git上获得pipeline脚本–JenkisFile)
2.2、Pipeline Script 运行任务
- 脚本如下
pipeline{
agent any
stages{stage("first"){
steps {
echo 'hello world'}}stage("run test"){
steps {
echo 'run test'}}}
post{
always{
echo 'always say goodbay'}}}
脚本中定义了2个阶段(stage):first和run test;post是jenkins完成构建动作之后需要做的事情。
运行任务,可以看到分为3个部分,如下图所示:
2.3、Pipeline script from SCM 通过代码库运行任务
将pipeline代码(Jenkinsfile)保存到代码库中,然后通过指定代码位置(脚本位置)的方式来运行pipeline任务。
- 创建Jenkinsfile,由Groovy语言实现。一般是存放在项目根目录,随项目一起受源代码管理软件控制。 Jenkinsfile :创建在根目录 脚本的第二stage 是执行pytestzwf文件下的test_json.py脚本 将项目提交到代码库。
3.在 job(任务)中配置Pipeline script from SCM
运行任务,查看结果:
三、Jenkinsfile 语法学习
Jenkinsfile 支持两种语法形式:
- Declarative pipeline – 在pipeline v2.5 之后引入,结构化方式,比较简单,容易上手。这种类似于我们在做自动化测试时所接触的关键字驱动模式,只要理解其定义好的关键词,按要求填充数据即可。入门容易,但是灵活性欠缺。
- Scripted pipeline – 基于grjoovy的语法,相较于Declarative,扩展性比较高,好封装,但是有些难度,需要一定的编程工具。
Declarative pipeline 语法详解
- 必须包含在固定格式Pipeline{} 块内,每个声明语句必须独立一行,行尾无需使用分号。
- 块 blocks{} 只能包含章节(Sections),指令(Directves),步骤(Steps) 或 赋值语句。
agent :节点
- 必须存在,agent必须在pipeline块内的顶层定义
- any :可以在任意agent 上执行pipeline
- none :pipeline 将不分配全局agent,每个stage分配自己的agent
- label :指定运行节点的label
- node:自定义运行节点配置,指定label ,指定customWorkspace(工作空间)
- docker:控制目标节点上的docker运行相关内容
agent any
agent { label 'my-master'}
agent{
node{
label "myslave"
customWorkspace "myworkspace"}}
stages :阶段集
- 必须存在,包含顺序执行的一个或者多个stage命令
- 在pipeline内仅能使用一次
- 需要定义stage的名字
steps :步骤
- 必须存在
- steps位于stage指令块内部,包含一个或者多个step
stages{stage("stage name"){
steps{
echo "this is a step"}}}
post :构建后的操作
- 非必须
- always:无论pipeline运行的完成的状态如何都会运行
- success:仅当当前pipeline具有 成功 状态时才运行
- failure: 仅当当前pipeline 具有 失败 状态时才运行
当然还有其他选项,这里不再做扩展介绍;
parameters :参数
- 非必须
- 参数化构建的参数设置,参数类型有booleanParam、choice(选择)、file、text、string 等
parameters{string( name :'name',defaultValue:'beauty',description:'姓名是')}
等同于如下设置:
构建时效果如下:
triggers :触发器
- 非必须
- 定义了pipeline自动化触发的方式
- cron:接受一个cron风格的字符串来定义pipeline触发的常规间隔
- pollSCM:接受一个cron风格的字符串来定义jenkins检查SCM源更改的常规间隔;如果存在新的更改,则pipeline将被重新触发
triggers{cron('*/1 * * * *')}
每隔一分钟执行一次
triggers{pollSCM('*/1 * * * *')}
每隔一分钟监控SCM源,更改即触发
文末说明
推荐博文:接口测试经典面试题:Session、cookie、token有什么区别?
版权归原作者 雨水的早晨 所有, 如有侵权,请联系我们删除。