pipline 是帮助 Jenkins 实现 CI 到 CD 转变的重要角色,是运行在 jenkins 2.X 版本的核心插件,简单来说 Pipline 就是一套运行于 Jenkins 上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程,从而实现单个任务很难实现的复杂流程编排和任务可视化,Pipeline 的实现方式是一套 Groovy DSL,任何发布流程都可以表述为一段 Groovy 脚本。

  前文我们主要聊了下jenkins的插件安装、用户及权限管理、邮件发送、配置凭证到gitlab上拉取项目和创建普通job;回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13810648.html;今天我们来了解下jenkins的一个核心功能pipline以及jenkins的分布式slave节点的部署;

  pipline介绍

  pipline 是帮助 Jenkins 实现 CI 到 CD 转变的重要角色,是运行在 jenkins 2.X 版本的核心插件,简单来说 Pipline 就是一套运行于 Jenkins 上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程,从而实现单个任务很难实现的复杂流程编排和任务可视化,Pipeline 的实现方式是一套 Groovy DSL,任何发布流程都可以表述为一段 Groovy 脚本。

  pipline优势

  可持续性:jenkins 的重启或者中断后不影响已经执行的 Pipline Job;

  支持暂停:pipline 可以选择停止并等待人工输入或批准后再继续执行。

  可扩展:通过 groovy 的编程更容易的扩展插件。

  并行执行:通过 groovy 脚本可以实现 step,stage 间的并行执行,和更复杂的相互依赖关系。

  pipline语法

  Stage:阶段,一个 pipline 可以划分为若干个 stage,每个 stage 都是一个操作,比如 clone 代码、代码编译、代码测试和代码部署,阶段是一个逻辑分组,可以跨多个 node 执行。

  Node:节点,每个 node 都是一个 jenkins 节点,可以是 jenkins master 也可以是 jenkins agent,node 是执行 step 的具体服务器。

  Step:步骤,step 是 jenkins pipline 最基本的操作单元,从在服务器创建目录到构建容器镜像,由各类Jenkins 插件提供实现,例如: sh “make”;

  示例

node {
stage("clone 代码"){
echo "代码 clone"
}
stage("代码构建"){
echo "代码构建"
}
stage("代码测试"){
echo "代码测试"
}
stage("代码部署"){
echo "代码部署"
}
}

  提示:上面是pipline脚本示例,node用于指定节点,stage用于指定阶段名称;而下面的echo就是在每个阶段需要做的事;基本语法就是这样;从上面的示例不难反应一个job的工作流程;我们写pipline 构建pipline job就是根据项目构建流程来把要做的事用上述语法的形式表示出来,然后jenkins就可以根据我们定义的pipline任务,依次去各节点执行定义在自身的阶段任务;

  创建pipline job

  提示:新建任务要首先给任务写一个名称,然后选择流水线,点确定;

  提示:我们在general写上任务描述,然后就可以直接到流水线把我们上面的pipline 示例贴在此处;

  提示:选择立即构建;

  提示:最后执行成功就会显示浅绿色的方格,每个方格代表一个阶段;我们可以点击方格查看对应阶段执行的操作日志;如下

  当然我们也可以查看整个构建过程的日志,如下

  提示:找到左下方的构建时间,点击时间后端小三角,选择console output就可以查看整个构建的日志中了;

  当然,我上面只是一个很简单的测试,主要是让我们去理解pipline执行的流程和效果;

  生成Groovy代码

  示例:把拉取代码生成Groovy脚本

  提示:点击配置,进入到配置任务的界面;

  提示:找到流水线语法,然后点击跳转到另外一个页面;

  提示:这里我们可以选择很多类型,比如我们要拉去代码,可以选择git:Git ;

  提示:选择git:Git后,它会让我们输入仓库地址和凭证,如果这里没有凭证我们也可以选择添加凭证;选择好以后点击下面的生成流水线脚本;然后我们就可以把生成后的脚本,拷贝到我们需要执行的步骤里;

  提示:编辑好pipline脚本后,点击应用,我们又可以去执行我们现在的任务;

  提示:可以看到我们第二次构构建任务也是执行成功的;在克隆代码阶段,我们也可以看到jenkins到我们指定的仓库中拉去代码;

  验证:在服务器上对任务目录中看看是否将gitlab上的代码拉去下来了?

 

  提示:可以看到对应的任务目录下的确有从gitlab上拉去的文件;

  pipline 中执行 shell 命令

  提示:执行shell命令我用sh去执行,把要执行的shell命令用引号引起来;上面在代码构建这个阶段,用shell命令做了一件事,到test-pipline-job目录打包了所有文件,生成了一个test.tar.gz的压缩文件;

  验证:执行test-pipline-job,看看服务器对应的目录下是否有test.tar.gz文件生成?

  提示:从构建日志和视图上看是执行成功了;我们在去服务器上确认下

  提示:在test-pipline-job目录下的确有test.tar.gz文件生成;说明我们在代码构建阶段执行的shell命令成功了;

  配置jenkins的slave节点

  在要成为slave节点上安装java环境

[root@node05 ~]# yum install -y java-1.8.0-openjdk-devel

  验证:java环境

[root@node05 ~]# java -version
openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)
[root@node05 ~]# 

  创建存放slave数据的目录

[root@node05 ~]# mkdir /data/jenkins/slave01 -p
[root@node05 ~]# tree /data
/data
└── jenkins
    └── slave01

2 directories, 0 files
[root@node05 ~]# 

  在jenkinsweb图形界面找到节点管理,选择新建节点

  提示:填写slave节点名称或者IP地址,然后选择固定节点,然后点击确定;

  提示:填写对应的信息,在启动方式里选择SSH,然后主机就写slave主机的ip地址,然后选择凭证,如果没有就选择添加;

  提示:这里把连接slave节点的用户和密码填写上;也可以选择公钥私钥,然后把私钥放上去也行;填写好,点添加;然后在凭证里再选我们添加的凭证;

  提示:这里如果是第一次连接slave我们要选择为验证那个选项,这样jenkins去用ssh连接slave出现输入yes,它会帮我们输入,否则jenkins会连接上不是;如果之前用ssh连接过slave,host key验证我们可以选择第一个know那个;选择好以后点击保存就好;

  提示:以上就是成功将192.168.0.45配置成jenkins的slave节点的状态,如果我们添加到对应节点上有小红叉,说明我们添加slave节点有问题;我们可以查看日志,来排查对应的错误;

  查看slave构建日志

  提示:从上面日志上,我们可以看到jenkins启动slave时,首先会去我们指定的数据目录找java命令,然后返回java的版本,然后启动一个sftp线程,拷贝remoting.jar到我们指定的数据目录,然后在slave节点上执行 java -jar 把对应的jar包运行起来;

  验证:在192.168.0.45上查看是否运行了remoting.jar的进程

  提示:可以看到在192.168.0.45上,运行了一个remoting.jar的jave进程;

  配置 slave 执行 job

  执行job

  提示:这里提示我们执行job失败,说没有git;我们在slave节点上安装git命令

[root@node05 ~]# yum install git -y

  再次构建job,看看是否能够够构建成功?

  提示:这里这个错误严格上不应该出现,我们在pipline中写的构建代码,cd的目录在slave上是不存在的,所以构建代码这一步就失败了;

  修改pipline脚本,然后重新构建job

  再次构建

  查看执行job日志

  提示:在日志中的确可以看到,执行过程是在我们指定的slave节点上执行的;

  验证:去slave节点上对应目录下看看是否有test.tar.gz生成?

  提示:可以看到slave节点上对应目录下生成了我们指定打包文件;

版权声明:本文为qiuhom-1874原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/qiuhom-1874/p/13817686.html