Jenkins pipeline基本概述

1.Jenkins pipeline基本概述

1.1 什么是Pipeline

简单来说,就是运行在Jenkins上的工作框架,通过”代码的方式“将多个任务连接起来。

1.Pipeline能直观展示每个阶段的任务

2.Pipeline能直观展示每个阶段的执行时间

3.Pipeline能快速的定位哪个阶段的任务出现错误

1.2 为什么要使用Pipeline

之前传统的部署流程,都需要在图形界面进行点击,使用Pipeline能够实现每一步的自动化,不需要人为干预。

1.3 Pipeline核心概念

agent:节点

stage:阶段

steps:动作

2.Jenkins Pileline语法示例

pipeline基础语法如下:

在这里插入图片描述

pipeline {     #所有代码包裹在pipeline{}层内
     agent any  #agent{}定义任务在哪台主机上运行。可以是any,none等
     environment {  #environment{}变量名称=变量值,用于定义环境变量,比如PATH路径等
         host='test.com'
     }
     stages { #stages{}类似一个大项目的集合,主要用来包含所有stage子任务
         stage('code'){ #stage{}类似一个项目中的单个任务,主要用来包含setup{}子层
         steps {   #setps{}用来实现具体执行的动作
               echo "code for host $host"
         }
       }
       stage('build'){
            steps {
                  sh "echo $host"
            }
        }
    }
}

pipeline是一种固定格式规范,必须遵守

3.Jenkins pipeline初次体验

pipeline流水线 实现 代码部署

jenkins中创建任务------输入名称-----点击流水线-----确定

脚本可以在jenkins中运行,也可以将脚本pipelinefile放在代码中,但代码中必须要有指定名字的文件

pipeline {
    agent any
	
	stages { //部署代码总合集
	   stage('获取代码'){
	       steps {
		       echo "git pull code"
		   }
	   }
	   stage('质量扫描'){
	       steps {
		       echo "git pull code"
		   }
	   }
	   stage('代码编译'){
	       steps {
		       echo "git pull code"
		   }
	   }
	   stage('是否部署'){
	       steps {
		       echo "git pull code"
		   }
	   }
	   stage('钉钉通知'){
	       steps {
		       echo "git pull code"
		   }
	   }
	}
}

4.Jenkins Pipeline部署java项目

怎么写pipeline脚本?

在jenkins中点击配置-----流水线基本语法----示例步骤中选择---->写pipleline脚本方式

获取代码: 选择Check out---->填入gitlab中代码的地址----->点击左下角生成语法---->复制到steps中

质量扫描: 执行命令,用绝对路径

代码编译: 执行命令mvn clean package -Dmaven.test.skip=true

代码部署: 执行代码部署脚本

钉钉通知: 在流水线基本语法中,示例步骤中搜索dingding,然后生成语法

pipeline {
	agent any
	stages {	//部署任务总合集
		stage('获取代码'){
			steps {
				checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '646f0911-1851-4924-aa5d-1e7c2450dfb6', url: 'git@gitlab.cwq.com:dev/hello-world-war.git']]])
			}
		}
		stage('质量扫描'){
			steps {
				sh '/usr/local/sonar-scanner/bin/sonar-scanner \
				-Dsonar.projectName=${JOB_NAME} \
				-Dsonar.projectKey=html \
				-Dsonar.sources=. \
				-Dsonar.host.url=http://sonar.cwq.com:9000 \
				-Dsonar.login=c3696d71e21313a7493a00d817f5b3c5894e3558'
			}
		}
		stage('代码编译'){
			steps {
				withSonarQubeEnv('sonarqube-130') { //此处是jenkins全局变量中sonarqube名称
					sh 'mvn clean package -Dmaven.test.skip=true'
				}
			}
		}
		stage('是否部署'){
			steps {
				input '是否确认部署'
			}
		}
		stage('代码部署'){
			steps {
				sh 'sh -x /scripts/deploy_java.sh'
			}
		}
	}
	
	
	post {
		success {
			dingTalk accessToken: '742394e99636ff32f0c8969cebf3887e8e737d6b8600acd0000385923fbeef88', imageUrl: '', jenkinsUrl: 'http://jenkins.cwq.com:8080', message: 'pipeline构建成功', notifyPeople: ''
			
		}

		failure {
			dingTalk accessToken: '742394e99636ff32f0c8969cebf3887e8e737d6b8600acd0000385923fbeef88', imageUrl: '', jenkinsUrl: 'http://jenkins.cwq.com:8080', message: 'pipeline构建失败', notifyPeople: ''
		}
	}
}

5.代码质量检测流程图

在这里插入图片描述

6.代码质量扫描未通过则停止部署

1.配置sonarqube的web回调接口,将扫描结果通知给jenkins服务器

Name:jenkins(不是固定的)

URL:http://admin:admin@123@jenkins.cwq.com:8080/sonarqube-webhook

URL :http://jenkins的用户名:jenkins的密码@jenkins的域名/sonarqube-webhook

在sonarqube中配置:配置---->web回调接口----->在第一个方框中写 jenkins---->第二个方框中写http://admin:admin@123@jenkins.cwq.com:8080/sonarqube-webhook ---->保存

pipeline脚本,增加了质量检测判断功能

pipeline {
	agent any
	
	stages {	//部署任务总合集
		stage('获取代码'){
			steps {
				checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '646f0911-1851-4924-aa5d-1e7c2450dfb6', url: 'git@gitlab.cwq.com:dev/hello-world-war.git']]])
			}
		}
		stage('质量扫描'){
			steps {
				withSonarQubeEnv('sonarqube-130') {
					sh '/usr/local/sonar-scanner/bin/sonar-scanner \
					-Dsonar.projectName=${JOB_NAME} \
					-Dsonar.projectKey=${JOB_NAME} \
					-Dsonar.sources=. \
					-Dsonar.host.url=http://sonar.cwq.com:9000 \
					-Dsonar.login=c3696d71e21313a7493a00d817f5b3c5894e3558'
				}
			}
		}
		
		stage('检测结果') {
			steps {
				script {
					timeout(5) { //sonar webhook通知pipeline代码检测结果,未通过pipeline将会fail
						def qg = waitForQualityGate() 
							if (qg.status != 'OK') {
								error "Sonarqube代码检查失败,failure: ${qg.status}"
						}
					}
				}
			}
		}

		stage('代码编译'){
			steps {
				withSonarQubeEnv('sonarqube-130') {
					sh 'mvn clean package -Dmaven.test.skip=true'
				}
			}
		}
		stage('是否部署'){
			steps {
				input '是否确认部署'
			}
		}
		stage('代码部署'){
			steps {
				sh 'sh -x /scripts/deploy_java.sh'
			}
		}
	}
	
	post {
		success {
			dingTalk accessToken: '742394e99636ff32f0c8969cebf3887e8e737d6b8600acd0000385923fbeef88', imageUrl: '', jenkinsUrl: 'http://jenkins.oldxu.com:8080', message: 'pipeline构建成功', notifyPeople: ''
			
		}

		failure {
			dingTalk accessToken: '742394e99636ff32f0c8969cebf3887e8e737d6b8600acd0000385923fbeef88', imageUrl: '', jenkinsUrl: 'http://jenkins.cwq.com:8080', message: 'pipeline构建失败', notifyPeople: ''
		}
	}
}

7.jenkins的分布式构建

1.加速不同环境的构建
2.降低master压力

如何实现:系统管理----->节点管理----->增加节点

#1.在master上添加slave节点信息
#2.master会发送一个jar包给slave
#3.slave要与master完全高度一致
java
git  免密登录  hosts域名解析
sonarqube客户端
web免密登录,推送脚本

配置

新建节点----->填写节点名称(slave-node1)----->确定

名称:node1

描述:可以不填

并发构件数:2

远程工作目录:/home/jenkins

标签:node1

用法:尽可能的使用这个节点

启动方式:Launch agent agents via SSH

主机:10.0.0.130 #jenkins机器要与这台机器免密

Credentials:jenkins的私钥

Host Key :Konwn hosts file Verification Strategy

#10.0.0.130机器中执行
yum install java maven git -y

mvn --version

jenkins机器执行
scp -rp /usr/local/sonar-scanner-4.0.0.1744-linux/ root@10.0.0.130:/usr/local/

10.0.0.130执行
ln -s /usr/local/sonar-scanner-4.0.0.1744-linux/   /usr/local/sonar-scanner

jenkins机器执行
将脚本推送到10.0.0.130
scp -rp /scripts/ root@10.0.0.130:/

10.0.0.130执行
生产秘钥
ssh-keygen
将私钥推送到web主机
ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.7
ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.8

gitlab控制台加10.0.0.130的私钥,一定要加,切记

10.0.0.130
vi /etc/hosts
10.0.0.110 gitlab.cwq.com
10.0.0.120 jenkins.cwq.com
10.0.0.130 sonar.cwq.com

#在jenkins控制台中,创建凭据---->新建凭据----->将10.0.0.130的公钥加进来
类型:SSH Username with private key
范围:全局
ID:
描述:slave-node1-10.0.0.130
Username:root
Private Key:10.0.0.130的公钥

指定运行的节点

在job中配置----->限制项目运行的节点----->填节点名称(node1)

pipeline脚本

pipeline {
	//agent any
	agent { label 'node1' }
	
	stages {	//部署任务总合集
		stage('获取代码'){
			steps {
			    //需要重新生成,选择新建的凭据(加的10.0.0.130的公钥凭据)
				checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '646f0911-1851-4924-aa5d-1e7c2450dfb6', url: 'git@gitlab.oldxu.com:dev/hello-world-war.git']]])
			}
		}
		stage('质量扫描'){
			steps {
				withSonarQubeEnv('sonarqube-130') {
					sh '/usr/local/sonar-scanner/bin/sonar-scanner \
					-Dsonar.projectName=${JOB_NAME} \
					-Dsonar.projectKey=${JOB_NAME} \
					-Dsonar.sources=. \
					-Dsonar.host.url=http://sonar.oldxu.com:9000 \
					-Dsonar.login=c3696d71e21313a7493a00d817f5b3c5894e3558'
				}
			}
		}
		
		stage('检测结果') {
			steps {
				script {
					timeout(5) { //sonar webhook通知pipeline代码检测结果,未通过pipeline将会fail
						def qg = waitForQualityGate() 
							if (qg.status != 'OK') {
								error "Sonarqube代码检查失败,failure: ${qg.status}"
						}
					}
				}
			}
		}

		stage('代码编译'){
			steps {
				withSonarQubeEnv('sonarqube-130') {
					sh 'mvn clean package -Dmaven.test.skip=true'
				}
			}
		}
		stage('是否部署'){
			steps {
				input '是否确认部署'
			}
		}
		stage('代码部署'){
			steps {
				sh 'sh -x /scripts/deploy_java.sh'
			}
		}
	}
	
	post {
		success {
			dingTalk accessToken: '742394e99636ff32f0c8969cebf3887e8e737d6b8600acd0000385923fbeef88', imageUrl: '', jenkinsUrl: 'http://jenkins.oldxu.com:8080', message: 'pipeline构建成功', notifyPeople: ''
			
		}

		failure {
			dingTalk accessToken: '742394e99636ff32f0c8969cebf3887e8e737d6b8600acd0000385923fbeef88', imageUrl: '', jenkinsUrl: 'http://jenkins.oldxu.com:8080', message: 'pipeline构建失败', notifyPeople: ''
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值