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分布式构建环境中执行构建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/561799

相关文章

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同