Jenkins集群下的pipeline实战

关于Jenkins集群

《快速搭建Jenkins集群》一文中,我们借助docker快速搭建了Jenkins集群,今天就在这个集群环境中创建pipeline任务,体验Jenkins集群下的并行任务;

环境信息

整个集群环境一共有三台电脑,信息如下:
| 主机名 | IP地址 | 作用 |
|--|--|--|
| master | 192.168.133.131 | Jenkins集群的master节点,提供web服务 |
| agent1 | 192.168.133.132 | Jenkins集群的一号工作接节点,标签是maven |
| agent2 | 192.168.133.133 | Jenkins集群的二号工作接节点,标签是gradle |

实战内容

本次实战要体验Jenkins集群同时执行两个任务,都是编译构建GitHub上的热门开源项目:

  1. 在agent1上编译和构建spring-cloud-alibaba,再通过scp命令将构建结果传输到master电脑的/usr/local/build_result目录下;
  2. 在agent2编译和构建spring-framework,再通过scp命令将构建结果传输到master电脑的/usr/local/build_result目录下;

准备工作

要做以下准备工作才能顺利执行后续的任务:

  1. 在master电脑上创建文件夹/usr/local/build_result
  2. 配置maven,在Jenkins网页上选择Global Tool Configuration,如下图红框所示:
  3. 新增一个maven配置,名为mvn-3.6.2,然后点击“保存”按钮,如下图:
  4. agent1和agent2上用scp命令传输文件到master上的时候,第一次ssh要在控制台输入"yes",为了避免执行任务的时候出现这个等待输入的操作,我们去手动执行一遍,后面就再也不用了,ssh登录agent1之后,执行以下命令进入容器:
docker exec -it agent /bin/bash
  1. 执行命令ssh [email protected],这时候控制台提示输入yes或者no,请您输入yes,再根据提示输入master的密码,此时登录master成功:
[[email protected] 16]# docker exec -it agent /bin/bash
[email protected]:/# ssh [email protected]
The authenticity of host '192.168.133.131 (192.168.133.131)' can't be established.
ECDSA key fingerprint is SHA256:DPE2nldWHiOhC4DB9doy7jPWNZVup6XFZ+sR2i1gqz8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.133.131' (ECDSA) to the list of known hosts.
[email protected]'s password:
Last login: Sat Nov 16 19:59:42 2019 from 192.168.133.132
  1. 此时您是在agent1的容器中ssh登录了master,所以要连续输入两次exit命令才能返回到agent1的控制台;
  2. 在agent2电脑上也执行相同的操作;

至此,准备完毕,可以创建任务了;

编译构建spring-cloud-alibaba的任务

spring-cloud-alibaba是个maven工程,要用maven来编译构建:

  1. 在Jenkins网页上,点击下图红框位置,创建一个任务:
  2. 如下图,创建名为spring-clolud-alibaba的pipeline任务:
  3. 下图红框位置就是输入pipeline脚本的地方:
  4. 在上图红框位置输入以下内容:
pipeline {
    agent {
        label 'maven'
    }
    tools {
        maven 'mvn-3.6.2'
    }
    stages {
        stage('Checkout') {
            steps {
                echo '从GitHub下载spring-cloud-alibaba工程的源码(2.1.1.RELEASE归档包)'
                sh 'wget https://github.com/alibaba/spring-cloud-alibaba/archive/v2.1.1.RELEASE.tar.gz'
                echo '下载结束,解压归档包'
                sh 'tar -zxf v2.1.1.RELEASE.tar.gz'
            }
        }
        stage('Build') {
            steps {
                echo '开始编译构建'
                sh 'cd spring-cloud-alibaba-2.1.1.RELEASE && mvn clean package -U -DskipTests'
            }
        }
        stage('Save') {
            steps {
                echo '将构建结果传送到存储服务器'
                sh 'cd spring-cloud-alibaba-2.1.1.RELEASE/spring-cloud-alibaba-nacos-discovery/target && sshpass -p 888888 scp ./*.jar [email protected]:/usr/local/build_result'
                echo '传送完毕'
            }
        }
        stage('Clean') {
            steps {
                echo '清理Maven工程'
                sh 'cd spring-cloud-alibaba-2.1.1.RELEASE && mvn clean'
                echo '清理完毕'
            }
        }
    }
}
  1. 点击底部的"保存"按钮后,点击下图红框中的"立即构建"即可开始任务:

  1. 点击下图红框中的红色圆球,即可跳转到实时输出任务信息的页面:
  2. 页面实时输出构建信息:
  3. 主页面可以看到是agent1在执行任务,如下图红框所示,可见pipeline脚本中的标签已经生效了,将任务调度到标签为maven的节点去执行:

    编译构建spring-cloud-alibaba工程是个费时的操作,我们现在去创建另一个任务:编译构建spring-framework

    编译构建spring-framework的任务

    spring-framework是个gradle工程,不需要准备gradle环境,在执行编译命令时会自动下载gradle工具:

  4. 创建名为spring-framework的pipeline任务:
  5. pipeline脚本如下:
pipeline {
    agent {
        label 'gradle'
    }

    stages {
        stage('Checkout') {
            steps {
                echo '从GitHub下载spring-framework工程的源码(master分支)'
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: 'https://github.com/spring-projects/spring-framework.git']]])
            }
        }
        stage('Build') {
            steps {
                echo '开始编译构建'
                sh './gradlew build'
            }
        }
        stage('传送构建结果') {
            steps {
                echo '将构建结果传送到存储服务器'
                sh 'cd spring-core/build/libs && sshpass -p 888888 scp ./*.jar [email protected]:/usr/local/build_result && cd ../../..'
                echo '传送完毕'
            }
        }
        stage('Clean') {
            steps {
                echo '清理gradle工程'
                sh './gradlew clean'
                echo '清理完毕'
            }
        }
    }
}
  1. 立即执行此任务,可见任务已经被调度到agent2上去执行了,此时的agent1和agent2正在同时执行任务,如下图:

    查看构建结果

    上述两个任务在构建成功后,都会通过scp命令将构建结果传送到master的/usr/local/build_result目录下:

[[email protected] build_result]# ls
agent.jar                      spring-cloud-alibaba-nacos-discovery-2.1.1.RELEASE.jar          spring-cloud-alibaba-nacos-discovery-2.1.1.RELEASE-sources.jar  spring-objenesis-repack-3.1.jar
spring-cglib-repack-3.3.0.jar  spring-cloud-alibaba-nacos-discovery-2.1.1.RELEASE-javadoc.jar  spring-core-5.2.2.BUILD-SNAPSHOT.jar

至此,Jenkins集群下的pipeline实战就完成了,借助pipeline的标签参数可以控制任务的调度节点,实现多任务同时在多节点执行;

欢迎关注公众号:程序员欣宸

原文地址:https://www.cnblogs.com/bolingcavalry/p/11874732.html

时间: 2024-10-13 05:20:07

Jenkins集群下的pipeline实战的相关文章

快速搭建Jenkins集群

关于Jenkins集群 在Jenkins上同时执行多个任务时,单机性能可能达到瓶颈,使用Jenkins集群可以有效的解决此问题,让多台机器同时处理这些任务可以将压力分散,对单机版Jenkins的单点故障的隐患也有分散作用,今天就来实战快速搭建Jenkins集群,Jenkins版本是2.190.2: 如何做到快速搭建集群 通过Docker可以省去大部分准备工作,您只需在Linux电脑上安装docker,在辅以少量命令和操作即可完成集群搭建: 环境信息 本次实战的环境一共要用三台电脑,它们的设置都是

kubernetes 1.5 + nginxplus负载均衡 + jenkins集群 实战(一)

背景: 如题,公司要部署一套这个东东,故找了些设备部署起来看看好不好使,本人鄙陋,这个文章只做个测试参考,抛砖引玉,如有大神指教,可以加一下我的QQ,好,废话少说,开始吧! 大概步骤: 1    环境说明和配置 2    安装etcd集群 3    安装k8s并且配置 4    安装nginxplus 5    安装jenkins集群 1.环境说明 ip hostname 角色 系统 172.18.1.6 k8s-node-1 etcd-master,k8s-master centos-7.2

第130讲:Hadoop集群管理工具DataBlockScanner 实战详解学习笔记

第130讲:Hadoop集群管理工具DataBlockScanner 实战详解学习笔记 DataBlockScanner在datanode上运行的block扫描器,定期检测当前datanode节点上所有的block,从而在客户端读到有问题的块前及时检测和修复有问题的块. 它有所有维护的块的列表,通过对块的列表依次的扫描,查看是否有校验问题或错误问题,它还有截流机制. 什么叫截流机制?DataBlockScanner扫描时会消耗大量的磁盘带宽,如果占用磁盘带宽太大,会有性能问题.所以它会只占用一小

jenkins~集群分发功能的具体实现

前一讲主要说了jenkins分发的好处<jenkins~集群分发功能和职责处理>,它可以让具体的节点干自己具体的事,比如windows环境下的节点,它只负责编译,发布windows的生态环境的项目:而linux节点主要负责和它相关的项目,如nodejs,.net core,java,php,python等等,你甚至可以做个mac节点,让它去编译打包你的IOS项目,听起来确实不错. 开始jenkins分发节点构建之旅 今天主要说的是建立分发节点的步骤,当然这也是大多人同学希望看到的文章,我们会以

负载均衡集群企业及应用实战--LVS

负载均衡集群企业及应用实战-Lvs LVS是Linux Virtual Server的简称: 也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org. 现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块, 无需给内核打任何补丁,可以直接使用LVS提供的各种功能. LVS自从19

用redis实现tomcat集群下的session共享

上篇实现了 LINUX中NGINX反向代理下的TOMCAT集群(http://www.cnblogs.com/yuanjava/p/6850764.html) 这次我们在上篇的基础上实现session 共享问题 Nginx机器:192.168.1.108 两台tomcat机器分别是:192.168.1.168 192.168.1.178 一:测试session共享问题 在原index.jsp页面添加如下代码 SessionId:<%= session.getId() %> <% Stri

was集群下基于接口分布式架构和开发经验谈

某b项目是我首次采用was环境下架构和开发的手机wap应用,尽管做到了该项目的主程,但对此项目的全面构件依然有不清楚的地方,因此在这里我只能简单的谈谈开发中遇到的问题怎么处理和应对办法. 记得第一天接触这个项目时,只记得些案例代码(不知道那些是对的,那些是错的)似曾相识,但不懂如何动手写下第一个helloword,因其中的基于接口开发的ejb的架构以前根本就没接触过.好了,没办法,于是只有硬着头皮去尝试第一个基于接口开发的ejb的第一个查询方法(呵呵最简单了吧).因为一切都是新的,一没有相对完整

集群下使用redis统一session处理

pom依赖(快照版): <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session</artifactId> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>

老男孩教育运维班100台规模集群阶段性综合上机实战考试

老男孩教育运维班100台规模集群第十关阶段性综合上机实战考试 光学理论有啥用,不拉出来实战遛遛,只能是自欺欺人! 项目要求: 1.全体学员上机实践考试,完成后由排长或班长.或助教打分. 2.时间:3个小时,抄袭0分. (一)上机服务器业务及IP主机名规划 已知5台服务器主机名主机对应信息见下表: 服务器说明 外网IP(NAT) 内网IP(NAT) 主机名 apache web服务器 10.0.0.7/24 172.16.1.7/24 web02 nginx web服务器 10.0.0.8/24