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

编程入门 行业动态 更新时间:2024-10-17 13:32:49

【运维知识高级篇】超详细的Jenkins教程5(pipeline流水线配置+<a href=https://www.elefans.com/category/jswz/34/1770120.html style=分布式构建)"/>

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

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年运维经验,持续分享运维干货,感谢大家的阅读和关注!

更多推荐

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

本文发布于:2023-12-06 21:00:57,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1668905.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:分布式   流水线   高级   教程   知识

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!