前文我们主要聊了下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简单示例的更多相关文章

  1. 持续集成工具之Jenkins

    Jenkins是一个很好的持续集成工具,不光可以帮助开发进行自动打包,自动验证升级和安装,也可以帮助测试人员定时执行测试任务,或者在开自动打包安装之后自动执行测试任务,实现打包-安装-测试一条线服务, ...

  2. 【持续集成工具】 Jenkins

    一.什么是持续集成 持续集成(CI):简单来说就是指将开发者的工作内容频繁地集成到主干中. 而持续集成工具可以将开发者频繁需要构建,编译,测试,部署等操作自动进行,为开发提供了非常大便利. 二.持续集 ...

  3. 持续集成工具之jenkins+sonarqube做代码扫描

    上一篇我们主要聊了下代码质量管理平台sonarqube的安装部署以及它的工作方式做了简单的描述和代码扫描演示:回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13 ...

  4. 持续集成工具之Jenkins安装部署

    一.DevOps理念 所谓DevOps是指development和Operations的组合,中文意思就是开发和运维的简写.devops理念主要是针对企业中的研发人员.运维人员和测试人员的工作理念,是 ...

  5. 持续集成工具之Jenkins使用配置

    在上一篇博客中,我们主要介绍了DevOps理念以及java环境和jenkins的安装,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13805666.html: ...

  6. 持续集成工具Jenkins安装、部署、使用

    本文介绍jenkins,利用其做项目发布与持续集成交付工具. 一.Jenkins是什么? Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布 ...

  7. 轻松搭建持续集成工具jenkins

    1.Jenkins介绍1)什么是持续集成随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile) 在软 ...

  8. 持续集成工具Jenkins学习总结

    概述 持续集成(Continuous Integration,简称CI)是一种软件开发实践,团队开发人员每次都通过自动化的构建(编译.发布.自动化测试)来验证,从而尽早的发现集成错误.持续集成最大的优 ...

  9. 持续集成工具jenkins的使用

    jenkins类似于Hadson,是一款持续集成工具.使用jenkins完成自动化部署的表现为:当开发人员向版本库提交新的代码后,应用服务器上自动部署,用户或测试人员使用的马上就是最新的应用程序.搭建 ...

随机推荐

  1. 数据库行转列的sql语句

    问题描述 假设有张学生成绩表(CJ)如下Name Subject Result张三 语文 80张三 数学 90张三 物理 85李四 语文 85李四 数学 92李四 物理 82 现在 想写 sql 语句 ...

  2. 2020 最新python入门知识

    1. 基础语法 1.1 注释 在编写代码的时候,有些代码不需要执行或增加代码说明,那么就需要用到注释了. 被注释的文本或代码是不会被执行的. 注释可以使用如下三种方式: # 号 # 第一个注释,本行代 ...

  3. MyEclipse web项目连接数据库

    1.Build path添加jdbc驱动包 2.编写驱动类 import java.sql.Connection; import java.sql.DriverManager; import java ...

  4. 区间查询与等效minus查询

    --表结构 create table hy_emp( id number(4,0) primary key, name nvarchar2(20) not null, edate date) --充值 ...

  5. Minimizing maximizer(POJ 1769)

    原题如下: Minimizing maximizer Time Limit: 5000MS   Memory Limit: 30000K Total Submissions: 5104   Accep ...

  6. k8s数据管理(八)

    volume 我们经常会说:容器和 Pod 是短暂的.其含义是它们的生命周期可能很短,会被频繁地销毁和创建.容器销毁时,保存在容器内部文件系统中的数据都会被清除. 为了持久化保存容器的数据,可以使用 ...

  7. javaweb开发中的常见错误

    Javaweb中的最常见错误及其解决方法 1.200:表示成功处理业务. 2.400 请求出错: 由于语法格式有误,服务器无法理解此请求.不作修改,客户程序就 无法重复此请求. 解决办法:,遇到400 ...

  8. 浅谈 ArrayList 及其扩容机制

    浅谈ArrayList ArrayList类又称动态数组,同时实现了Collection和List接口,其内部数据结构由数组实现,因此可对容器内元素实现快速随机访问.但因为ArrayList中插入或删 ...

  9. Redis中的事务(多命令)操作

    作为一个nosql数据库,事务是必要功能.但是redis我们是可以理解为它不支持事务操作的,因为它的特征完全不满足我们对事物的正常理解 ps:我不知道是谁一开始提出redis支持事务的,但是我更倾向于 ...

  10. Mac更换鼠标指针样式_mousecape教程

    mousecape项目介绍 这是github上的一个项目,作者是alexzielenski. 项目是用于修改Mac系统鼠标样式的,支持动态鼠标样式. 该项目停止更新于2014年,目前仍可以被较新的系统 ...