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

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

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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
<h3>回答1:</h3><br/>Jenkins流水线Pipeline)是一种基于脚本的持续集成和交付工具,它可以通过编写脚本来定义整个构建过程,包括构建、测试、打包、部署等环节。Pipeline可以帮助团队更好地管理和控制软件开发过程,提高开发效率和质量。同时,Pipeline还支持可视化的界面,方便用户查看和管理构建过程。 <h3>回答2:</h3><br/>Jenkins流水线Pipeline是一种自动化工具,它允许用户在Jenkins中创建、测试和部署软件的过程。 Pipeline可以通过定义该过程的阶段和任务来帮助用户更好地管理软件开发项目的生命周期。Pipeline支持多种编程语言,包括Java、Python和Ruby等。 Pipeline的基本单元是阶段。每个阶段定义了软件开发流程中的一组操作,例如拉取代码、运行单元测试、构建和部署软件等。 在Pipeline中,阶段是由任务组成的。任务表示可执行的操作,例如运行shell脚本、调用Jenkins插件或编译代码等。 Pipeline通过Jenkinsfile文件来定义软件开发过程。Jenkinsfile是一个Groovy脚本,它描述了软件开发阶段和任务的结构、依赖关系和输入输出。 Pipeline的一个显著特点是它可以支持持续交付和持续集成。持续交付指的是在软件生命周期中自动构建、测试和部署软件的过程,以便在任何时候可以将代码快速交付到生产环境中。持续集成指在代码库中提交新代码时自动构建和测试已有代码的过程,以便尽早发现潜在的问题和错误。 总之,PipelineJenkins中的一个强大的工具,可以帮助您更好地管理软件开发项目的生命周期。它通过定义软件开发过程中的阶段和任务,支持持续交付和持续集成,并以Jenkinsfile作为描述文件,可以方便地管理和维护软件开发过程。 <h3>回答3:</h3><br/>Jenkins是一款开源的自动化构建工具,它提供了丰富的插件来支持不同的构建方式和工具。其中流水线Pipeline插件是Jenkins的核心插件之一,它提供了一种声明式的DSL语言来实现复杂的连续构建流程和自动化测试。 Pipeline的概念是Jenkins提供的一个全新的构建方式,它允许用户定义完整的构建流程,从代码的检出到构建、测试和部署。和传统的构建方式不同,Pipeline通过将整个构建流程视为一个整体,提供了更多的自定义和可编程性。 Pipeline有两种实现方式,一种是基于Scripted Pipeline,另一种是基于Declarative Pipeline。Scripted Pipeline允许用户使用Groovy脚本来编写自己的构建流程,而Declarative Pipeline则提供了一种更加声明式的方式来定义构建流程。 Pipeline的核心是Stage和Step。Stage表示构建流程中的一个阶段,每个Stage实际上是一个具有清晰定义作用域的语句块,Step则是在Stage中执行的具体操作,常见的操作包括代码检出、编译、测试和部署等。用户可以根据自己的需求自由组合Stage和Step来构建自己的连续集成流水线Pipeline的优势在于其可扩展性和可重用性,用户可以通过自定义插件来扩展支持自己的构建工具和流程,也可以通过将常用的构建模板抽象出来来提高构建流程的可重用性,从而提高整个团队的效率。 综上所述,JenkinsPipeline插件为用户提供了一种全新的连续构建流程实现方式,让构建流程更加灵活和可控。它能够高效地管理构建流程的各个阶段,提高团队的协作效率,从而为项目的成功交付做出重要贡献。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是koten

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值