Jenkins基础:Jenkinsfile使用实例:12:在Jenkins分布式构建环境中执行构建

本文主要是介绍Jenkins基础:Jenkinsfile使用实例:12:在Jenkins分布式构建环境中执行构建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Jenkins支持多种方式实现分布式构建,这篇文章介绍在一主节点(Master)三从节点(Slave)的Jenkins分布式构建环境中使用Jenkinsfile的构建方式。

环境准备

构建JNLP方式的环境,构成信息如下所示:
在这里插入图片描述
环境准备过程可参看如下内容:

  • https://blog.csdn.net/liumiaocn/article/details/94384235

示例Jenkinsfile

示例

本文示例Jenkinsfile将流水线分按照功能分为逻辑上的三段:构建(Build) 、测试(Test)、部署(Deploy),顺序如下所示。

构建
测试
部署

示例所使用的Jenkinsfile信息如下所示,说明如下:

  • pipeline是结构,在其中可以指定agent和stages等相关信息
  • agent用于指定执行job的节点,any为不做限制
  • stages用与设定具体的stage
  • stage为具体的节点,比如本文示例中模拟实际的 Build(构建)、测试(Test)、部署(Deploy)的过程。
pipeline {agent any stages {stage('Build') { steps { sh 'echo Build stage ...' }}stage('Test'){steps {sh 'echo Test stage ...' }}stage('Deploy') {steps {sh 'echo Deploy stage ...' }}}}

获取Jenkins-Crumb

使用如下示例代码获取Jenkins-Crumb,为使用API方式生成三个Stage的Pipeline示例作准备。

liumiaocn:jenkins liumiao$ jenkins_host_url=http://localhost:32002
liumiaocn:jenkins liumiao$ user_passwd="root:liumiaocn"
liumiaocn:jenkins liumiao$ jenkins_crumb=`curl -u $user_passwd ${jenkins_host_url}'/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)' 2>/dev/null`
liumiaocn:jenkins liumiao$ echo $jenkins_crumb
Jenkins-Crumb:de06be27cb740cc347943ff72b399d6e
liumiaocn:jenkins liumiao$

创建Job

上述Pipeline以及相关的config.xml文件在easypack中有保存,可以直接使用。

  • git clone 并切换目录

命令:git clone https://github.com/liumiaocn/easypack.git
cd easypack/containers/alpine/jenkins

liumiaocn:jenkins liumiao$ ls demo/pipeline/stage/config.xml
demo/pipeline/stage/config.xml
liumiaocn:jenkins liumiao$ cat demo/pipeline/stage/config.xml
<?xml version='1.1' encoding='UTF-8'?>
<flow-definition plugin="workflow-job@2.32"><actions><org.jenkinsci.plugins.pipeline.modeldefinition.actions.DeclarativeJobAction plugin="pipeline-model-definition@1.3.8"/></actions><description>Pipeline Job Sample</description><keepDependencies>false</keepDependencies><properties><hudson.plugins.jira.JiraProjectProperty plugin="jira@3.0.7"/><com.dabsquared.gitlabjenkins.connection.GitLabConnectionProperty plugin="gitlab-plugin@1.5.12"><gitLabConnection></gitLabConnection></com.dabsquared.gitlabjenkins.connection.GitLabConnectionProperty></properties><definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="workflow-cps@2.69"><script>pipeline {agent any stages {stage('Build') { steps { sh 'echo Build stage ...' }}stage('Test'){steps {sh 'echo Test stage ...' }}stage('Deploy') {steps {sh 'echo Deploy stage ...' }}}}</script><sandbox>false</sandbox></definition><triggers/><disabled>false</disabled>
</flow-definition>
liumiaocn:jenkins liumiao$ curl -X POST -u $user_passwd -H ${jenkins_crumb} -H "Content-Type:application/xml"  --data-binary  "@demo/pipeline/stage/config.xml" ${jenkins_host_url}/createItem?name=pipeline_job_noparam
liumiaocn:jenkins liumiao$ echo $?
0
liumiaocn:jenkins liumiao$

执行Job

使用如下命令或者直接在Jenkins上点击构建

liumiaocn:jenkins liumiao$ curl -X POST -u $user_passwd -H ${jenkins_crumb} ${jenkins_host_url}/job/pipeline_job_noparam/build
liumiaocn:jenkins liumiao$ echo $?
0
liumiaocn:jenkins liumiao$

确认执行结果

此处的环境为1主3从的构成,主节点不具有执行job的能力,在执行的过程中截取中间的状态可以看到主节点协调从节点完成构建的过程,如下图所示
在这里插入图片描述

使用如下命令可以确认相关的执行日志信息,与普通方式不同的有“Running on agent003 ”的信息提示此此构建在具体的那个Jenkins节点上进行的。

liumiaocn:jenkins liumiao$ curl -u $user_passwd ${jenkins_host_url}/job/pipeline_job_noparam/1/consoleText
Started by user root
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on agent003 in /tmp/jenkins/agent003/workspace/pipeline_job_noparam
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Build)
[Pipeline] sh
+ echo Build stage ...
Build stage ...
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] sh
+ echo Test stage ...
Test stage ...
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Deploy)
[Pipeline] sh
+ echo Deploy stage ...
Deploy stage ...
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
liumiaocn:jenkins liumiao$ 

同时也可以通过Jenkins的BlueOcean插件(Easypack集成)来确认,但是无法直接确认到Jenkins节点的详细信息。
在这里插入图片描述

同时执行11次构建

构建脚本:使用如下脚本,执行11次构建,以确认中间过程

for i in 1 2 3 4 5 6 7 8 9 10 11
do
echo "jenkins job build $i ..."
curl -X POST -u $user_passwd -H ${jenkins_crumb} ${jenkins_host_url}/job/pipeline_job_noparam/build
echo $?
done

执行日志如下所示

liumiaocn:jenkins liumiao$  for i in 1 2 3 4 5 6 7 8 9 10 11
> do
> echo "jenkins job build $i ..."
> curl -X POST -u $user_passwd -H ${jenkins_crumb} ${jenkins_host_url}/job/pipeline_job_noparam/build
> echo $?
> done
jenkins job build 1 ...
0
jenkins job build 2 ...
0
jenkins job build 3 ...
0
jenkins job build 4 ...
0
jenkins job build 5 ...
0
jenkins job build 6 ...
0
jenkins job build 7 ...
0
jenkins job build 8 ...
0
jenkins job build 9 ...
0
jenkins job build 10 ...
0
jenkins job build 11 ...
0
liumiaocn:jenkins liumiao$ 

截取中间执行过程,可以看到三个节点都有job在并行执行
在这里插入图片描述
在BlueOcean上的执行日志上也能看到这些job的执行时间相近
在这里插入图片描述

构建信息的确认

构建信息都在Master节点上,可参看如下操作日志

liumiaocn:jenkins liumiao$  docker exec -it jenkins_jenkins_1 sh
/ # cd $JENKINS_HOME
/data/jenkins # cd jobs//pipeline_job_noparam
/data/jenkins/jobs/pipeline_job_noparam # ls
builds	config.xml  lastStable	lastSuccessful	nextBuildNumber
/data/jenkins/jobs/pipeline_job_noparam # ls builds
1  10  11  12  2  3  4	5  6  7  8  9  lastFailedBuild	lastStableBuild  lastSuccessfulBuild  lastUnstableBuild  lastUnsuccessfulBuild
/data/jenkins/jobs/pipeline_job_noparam #

注意事项

Jenkins为了放置同一时间过多的并行构建带来的性能问题,有个设定选项为Quiet period,此项设定缺省值为5,表示5秒,此次并行实验需要将此值设定为0,否则无法确认效果。
在这里插入图片描述

这篇关于Jenkins基础:Jenkinsfile使用实例:12:在Jenkins分布式构建环境中执行构建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/liumiaocn/article/details/94392975
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/561799

相关文章

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

SpringCloud中的@FeignClient注解使用详解

《SpringCloud中的@FeignClient注解使用详解》在SpringCloud中使用Feign进行服务间的调用时,通常会使用@FeignClient注解来标记Feign客户端接口,这篇文章... 在Spring Cloud中使用Feign进行服务间的调用时,通常会使用@FeignClient注解

MySQL的ALTER TABLE命令的使用解读

《MySQL的ALTERTABLE命令的使用解读》:本文主要介绍MySQL的ALTERTABLE命令的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、查看所建表的编China编程码格式2、修改表的编码格式3、修改列队数据类型4、添加列5、修改列的位置5.1、把列

Python使用FFmpeg实现高效音频格式转换工具

《Python使用FFmpeg实现高效音频格式转换工具》在数字音频处理领域,音频格式转换是一项基础但至关重要的功能,本文主要为大家介绍了Python如何使用FFmpeg实现强大功能的图形化音频转换工具... 目录概述功能详解软件效果展示主界面布局转换过程截图完成提示开发步骤详解1. 环境准备2. 项目功能结

SpringBoot使用ffmpeg实现视频压缩

《SpringBoot使用ffmpeg实现视频压缩》FFmpeg是一个开源的跨平台多媒体处理工具集,用于录制,转换,编辑和流式传输音频和视频,本文将使用ffmpeg实现视频压缩功能,有需要的可以参考... 目录核心功能1.格式转换2.编解码3.音视频处理4.流媒体支持5.滤镜(Filter)安装配置linu

Redis中的Lettuce使用详解

《Redis中的Lettuce使用详解》Lettuce是一个高级的、线程安全的Redis客户端,用于与Redis数据库交互,Lettuce是一个功能强大、使用方便的Redis客户端,适用于各种规模的J... 目录简介特点连接池连接池特点连接池管理连接池优势连接池配置参数监控常用监控工具通过JMX监控通过Pr