【运维知识高级篇】超详细的Jenkins教程5(pipeline流水线配置+分布式构建)

news2024/11/8 15:24:31

CI/CD是持续集成,持续部署,集成就是开发人员通过自动化编译,发布,测试的手段集成软件,在开发的测试环境上测试发现自己的错误;持续部署是自动化构建,部署,通常也是在测试环境上进行,方便开发人员查看效果。
生产环境的话要谨慎很多,在测试环境上由测试人员测试好后开始上生产环境,生产环境集成Jenkins要确保整个流程相当完善,形成一套pipeline,后续迭代更新也由Jenkins来做自动化更新,一键更新生产环境。
听同事说有的C语言的项目,只是编译就要好几个钟头,如果项目集成比较耗费时间,运行在master上会消耗过多资源,影响其他项目集成,这时候就需要建立多台设备,配置slave机器来为master提供负载服务,类似于zabbix分布式监控,这种构建方式叫做分布式构建。

文章目录

  • Pipeline介绍
  • Pipeline示例
    • 一、声明式
    • 二、脚本式
  • Pipeline项目
    • 一、项目内部写Pipeline
    • 二、代码内部写Pipeline
  • 分布式构建

Pipeline介绍

Pipeline就是运行在Jenkins上的工作流,把单个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。它的实现方式是Groovy的脚本,它支持从代码段中读取脚本,实现了Pipeline与代码的融合。

Pipeline是用户定义的部署的流程,包含构建,测试,发布等步骤,有一些代码块需要我们去关注,比如Node,是一个机器,是Jenkins环境的一部分,可以执行Pipeline;还有Stage,Stage块定义在整个Pipeline中执行的概念上的不同的任务子集,例如,构建,测试,部署等,很多插件都通过这个代码块去做可视化,呈现Jenkins管道状态、进度;Step是一项任务,是一个步骤,告诉Jenkins在特定时间点,需要做什么,例如sh step:sh 'make’可以执行make这个shell命令。

Pipeline示例

Pipeline分为声明式和脚本式,两者相差不是很大,注意不要混淆,建议用声明式

一、声明式

pipeline{
agent any
stages{
    stage("get code"){
       steps{
           echo "get code from scm"
       }
    }
    stage("package"){
        steps{
            echo "packge code"
        }
    }
    stage("deploy"){
        steps{
            echo "deploy packge to node1"
        }
    }
}
}

二、脚本式

node {
  stage('Build') {
    echo 'Build'
  }
  stage('Test') {
    echo 'Test'
  }
  stage('Deploy') {
    echo 'Deploy'
  }
}

Pipeline项目

一、项目内部写Pipeline

1、新建一个pipeline项目

在这里插入图片描述
2、粘贴声明式脚本

在这里插入图片描述

二、代码内部写Pipeline

在代码仓库里新建个文件去写即可

在这里插入图片描述

pipeline{
agent any
// agent { label 'node1' }
stages{
    stage("get code"){
       steps{
           sh '/usr/local/sonar-scanner/bin/sonar-scanner -Dsonar.projectKey=html  -Dsonar.projectName=${JOB_NAME} -Dsonar.sources=.'
       }
    }
    stage("unit test"){
       steps{
            echo "unit test"
       }
    }
    stage("package"){
        steps{
            sh 'tar zcf /opt/web-${BUILD_ID}.tar.gz ./* --exclude=./git --exclude=jenkinsfile'
        }
    }
    stage("deploy"){
        steps{
            sh 'ssh 10.0.0.8 "cd /usr/share/nginx && mkdir web-${BUILD_ID}"'
            sh 'scp /opt/web-${BUILD_ID}.tar.gz 10.0.0.8:/usr/share/nginx/web-${BUILD_ID}'
            sh 'ssh 10.0.0.8 "cd /usr/share/nginx/web-${BUILD_ID} && tar xf web-${BUILD_ID}.tar.gz && rm -rf web-${BUILD_ID}.tar.gz"'
            sh 'ssh 10.0.0.8 "cd /usr/share/nginx && rm -rf html && ln -s web-${BUILD_ID} /usr/share/nginx/html"'
        }
    }
}
}

这里用的是开发人员用户创建的jenkinsfile,申请合并到了master分支,又用root用户去同意合并了一下。
在这里插入图片描述
在Jenkins端测试获取

在这里插入图片描述
在这里插入图片描述

点击构建测试,jenkinsfile是取到了但是构建失败了,因为我jenkinsfile的原因,这里大家根据业务需求去写自己的jenkinsfile就行,我这里只是把流程给大家跑通了。

在这里插入图片描述

分布式构建

如果你的项目在集成的时候很耗费性能,那你千万不要可着一台机器去折腾,你可以配置一些slave机器为master机器提供负载服务。

接下来我们部署一台slave服务器。
1、在sonar上安装java,git。

[root@Sonar ~]# yum -y install java git

2、把以及配置好的sonar和maven的客户端,scp到sonar主机。

[root@Jenkins ~]# scp -r /usr/local/sonar-scanner 10.0.0.203:/usr/local/
[root@Jenkins ~]# scp -r /usr/local/maven 10.0.0.203:/usr/local/

[root@Sonar ~]# mkdir -p /server/scripts

[root@Jenkins ~]# scp /var/lib/jenkins/workspace/git_version/deploy_rollback.sh 10.0.0.203:/server/scripts/

3、在Jenkins上创建节点
系统管理,节点管理,新建节点。
在这里插入图片描述
在这里插入图片描述
做免秘钥认证拷贝jenkins公钥到slave,私钥配置到jenkins

ssh-copy-id -i .ssh/id_rsa.pub 10.0.0.203

在这里插入图片描述

[root@Jenkins ~]# cat .ssh/id_rsa

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
slave服务器上还需要做连接web的免秘钥认证,方便去推送代码,总之是把各个流程都打通,做这个前可以画个图按照图去操作。

[root@Sonar ~]# ssh-keygen
[root@Sonar ~]# ssh-copy-id -i .ssh/id_rsa.pub 10.0.0.7

当构建任务超过2时,会分配给slave节点去构建,可能是我用的这个Jenkins版本太老了,好多功能都无法复现的很好,还有一些bug,推荐大家用新版本。

在这里插入图片描述


我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1114504.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android问题笔记 - NoSuchmethodException: could not find Fragment constructor

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&…

UiPath:一家由生成式AI驱动的流程自动化软件公司

来源:猛兽财经 作者:猛兽财经 总结: (1)UiPath(PATH)的股价并没有因为生成式AI的炒作而上涨,但很可能会成为主要受益者。 (2)即使在严峻的宏观环境下,UiPath的收入还在不…

实现Linux下Word转PDF、Java调用命令方式

使用 LibreOffice 实现 Word 转 PDF 和 Java 调用命令 1、 安装 LibreOffice 外网安装 # 一键安装 yum install -y libreoffice # 验证版本 libreoffice --version # Warning: -version is deprecated. Use --version instead. # LibreOffice 7.5.6.2 f654817fb68d6d4600d7…

深入理解 Python 虚拟机:进程、线程和协程

深入理解 Python 虚拟机:进程、线程和协程 在本篇文章当中深入分析在 Python 当中 进程、线程和协程的区别,这三个概念会让人非常迷惑。如果没有深入了解这三者的实现原理,只是看一些文字说明,也很难理解。在本篇文章当中我们将通…

智慧图书馆视频监控系统方案——助力图书信息化管理

图书馆的藏书一般都是较为宝贵和珍重的,但图书馆的读者较多且复杂,为保护十分珍贵的图书资源,防止图书馆图书的丢失和损坏,TSINGSEE青犀智能视频监控系统应运而生。 1、视频监控系统 安装高清摄像头覆盖图书馆内的关键区域&#…

PMP考试中的常见翻译问题

1、题目中出现的“启动会议”或“启动大会”开工会议(kick-off meeting) 2、题目中出现的“回报期” 回收期(项目选择的经济模型) 3、题目中出现的“增强” 提高(风险应对策略) 4、题目中出现的“缓解” 减轻&#…

电源模块直流稳压电源不知道如何调试?纳米软件为您科普

调试是一个查错和排错的过程。电源模块调试就是在正常使用之前先通过调试检测其是否存在一些故障,确保在后期使用中整个电路可以稳定运行。直流稳压电源是常用的一种电源供应装置,今天纳米软件将介绍直流稳压电源调试方法。 直流稳压电源调试步骤 稳定直…

29 “select *“ 或者 “select field1, field2“ 的实现

前言 这里我们来探究一下 “select *” 或者 “select 字段列表“ 的相关实现 当然 这一部分在 “mysql union” 里面有具体的体现, 只是 可能没有那么细致 这里 来概览一下 这里的整个流程 select * from tz_test; setup_wild 的地方是处理 “select *” 的地方 外层迭代…

从北京到南京:偶数在能源行业的数据迁移实践

能源行业的数字化转型 当前,大数据技术在以电力为代表的能源行业不断推进,同时,分布式能源、储能、电网技术不断改进,电力行业的数字化转型充满了机遇和挑战。 一方面,电力行业本身自动化程度高、信息化基础好、系统…

去水印app有哪些?这三款良心推荐

如今图片的使用越来越普遍,因此我们经常需要对图片进行编辑和修改。但有些图片可能带有水印,这会影响图片的美观和应用效果。你知道有哪些推荐的图片去水印app吗?以下是介绍的三款可以去水印app,让你的素材更加专业和美观&#xf…

Python高频面试题——如何在字符串中删除指定字符,掌握strip()、replace()和re.sub ()正确使用方法!

关于python删除字符串是面试python测试开发工程师的一个经典问题。问题很简单,但是一下子就能测试出来被面试者是否能够熟练的进行python相关编码工作! 对于有些临时抱佛脚的同学来讲,一看删除,很自然就说用remove 、del相关方法…

优化销售策略,突破企业全面预算管理难题

传统的企业年度销售计划往往会消耗企业内部人员很多精力和时间,比如需要收集数据、处理电子表格、确定项目优先级、预测未来发展以及为次年的费用制定预算等。然而随着这些繁琐的工作不断进行,其中的准确性和价值也受到了一定的怀疑。虽然销售计划仍按着…

经纬恒润推出全新一代智能电动座椅模块

随着智能驾驶、智能座舱的广泛应用,人们对于汽车的定位不再局限于代步工具,对于汽车座舱这个私密空间也有了不一样的期待。更安全、更舒适、更智能化的体验将成为未来智能座椅的发展方向,而传统的座椅控制系统已无法满足人们新的需求。 为了…

python3 win环境部署

python3 win环境部署 1.安装包 https://www.python.org/ftp/python/3.12.0/python-3.12.0-amd64.exe安装成功后 ctrlr 输入 cmd 执行 python 检验是否安装成功 pip 镜像源更新 查看pip.ini 文件路径,一般在 python 安装目录下添加 pip.ini 文件即可 pip -v config list​ 创建…

JAVA---RMI详解1

一、RMI简介 The Java Remote Method Invocation (RMI)允许运行在一台虚拟机上的对象调用运行在另一台虚拟机上的对象中的方法。RMI使用stubs and skeletons (存根和骨架)架构来和远程对象(Remote Object)沟通 二、相关术语介绍 1…

人脸写真FaceChain风格写真的试玩(二)

接着上一篇【人脸写真FaceChain的简单部署记录(一)】来试玩一下。 1 无限风格写真 参考:让你拥有专属且万能的AI摄影师AI修图师——FaceChain迎来最大版本更新 1.1 人物形象训练 这里的步骤比较简单,就是选择照片,然…

CentOS7.9离线安装Docker环境

1. 下载合适的Docker安装包 Docker安装包下载地址:Index of linux/static/stable/x86_64/https://download.docker.com/linux/static/stable/x86_64/ 进入地址页面,如下图: 我下载的是:docker-23.0.1.tgz 版本 2. 将下载好的Do…

linux-守护进程daemon

linux-守护进程daemon 代码实现 main.c运行结果 代码实现 main.c //pName&#xff1a;程序名 //facility&#xff1a; 守护进程&#xff0c;输出日志类型 302页 #include<signal.h> #include<syslog.h> #include<fcntl.h> static int daemon_proc 0; #defin…

AQS理解

AQS是JAVA中的一组抽象类&#xff0c;就是为了解决多线程并发竞争共享资源而引发的线程安全问题&#xff0c;细致点说AQS就是具备一套线程阻塞等待以及被唤醒的时候锁分配的机制&#xff0c;这个机制是由队列来实现的&#xff0c;暂时获取不到所的线程加入到队列里面&#xff0…

爬虫/scrapy基础

如果文章对你有帮助&#xff0c;欢迎关注、点赞、收藏一键三连支持以下哦&#xff01; 想要一起交流学习的小伙伴可以加zkaq222&#xff08;备注CSDN&#xff0c;不备注通不过哦&#xff09;进入学习&#xff0c;共同学习进步 目录 0x01 安装和简介 0x02 文件作用 0x04 保存…