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上的热门开源项目:
- 在agent1上编译和构建spring-cloud-alibaba,再通过scp命令将构建结果传输到master电脑的/usr/local/build_result目录下;
- 在agent2编译和构建spring-framework,再通过scp命令将构建结果传输到master电脑的/usr/local/build_result目录下;
准备工作
要做以下准备工作才能顺利执行后续的任务:
- 在master电脑上创建文件夹/usr/local/build_result
- 配置maven,在Jenkins网页上选择Global Tool Configuration,如下图红框所示:
- 新增一个maven配置,名为mvn-3.6.2,然后点击“保存”按钮,如下图:
- agent1和agent2上用scp命令传输文件到master上的时候,第一次ssh要在控制台输入"yes",为了避免执行任务的时候出现这个等待输入的操作,我们去手动执行一遍,后面就再也不用了,ssh登录agent1之后,执行以下命令进入容器:
docker exec -it agent /bin/bash
- 执行命令ssh root@192.168.133.131,这时候控制台提示输入yes或者no,请您输入yes,再根据提示输入master的密码,此时登录master成功:
[root@agent1 16]# docker exec -it agent /bin/bash
root@82eb8cfec0a6:/# ssh root@192.168.133.131
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.
root@192.168.133.131's password:
Last login: Sat Nov 16 19:59:42 2019 from 192.168.133.132
- 此时您是在agent1的容器中ssh登录了master,所以要连续输入两次exit命令才能返回到agent1的控制台;
- 在agent2电脑上也执行相同的操作;
至此,准备完毕,可以创建任务了;
编译构建spring-cloud-alibaba的任务
spring-cloud-alibaba是个maven工程,要用maven来编译构建:
- 在Jenkins网页上,点击下图红框位置,创建一个任务:
- 如下图,创建名为spring-clolud-alibaba的pipeline任务:
- 下图红框位置就是输入pipeline脚本的地方:
- 在上图红框位置输入以下内容:
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 root@192.168.133.131:/usr/local/build_result'
echo '传送完毕'
}
}
stage('Clean') {
steps {
echo '清理Maven工程'
sh 'cd spring-cloud-alibaba-2.1.1.RELEASE && mvn clean'
echo '清理完毕'
}
}
}
}
- 点击底部的"保存"按钮后,点击下图红框中的"立即构建"即可开始任务:
点击下图红框中的红色圆球,即可跳转到实时输出任务信息的页面:
页面实时输出构建信息:
主页面可以看到是agent1在执行任务,如下图红框所示,可见pipeline脚本中的标签已经生效了,将任务调度到标签为maven的节点去执行:
编译构建spring-cloud-alibaba工程是个费时的操作,我们现在去创建另一个任务:编译构建spring-framework
编译构建spring-framework的任务
spring-framework是个gradle工程,不需要准备gradle环境,在执行编译命令时会自动下载gradle工具:
- 创建名为spring-framework的pipeline任务:
- 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 root@192.168.133.131:/usr/local/build_result && cd ../../..'
echo '传送完毕'
}
}
stage('Clean') {
steps {
echo '清理gradle工程'
sh './gradlew clean'
echo '清理完毕'
}
}
}
}
- 立即执行此任务,可见任务已经被调度到agent2上去执行了,此时的agent1和agent2正在同时执行任务,如下图:
查看构建结果
上述两个任务在构建成功后,都会通过scp命令将构建结果传送到master的/usr/local/build_result目录下:
[root@master 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的标签参数可以控制任务的调度节点,实现多任务同时在多节点执行;
欢迎关注公众号:程序员欣宸
Jenkins集群下的pipeline实战的更多相关文章
- 快速搭建Jenkins集群
关于Jenkins集群 在Jenkins上同时执行多个任务时,单机性能可能达到瓶颈,使用Jenkins集群可以有效的解决此问题,让多台机器同时处理这些任务可以将压力分散,对单机版Jenkins的单点故 ...
- 原创:centos7.1下 ZooKeeper 集群安装配置+Python实战范例
centos7.1下 ZooKeeper 集群安装配置+Python实战范例 下载:http://apache.fayea.com/zookeeper/zookeeper-3.4.9/zookeepe ...
- jenkins~集群分发功能的具体实现
前一讲主要说了jenkins分发的好处<jenkins~集群分发功能和职责处理>,它可以让具体的节点干自己具体的事,比如windows环境下的节点,它只负责编译,发布windows的生态环 ...
- 搭建jenkins集群
搭建jenkins集群是为了解决单点服务器存在的性能瓶颈,也有业务的需要,比如:java服务打包的环境我们需要linux,ios打包的服务器需要mac机. 一.创建agent节点 1.打开 系统管理- ...
- 用redis实现TOMCAT集群下的session共享
上篇实现了 LINUX中NGINX反向代理下的TOMCAT集群(http://www.cnblogs.com/yuanjava/p/6850764.html) 这次我们在上篇的基础上实现session ...
- jenkins~集群分发功能和职责处理
jenkins的多节点集群 在进行自动化部署时,你可以按着它们的项目类型去进行分别部署,这样即可以达到负载均衡,又可以达到一种职责的明确,比如像java的项目你可以使用linux服务来进行部署(拉代码 ...
- redis入门(14)redis集群下的数据分区存储
redis入门(10)redis集群下的数据分区存储
- Jenkins 集群搭建
一.前言 Jenkins是当下比较流行的一款功能强大的持续集成工具,它支持搭建集群,来提高多项目的构建速度,模式为主从模式,master会将任务分配到各个从节点进行并发构建,从而提高速度,下面介绍一下 ...
- Asp.net Core 使用Jenkins + Dockor 实现持续集成、自动化部署(三):搭建jenkins集群环境
写在前面 大家可以看到本文的配图,左边是jenkins单机环境,右边是jenkins集群.个中区别,不言而喻,形象生动. 前面我分别介绍了.net core 程序的多种部署方式(无绝对孰优孰劣): 1 ...
随机推荐
- 利用hash远程登陆系统
有的时候当我们拿到系统管理员hash由于密码复杂度过高无法破解时候可以利用hash直接进行远程登录 我们用到Metasploit里面的模块 肉鸡为windwos server 2003 x32系统 1 ...
- python爬取旅游数据+matplotlib简单可视化
题目如下: 共由6个函数组成: 第一个函数爬取数据并转为DataFrame: 第二个函数爬取数据后存入Excel中,对于解题来说是多余的,仅当练手以及方便核对数据: 后面四个函数分别对应题目中的四个m ...
- redis之Scan
scan 相比keys 具备有以下特点:1.复杂度虽然也是 O(n),但是它是通过游标分步进行的,不会阻塞线程;2.提供 limit 参数,可以控制每次返回结果的最大条数,limit 只是一个 hin ...
- Just 5分钟!使用k3s部署轻量Kubernetes集群快速教程
大小仅有40MB的k3s为想要节省开销进行开发和测试的企业提供了一个很好的选择.本文将用一种极为简洁的方式,教你在5分钟之内使用k3s部署轻量Kubernetes集群. Kubernetes已经改变了 ...
- day34作业
作业 查看岗位是teacher的员工姓名.年龄 select name,age from teacher where post='teacher'; 查看岗位是teacher且年龄大于30岁的员工姓名 ...
- Java基础(三十四)String、StringBuffer类和数据缓冲区Buffer类
一.String类 1.创建字符串对象 创建字符串对象有两种方法:直接用“=”或者使用“new String(...)” String aStr = "TMZ"; String b ...
- django-Views之使用视图渲染模板(五)
render(<request>,<template_name>,context=-None,content_type=None,status=None,using=None) ...
- Pandas | 17 缺失数据处理
数据丢失(缺失)在现实生活中总是一个问题. 机器学习和数据挖掘等领域由于数据缺失导致的数据质量差,在模型预测的准确性上面临着严重的问题. 在这些领域,缺失值处理是使模型更加准确和有效的重点. 使用重构 ...
- 阿里规范不建议多表Join,可这SQL要怎么写?
阿里开发手册的描述,禁止多表join: 手册上写着[强制],相信很多同学项目里面的代码都不满足这个要求. 但是关键问题是:不用join,这SQL究竟要怎么写?! 分解关联查询 即对每个要关联的表进行单 ...
- Android原生PDF功能实现:PDF阅读、PDF页面跳转、PDF手势伸缩、PDF目录树、PDF预览缩略图
1.背景 近期,公司希望实现安卓原生端的PDF功能,要求:高效.实用. 经过两天的调研.编码,实现了一个简单Demo,如上图所示. 关于安卓原生端的PDF功能实现,技术点还是很多的,为了咱们安卓开发的 ...