Jenkins集成必会技能——pipeline入门教程

Stella981
• 阅读 823

作者:慧哥

一、什么是pipeline

什么是Pipeline?简单来说,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程(实用场景:将多个Jenkins构建任务轻松集成)。

Pipeline的实现方式是一套Groovy DSL,任何发布流程都可以表述为一段Groovy脚本,并且Jenkins支持从代码库直接读取脚本,从而实现了Pipeline as Code的理念。

使用条件

要使用Jenkins Pipeline,需要: Jenkins 2.x或更高版本、Pipeline插件

使用语言

Pipeline脚本是用Groovy写的 。

二、pipeline在哪

首先确保Jenkins上已经有pipeline相关插件。如果想在Jenkins上新建一个pipeline Job,按照下列步骤操作:

1、单击Jenkins主页上的New Item。

Jenkins集成必会技能——pipeline入门教程

2、输入Pipeline的名称,选择Pipeline,然后单击确定。

Jenkins集成必会技能——pipeline入门教程

3、最后点击完成,一个pipeline项目就生成了

三、一个简单的pipeline脚本

pipeline项目中实际起作用的就是pipeline 脚本部分,这里写一个HelloWorld,编辑后点击保存,期望执行打印hello world操作。

Jenkins集成必会技能——pipeline入门教程

由于这个脚本是无参数的,所以直接点击Build Now就可以了,来查看一下构建结果,

可以看到最后输出了期望的  Hello world!

Jenkins集成必会技能——pipeline入门教程

这里对语法进行简单介绍

Example

stages

agent

在任何可用的agent 上执行Pipeline或stage。例如:agent any

还有其他的agent后面可跟的参数,例如:none,label,node,docker

none

当在pipeline块的顶层使用none时,将不会为整个Pipeline运行分配全局agent ,每个stage部分将需要包含其自己的agent部分。

label

使用提供的label标签,在Jenkins环境中可用的代理上执行Pipeline或stage。例如:agent { label 'my-defined-label' }

node

agent { node { label 'labelName' } },等同于 agent { label 'labelName' },但node允许其他选项(如customWorkspace)。

docker

定义此参数时,执行Pipeline或stage时会动态供应一个docker节点去接受Docker-based的Pipelines。docker还可以接受一个args,直接传递给docker run调用。例如:agent { docker 'maven:3-alpine' }

stages

包含一个或多个stage的序列,Pipeline的大部分工作在此执行。建议stages至少包含至少一个stage指令,用于连接各个交付过程,如构建,测试和部署等。

steps

steps包含一个或多个在stage块中执行的step序列。

总结:

1、Pipeline最基本的部分是“step”。基本上,step告诉Jenkins 要做什么,并且作为Declarative Pipeline和Scripted Pipeline语法的基本构建块。

2、Pipeline支持两种语法:Declarative Pipeline(在Pipeline 2.5中引入,结构化方式)和Scripted Pipeline,两者都支持建立连续输送的Pipeline。

3、所有有效的Declarative Pipeline必须包含在一个pipeline块内,例如:

pipeline { /* insert Declarative Pipeline here */ }

4、Declarative Pipeline中的基本语句和表达式遵循与Groovy语法相同的规则 ,但有以下例外:

a.Pipeline的顶层必须是块,具体来说是:pipeline { }

b.没有分号作为语句分隔符。每个声明必须在自己的一行

c.块只能包含Sections, Directives, Steps或赋值语句。

四、pipeline实际实用意义

前文说了Pipeline是将原本独立运行于单个或者多个节点的任务连接起来

Jenkins集成必会技能——pipeline入门教程

我们来举两个例子

1、Git上拉取代码:

在pipeline中有一个流水线语法,加入想去git上拉代码,可以这么操作,点击图中的流水线语法,选择git

Jenkins集成必会技能——pipeline入门教程

Jenkins集成必会技能——pipeline入门教程

填写必要参数后,点击成成流水线语法

Jenkins集成必会技能——pipeline入门教程

然后将生成的流水线脚本粘贴进入steps里面,就可以完成git代码的拉取了

jenkins会把代码拉到Workspace+项目名+projdir的目录下,当然也可以指定绝对路径.

2、利用pipeline去执行自动化脚本

前置条件:我已经有一个job,用来执行我的回归脚本,同时我的jmeter+ant+jenkins也已经集成好了,在那个job中,脚本的调用执行是通畅的

pipeline {

steps里面的第一行是调用的Job   第二行是我那个job下传输的参数

来看下执行结果

Jenkins集成必会技能——pipeline入门教程

ps:pipeline可以结合实际情况,在pipeline语法中直接写打包,部署,执行脚本完成整个流的工作,也可以通过现有的job,去调用job完成持续继承。使用灵活,按需实操。

最后我们来看一下,如果结合了打包、部署、回归,它的执行效果,有没有感觉跟我们这篇文章的封面有异曲同工之处(Jenkins集成必会技能——pipeline入门教程 Jenkins集成必会技能——pipeline入门教程 Jenkins集成必会技能——pipeline入门教程 )

Jenkins集成必会技能——pipeline入门教程

本文分享自微信公众号 - 测试技术圈(SoftwareTesters)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
Jenkins Pipeline集成Sonar进行代码质量检测
JenkinsPipeline集成Sonar进行代码质量检测简介jenkinspipelineJenkinsPipeline(或简称为"Pipeline")是一套jenkins插件,将持续交付的实现和实施集成到Jenkins中。Jenk
Stella981 Stella981
3年前
DevOps之持续集成Pipeline(一)
一、Pipeline介绍Jenkins2.0中最大的一个特性就是Pipeline,实际使用中Pipeline已经超越了我们对jenkins本身的理解,可能在之前我们大多数把Jenkins当做是一个持续集成的工具。但是在Jenkins2.0中,Jenkins完成了CI到CD的华丽转身,而且因为Jenkins的开放性,随着一些
Wesley13 Wesley13
3年前
3种创建Jenkins流水线的方法
Jenkins是一个DevOps工具,可以用来自动构建、测试和交付软件代码。如果你是Jenkins的新手,本教程将帮助你理解如何使用以下方法之一创建Jenkins流水线(Pipeline):经典的Jenkins用户界面JenkinsBlueOcean用户界面,减少杂波并增加清晰度Git仓库Jenkins
Stella981 Stella981
3年前
Nginx + lua +[memcached,redis]
精品案例1、Nginxluamemcached,redis实现网站灰度发布2、分库分表/基于Leaf组件实现的全球唯一ID(非UUID)3、Redis独立数据监控,实现订单超时操作/MQ死信操作SelectPollEpollReactor模型4、分布式任务调试Quartz应用
Wesley13 Wesley13
3年前
1. 容器化部署一套云服务 第一讲 Jenkins(Docker + Jenkins + Yii2 + 云服务器))
容器化部署一套云服务系列1\.容器化部署一套云服务之Jenkins(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.cnblogs.com%2Fjackson0714%2Fp%2Fdeploy1.html)一、购买服务器服务器!caeef00
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这