Jenkins 流水线初体验 - 创建一个 Jenkins Pipeline 任务

本贴最后更新于 1435 天前,其中的信息可能已经时移世改

最近看到别人的jenkins,有我没见过、看不懂但是又好酷好靓的样纸。

大概长以下这样:

image20201130174000514.png


还有长以下这样的:

image20201130174024031.png

经过一顿搜索 ,原来它就是 我不认识它,它也不认识我的jenkins pipeline

本着好奇心和对知识的求知欲,在网上各种资料一顿乱啃,大概明白了是咋么一回事。

image.png


接下来,就从小白开始,一步步完成它。

主要分为以下几步:

  1. 在jenkins上安装pipeline插件
  2. 创建一个pipeline类型的任务
  3. 配置pipeline 脚本。



第一步:pipeline插件安装

  1. 在magage jenkins -> 插件管理 -> avaliable中,搜索pipeline,选择并安装。

  2. 在magage jenkins -> 插件管理 -> avaliable中,pipeline stage view,选择并安装。

    image20201130175510267.pngimage20201130175858678.png


  1. 安装完成,可以在New Item里,看到pipeline选项。

image20201130191517037.png



第二步:创建pipeline

环境准备就绪 ,嘿哈,可以开始创建流水线了

在jenkins界面,点击 New Item新建一个任务,选择流水线,就进入下面这个图了。

image20201130191818621.png


然后就懵逼了。。

pipeline要写脚本 ?

image20201130201938838.png

原来,pipeline是基本groovy脚本的。


那,完蛋了

我只会python,不会groovy。难不成我要先学一学groovy,才能写的出来?

翻了翻 groovy,这玩意跟java有关。

我太难了,pipeline太难了!

image.png


幸好,在官网当中,提供了其它的方式。

pipeline分为2种:

第一种:脚本式pipeline,那就真的是要写groovy脚本的。

第二种,声明式pipeline,嘿嘿,固定结构化的,不用学groovy也是能用滴。



声明式pipeline语法

虽然不用学groovy,但是声明式pipeline大体的结构还是要学一学的。

它大概长下面这个样子(超级简单版):

image20201130203047881.png

嗯,虽然简单,但是仍然看不太懂。。


首先,有几大关键字:

pipeline、agent、stage、step


什么意思呢?

先举个生活中的例子:

以人从出生到最后消亡的这个大事件为例 ,

无论在哪个国家的人(agent),人生都会经历几个阶段(stage),在每个阶段(stage),都会有相应的事情(step)要做。

image20201130205727403.png


那么,

在jenkins当中,比如,要实现持续交付这个大事件,就需要经历:

在哪些代理(agent)上经历编译(stage)、测试(stage)、部署(stage)这3大阶段,每一个阶段要做的事情(step)在内容上数量上都是不一样的。


再比如,要实现python自动化测试这个大事件,就需要经历:

在哪些(agent)代理上,经历测试(stage)、通知(stage)这2个阶段,测试和通知每一个阶段要做的事情(step)也是不一样的。


所以,

这几个关键字是主要的语法结构。

总结一下来讲,主要是:

1、谁来做这个任务? agent

2、任务切割成几阶段? stage

3、每个阶段要做啥?steps


我们再来看看上面那张图:

image20201130203047881.png


pipeline:起始

agent any:指示 Jenkins 为整个流水线分配一个执行器(在 Jenkins 环境中的任何可用代理/节点上)和工作区

stages:多个stage都放在stages下面

stage("autotest"):名为autotest的阶段。

steps:为autotest阶段里的一个步骤。

sh 'python3 main.py':表示步骤内容:执行shell命令,命令内容为:python3 main.py


一句话总结一下:由任意可用执行器来执行任务,任务有1个阶段,此阶段的步骤是执行python命令。


好像大致明白声明式语法的小结构了。


但是仔细思考一下,比如要做自动化测试,好像还有几个小问题?

  1. 自动化的代码从哪里来呢?
  2. 步骤内容:sh 'python3 main.py' 为啥是这么写的呢?我要用windows的命令行执行它要怎么写呢?

一个一个来解决。



1、自动化的代码从哪里来呢?

在这里,我们需要配置源代码。

可以在item的pipeline配置里,从pipeline script 切换成 pipeline script from SCM

image20201130212019986.png


为啥要这么干呢?

  1. 不这么干,你就需要在脚本里加上从github获取代码的步骤啦。省事,选这个。

  2. 官网建议将pipeline的脚本保存在jenkinsfile当中,并且与你的项目放在一起是最好的。

    pipeline script from SCM就是指从SCM的项目当中,直接读取它的jenkinsfile文件中pipeline脚本来执行。

    这样,不管你的项目在哪个jenkins上去用都没有问题。同时,你也可以随着项目变化去修改它的jenkinsfile文件。

切换后的样子:

image20201130213021380.png

SCM选择git之后:

image20201130213159743.png


要注意,在github上的项目当中,必须要有jenkinsfile文件:

image20201130213600678.png

image20201130213808845.png


2、步骤内容:sh 'python3 main.py' 为啥是这么写的呢?

这是jenkins pipeline的语法。

在不用pipeline的时候,我们构建时的每一个步骤都是选择的插件,然后配置信息即可。

image20201211205609134.png


换到pipeline里,就没有这个界面操作了。。。

于是就换成了上面的语法:sh 'python3 main.py'

与上面的截图,同等效果。


那么,问题来了。。

jenkins的构建步骤,有那么多的插件,每一个插件的语法也不一样,我该如何知道呢。。。

image.png


果然,jenkins为我们准备好了后路

image.png


jenkins提供了一个步骤生成器,只需要配置步骤,然后可以直接生成步骤的表达式。 将生成的表达式copy到step中就可以了。。

它在jenkins 的job面板当中,请看下图:

image20201211203957106.png

image20201211214313092.png


是不是很棒棒!

不用学习每个插件,用pipeline语法如何表达!


jenkinsfile编写完之后,直接运行那么就可以在Jenkins的Job界面上看到如下图了:

image20201211220021456.png

3 操作
xiaojian 在 2020-12-12 17:54:34 更新了该帖
xiaojian 在 2020-12-12 17:53:30 更新了该帖
xiaojian 在 2020-12-12 17:50:30 更新了该帖
回帖
请输入回帖内容 ...