avatar

7.Pipeline分布式构建

pipeline分布式构建

第1章 Jenkins Pipeline项目

CI/CD持续集成/持续部署

持续集成(Continuous integration)是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。比如(你家装修厨房,其中一项是铺地砖,边角地砖要切割大小。如果一次全切割完再铺上去,发现尺寸有误的话浪费和返工时间就大了,不如切一块铺一块。这就是持续集成。)

持续部署(continuous deployment)是通过自动化的构建、测试和部署循环来快速交付高质量的产品。某种程度上代表了一个开发团队工程化的程度,毕竟快速运转的互联网公司人力成本会高于机器,投资机器优化开发流程化

相对也提高了人的效率。比如(装修厨房有很多部分,每个部分都有检测手段,如地砖铺完了要测试漏水与否,线路铺完了要通电测试电路通顺,水管装好了也要测试冷水热水。如果全部装完了再测,出现问题可能会互相影响,比如电路不行可能要把地砖给挖开……。那么每完成一部分就测试,这是持续部署。)

持续交付 Continuous Delivery:频繁地将软件的新版本,交付给质量团队或者用户,以供评审尽早发现生产环境

中存在的问题;如果评审通过,代码就进入生产阶段

比如(全部装修完了,你去验收,发现地砖颜色不合意,水池太小,灶台位置不对,返工吗?所以不如没完成一部分,你就去用一下试用验收,这就是持续交付。)

敏捷思想中提出的这三个观点,还强调一件事:通过技术手段自动化这三个工作。加快交付速度。

什么是pipeline

Jenkins 2.0的精髓是Pipeline as Code,是帮助Jenkins实现CI到CD转变的重要角色。什么是Pipeline,简单

来说,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个

任务难以完成的复杂发布流程。Pipeline的实现方式是一套Groovy DSL,任何发布流程都可以表述为一段Groovy

脚本,并且Jenkins支持从代码库直接读取脚本,从而实现了Pipeline as Code的理念。

Pipeline 概念

Pipeline 是一个用户定义的 CD 流水线模式。Pipeline 代码定义了通常包含构建、测试和发布步骤的完整的构

建过程。

Node

node 是一个机器,它是 Jenkins 环境的一部分,并且能够执行 Pipeline。同时,node 代码块也是脚本式

Pipeline 语法的关键特性。

Stage

Stage 块定义了在整个 Pipeline 中执行的概念上不同的任务子集(例如“构建”,“测试”和“部署”阶段),

许多插件使用它来可视化或呈现 Jenkins 管道状态/进度。

Step

一项任务。从根本上讲,一个步骤告诉 Jenkins 在特定时间点(或过程中的“步骤”)要做什么。例如,使用

sh step:sh ‘make’ 可以执行 make 这个 shell 命令。

jenkins file

脚本式语法格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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"
}
}
}
}

创建一个pipeline测试

使用测试pipeline脚本测试

创建一个jenkinsfile项目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
pipeline{
agent any
stages{
stage("get code"){
steps{
echo "get code"
}
}
stage("unit test"){
steps{
sh '/usr/local/sonar-scanner/bin/sonar-scanner -Dsonar.projectKey=html -Dsonar.projectName=${JOB_NAME} -Dsonar.sources=.'
}
}
stage("package"){
steps{
sh 'tar zcf /opt/web-${BUILD_ID}.tar.gz ./* --exclude=./git --exclude=jenkinsfile'
}
}
stage("deploy"){
steps{
sh 'ssh 10.0.1.7 "cd /code/www/ && mkdir web-${BUILD_ID}"'
sh 'scp /opt/web-${BUILD_ID}.tar.gz 10.0.1.7:/code/www/web-${BUILD_ID}'
sh 'ssh 10.0.1.7 "cd /code/www/web-${BUILD_ID} && tar xf web-${BUILD_ID}.tar.gz && rm -rf web-${BUILD_ID}.tar.gz"'
sh 'ssh 10.0.1.7 "cd /code/www/ && rm -rf html && ln -s web-${BUILD_ID} /code/www/html"'
}
}
}
}

配置pipeline流水线

在gitlab上创建Jenkinsfile,并写入脚本

返回jenkins重新构建

使用Blue Ocean查看

第2章 分布式构建

分布式构建

如果项目需要定期集成,同时每次集成都需要较长时间。如果都运行在master服务器上,会消耗过多资源,导致其他项目搁置无法集成,这时就需要在建立多台设备,并配置作为slave机器来为master提供负载服务。

1.环境准备

找一台或者目前已有的服务器配置为slave端 #当前使用soar服务器作为slave测试

sonar上安装java jdk gitsoanr 客户端

#如已安装则略过

1
yum -y install java git

scp jenkins上已配置好的客户端到此服务器 sonarmaven

jenkins服务器操作 注意带版本号做软链接

1
2
3
4
5
6
7
scp -r /usr/local/sonar-scanner-4.0.0.1744-linux 10.0.1.203:/usr/local/
scp -r /usr/local/apache-maven-3.3.9 10.0.1.203:/usr/local/
ssh 10.0.1.203 "mkdir /server/scripts -p"
scp /server/scripts/* 10.0.1.203:/server/scripts/

#做免秘钥认证拷贝jenkins公钥到slave,私钥配置到jenkins
cd && ssh-copy-id -i .ssh/id_rsa.pub 10.0.1.203

返回sonar上创建软链接

1
2
ln -s sonar-scanner-4.0.0.1744-linux sonar-scanner
ln -s apache-maven-3.3.9 maven

slave服务器上做连接web的免秘钥认证

1
2
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub 10.0.1.7

2.新建节点

点击系统管理->节点管理->新建节点

配置工具默认目录

配置成功后的状态

显示已经同步成功

3.构建多个项目测试

文章作者: Wu Fei
文章链接: http://linuxwf.com/2020/04/15/7-Pipeline%E5%88%86%E5%B8%83%E5%BC%8F%E6%9E%84%E5%BB%BA/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WF's Blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论