持续集成工具之Jenkins pipline简单示例
前文我们主要聊了下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节点上对应目录下生成了我们指定打包文件;
持续集成工具之Jenkins pipline简单示例的更多相关文章
- 持续集成工具之Jenkins
Jenkins是一个很好的持续集成工具,不光可以帮助开发进行自动打包,自动验证升级和安装,也可以帮助测试人员定时执行测试任务,或者在开自动打包安装之后自动执行测试任务,实现打包-安装-测试一条线服务, ...
- 【持续集成工具】 Jenkins
一.什么是持续集成 持续集成(CI):简单来说就是指将开发者的工作内容频繁地集成到主干中. 而持续集成工具可以将开发者频繁需要构建,编译,测试,部署等操作自动进行,为开发提供了非常大便利. 二.持续集 ...
- 持续集成工具之jenkins+sonarqube做代码扫描
上一篇我们主要聊了下代码质量管理平台sonarqube的安装部署以及它的工作方式做了简单的描述和代码扫描演示:回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13 ...
- 持续集成工具之Jenkins安装部署
一.DevOps理念 所谓DevOps是指development和Operations的组合,中文意思就是开发和运维的简写.devops理念主要是针对企业中的研发人员.运维人员和测试人员的工作理念,是 ...
- 持续集成工具之Jenkins使用配置
在上一篇博客中,我们主要介绍了DevOps理念以及java环境和jenkins的安装,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13805666.html: ...
- 持续集成工具Jenkins安装、部署、使用
本文介绍jenkins,利用其做项目发布与持续集成交付工具. 一.Jenkins是什么? Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布 ...
- 轻松搭建持续集成工具jenkins
1.Jenkins介绍1)什么是持续集成随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile) 在软 ...
- 持续集成工具Jenkins学习总结
概述 持续集成(Continuous Integration,简称CI)是一种软件开发实践,团队开发人员每次都通过自动化的构建(编译.发布.自动化测试)来验证,从而尽早的发现集成错误.持续集成最大的优 ...
- 持续集成工具jenkins的使用
jenkins类似于Hadson,是一款持续集成工具.使用jenkins完成自动化部署的表现为:当开发人员向版本库提交新的代码后,应用服务器上自动部署,用户或测试人员使用的马上就是最新的应用程序.搭建 ...
随机推荐
- 5分钟掌握企业LVM磁盘划分
逻辑卷管理LVM是一个多才多艺的硬盘系统工具.无论在Linux或者其他类似的系统,都是非常的好用.传统分区使用固定大小分区,重新调整大小十分麻烦.但是,LVM可以创建和管理“逻辑”卷,而不是直接使用物 ...
- LuoGu P1909 买铅笔???
题目描述 P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物.她发现商店一共有 3种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同.为了公平起 见,P老师决定只买同一种包装的铅笔. ...
- maven-shade-plugin插件未生效原因分析
今天在项目的pom文件中引入maven-shade-plugin插件,构建一个uber-jar(包含所有依赖的jar包),但是诡异的事情出现了,执行mvn package后生成的jar包竟然没有包含被 ...
- php post数据丢失
from的enctype="multipart/form-data" php版本5.6.6 问题:部分POST数据接收不到 追源代码发现是php中max_input_vars配置造 ...
- 1000000 / 60S 的 RocketMQ 不停机,扩容,平滑升级!
一.背景 1.各业务系统持续迭代过程中,JDK.SpringBoot.RocketMQ Client 等框架也进行了升级,高版本的 RocketMQ Client 发送的消息到低版本中,在控制台中午无 ...
- SpringBoot框架:配置文件application.properties和application.yml的区别
一.格式 1.application.properties格式: server.port=8080 server.servlet.context-path=/cn spring.datasource. ...
- PHP_Code_Challenge 1~30
1. 1wMDEyY2U2YTY0M2NgMTEyZDQyMjAzNWczYjZgMWI4NTt3YWxmY= <?php error_reporting(0); require __DIR__ ...
- xss小游戏通关
xss url:http://test.ctf8.com/level1.php?name=test 小游戏payload: <script>alert("'test'" ...
- spring:spring再总结(ioc、aop、DI等)
IOC(Inversion of Control),即"控制反转",不是一种技术而是一种思想 1.IOC的理解 Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部 ...
- spring初始(介绍、核心架构)
1.spring介绍 Spring是个java企业级应用的开源开发框架.主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring框架目标是简化Java企业级应用开发,并通 ...