DevOps实现CI/CD实战(五)- Jenkins配置Pipeline流水线

九、 Jenkins流水线pipeline

完整的笔记,里面有完整的DevOps笔记和K8S集群搭建的笔记

  • https://github.com/ITenderL/ITenderL.github.io/tree/main/docs/DevOps

Jenkins流水线任务介绍

之前采用Jenkins的自由风格构建的项目,每个步骤流程都要通过不同的方式设置,并且构建过程中整体流程是不可见的,无法确认每个流程花费的间,并且问题不方便定位问题。Jenkins的Pipeline可以让项目的发布整体流程可视化,明确执行的阶段,可以快速的定位问题。并且整个项目的生命周期可以通过一个Jenkinsfile文件管理,而且Jenkinsfile文件是可以放在项目中维护。所以Pipeline相对自由风格或者其他的项目风格更容易操作。

Jenkins流水线任务

构建Jenkins流水线任务
1. 添加pipeline流水线任务
2. 配置代码仓库
3. 项目中添加Jenkinsfile文件

在这里插入图片描述

// 所有的脚本命令都放在pipeline中
pipeline{
	// 指定任务在哪个集群节点执行
	agent any
	// 声明全局变量,方便后面使用
	environment{
		key='value'
	}
	
	stages{
		stage('拉取git仓库代码') {
			steps {
				echo '拉取git仓库代码 -SUCCESS'
			}
		}
		stage('通过maven构建项目') {
			steps {
				echo '通过maven构建项目 -SUCCESS'
			}
		}
		stage('通过SonarQube做代码质量检测') {
			steps {
				echo '通过SonarQube做代码质量检测 -SUCCESS'
			}
		}
		stage('通过docker制作自定义镜像') {
			steps {
				echo '通过docker制作自定义镜像 -SUCCESS'
			}
		}
		stage('将自定义镜像推送到Harbor中') {
			steps {
				echo '将自定义镜像推送到Harbor中 -SUCCESS'
			}
		}
		stage('通过Publish Over SSH通知目标服务器') {
			steps {
				echo 'SSH通知目标服务器 -SUCCESS'
			}
		}
	}
}
4. 修改jenkins配置

在这里插入图片描述

5. 添加Jenkins配置,完善Jenkins脚本。添加参数化构建的配置

在这里插入图片描述
生成每一步的流水线语法,添加到Jenkinsfile对应的流程步骤中。在流水线语法中可以根据自己的需要生成对应的命令。在这里插入图片描述

  • 配置拉取代码的配置在这里插入图片描述
stage('拉取git仓库代码') {
			steps {
				checkout scmGit(branches: [[name: '$tag']], extensions: [], userRemoteConfigs: [[url: 'http://192.168.201.112:8929/mytest/mytest.git']])
			}
		}

再次构建,进入jenkins容器发现已经有拉取下来的代码了,pipeline

[root@clear bin]# docker exec -it jenkins bash
jenkins@e96108b4b77b:/$ cd ~/workspace/
jenkins@e96108b4b77b:~/workspace$ ls
mytest  pipeline  test
jenkins@e96108b4b77b:~/workspace$

  • 配置通过maven构建步骤 shell
/var/jenkins_home/maven/bin/mvn clean package -DskipTests

stage('通过maven构建项目') {
    steps {
        	sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'
        }
    }
  • 配置代码检测,重新构建,去sonarqube服务确认是否有代码检测记录 shell
	/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.host.url=http://192.168.201.111:9000/ -Dsonar.sources=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=./target/ -Dsonar.login=65a1741c6f4191105f68096278fe77adaa1d15a1
	
		stage('通过SonarQube做代码质量检测') {
			steps {
				sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.host.url=http://192.168.201.111:9000/ -Dsonar.sources=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=./target/ -Dsonar.login=65a1741c6f4191105f68096278fe77adaa1d15a1'
			}
		}
  • 通过docker制作自定义镜像,重新构建,去服务器检查是否有pipeline的镜像 shell
mv ./target/*.jar ./docker/
docker build -t ${JOB_NAME}:$tag ./docker/

stage('通过docker制作自定义镜像') {
			steps {
				sh '''mv ./target/*.jar ./docker/
docker build -t ${JOB_NAME}:$tag ./docker/'''
			}
		}

  • 推送自定义镜像到Harbor中 shell
# 在Jenkinsfile的文件中添加harbor相关配置
// 声明全局变量,方便后面使用
	environment{
		harborUser='sswang'
		harborPasswd='A123456a'
		harborAddr='kubernetes-register.sswang.com'
		harborRepo='sswang'
	}

# 配置镜像推送
docker login -u ${harborUser} -p ${harborPasswd} ${harborAddr}
docker tag ${JOB_NAME}:${tag} ${harborAddr}/${harborRepo}/${JOB_NAME}:${tag}
docker push ${harborAddr}/${harborRepo}/${JOB_NAME}:${tag}

stage('将自定义镜像推送到Harbor中') {
			steps {
				sh '''docker login -u ${harborUser} -p ${harborPasswd} ${harborAddr}
				docker tag ${JOB_NAME}:${tag} ${harborAddr}/${harborRepo}/${JOB_NAME}:${tag}
				docker push ${harborAddr}/${harborRepo}/${JOB_NAME}:${tag}'''
			}
		}

  • 通过Publish Over SSH通知目标服务器 ssh publish,添加端口号配置,在任务配置中
    在这里插入图片描述
deploy.sh $harborAddr $harborRepo $JOB_NAME  $tag $container_port $host_port

# deploy.sh要用英文双引号
stage('通过Publish Over SSH通知目标服务器') {
			steps {
				sshPublisher(publishers: [sshPublisherDesc(configName: 'test', transfers: [sshTransfer(cleanRemote: false, 	 excludes: '', execCommand: "deploy.sh $harborAddr $harborRepo $JOB_NAME  $tag $container_port $host_port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
			}
		}

完整的Jenkinsfile

// 所有的脚本命令都放在pipeline中
pipeline{
	// 指定任务在哪个集群节点执行
	agent any
	// 声明全局变量,方便后面使用
	environment{
		harborUser='sswang'
		harborPasswd='A123456a'
		harborAddr='kubernetes-register.sswang.com'
		harborRepo='sswang'
	}
	
	stages{
		stage('拉取git仓库代码') {
			steps {
				checkout scmGit(branches: [[name: '$tag']], extensions: [], userRemoteConfigs: [[url: 'http://192.168.201.112:8929/mytest/mytest.git']])
			}
		}
		stage('通过maven构建项目') {
			steps {
				sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'
			}
		}
		stage('通过SonarQube做代码质量检测') {
			steps {
			sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.host.url=http://192.168.201.111:9000/ -Dsonar.sources=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=./target/ -Dsonar.login=65a1741c6f4191105f68096278fe77adaa1d15a1'
			}
		}
		stage('通过docker制作自定义镜像') {
			steps {
				sh '''mv ./target/*.jar ./docker/
				docker build -t ${JOB_NAME}:$tag ./docker/'''
			}
		}
		stage('将自定义镜像推送到Harbor中') {
			steps {
				sh '''docker login -u ${harborUser} -p ${harborPasswd} ${harborAddr}
				docker tag ${JOB_NAME}:${tag} ${harborAddr}/${harborRepo}/${JOB_NAME}:${tag}
				docker push ${harborAddr}/${harborRepo}/${JOB_NAME}:${tag}'''
			}
		}
		stage('通过Publish Over SSH通知目标服务器') {
			steps {
				sshPublisher(publishers: [sshPublisherDesc(configName: 'test', transfers: [sshTransfer(cleanRemote: false, 	 excludes: '', execCommand: "deploy.sh $harborAddr $harborRepo $JOB_NAME  $tag $container_port $host_port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
			}
		}
	}
}
  • 到服务器docker ps查看运行容器,容器启动成功
    在这里插入图片描述
    然后访问192.168.201.111:8082
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值