Jenins Pipeline 使用 Global Pipeline Libraries

背景

大量的 jenkins job 如果单独使用 pipeline 不好管理和维护,修改一处地方可能需要更改很多的 job,所以使用 Global Pipeline Libraries 来对 jenkins pipeline 进行管理

配置 Global Pipeline Libraries

把固定的模板 groovy 脚本放上 gitlab

我这里是 https://gitlab.huidiancloud.com/devops/jenkins-library.git
groovy 脚本放在 vars 文件夹下,这是固定的规范

例子说明

这是 k8sJDK11Deploy.groovy 的文件,主要用于在K8S中部署 JDK11 后端服务

def call(Map config) {
	pipeline {
		agent any
		parameters {
			gitParameter branchFilter: 'origin/(.*)', defaultValue: 'master', name: 'deployBranch', type: 'PT_BRANCH_TAG', listSize: '25', sortMode: 'DESCENDING_SMART', useRepository: '.*.git'
		}        
		stages {
			stage('拉取代码') {
                                // 这里 branches 必须写 ${params.deployBranch}
                                // 用户指定的参数前面需要指定 config,以上面的 Map config 相对应
				steps {  
					echo "开始更新,本次版本号:${env.BUILD_NUMBER}"
					checkout([$class: 'GitSCM', 
							  branches: [[name: "${params.deployBranch}"]], 
							  doGenerateSubmoduleConfigurations: false, 
							  extensions: [], 
							  gitTool: 'Default', 
							  submoduleCfg: [], 
							  userRemoteConfigs: [[url: "${config.gitUrl}", credentialsId: 'GITLAB' ]]
							])
				}
			}
			
			stage('构建代码') {
                                // Jenkins的环境变量前面需要加 env
				steps {
						sh """
							cd ${env.WORKSPACE}
							JAVA_HOME=/data/java/jdk-11.0.4
							CLASSPATH=/data/java/jdk-11.0.4/lib/
							PATH=/data/java/apache-maven-3.6.3/bin:/data/java/jdk-11.0.4/bin:$PATH
							export PATH JAVA_HOME CLASSPATH
							mvn clean
							mvn package -Dmaven.test.skip=true -U
						   """                               
				 }
			}
			
			stage('创建镜像') {
				steps {
					sh """
						 cd ${env.WORKSPACE}/target
						 cp ${env.WORKSPACE}/src/main/docker/${config.dockerFile} Dockerfile
						 [ -d ${env.WORKSPACE}/upload_dir ] && cp -af ${env.WORKSPACE}/upload_dir ./
						 sudo docker build -t  ${config.registryUrl}/${config.group}/${config.projectName}:${env.BUILD_NUMBER} .
					"""
				}						
			}
								   
			stage('推送镜像'){
				steps {
					sh """
						sudo docker push ${config.registryUrl}/${config.group}/${config.projectName}:${env.BUILD_NUMBER}
						sudo docker rmi  ${config.registryUrl}/${config.group}/${config.projectName}:${env.BUILD_NUMBER}
					"""    
				}
			}
									
			stage('部署环境') {
				steps{
				  sh """
					ssh ${config.remoteServer} -p ${config.remotePort} 'sudo sed -i "s#image: ${config.registryUrl}.*#image: ${config.registryUrl}/${config.group}/${config.projectName}:${env.BUILD_NUMBER}#g" /data/yaml/${config.nameSpace}/${config.projectName}/deployment.yaml'
					ssh ${config.remoteServer} -p ${config.remotePort} 'sudo kubectl apply -f /data/yaml/${config.nameSpace}/${config.projectName}/deployment.yaml'
					"""
				}							
			}
			
		}
	}
}

@Library('jenkins-library')_ //开头必须写成这样

// 定义一个 map, 把每个项目不同的变量传入
def map = [
    // 项目名,默认与 job 名字相同
    projectName : "${JOB_BASE_NAME}",
    
    // 项目 gitlab 代码位置
    gitUrl : 'http://gitlab.huidiancloud.com/reform-spot/backend/activiti-server.git',
    
    // 镜像仓库项目
    group : 'test-gd_sx-genco-spot',
    
    // 命名空间,以命名空间区分项目
    nameSpace : 'spot-standard',
    
    // 使用的 Dockerfile 配置
    dockerFile : 'Dockerfile',
    
    // 远程部署目标机器
    remoteServer : 'k8s-jenkins@172.18.113.129',
    
    // 远程部署目标机器SSH端口
    remotePort : '43999',
    
    // 镜像仓库 url 
    registryUrl : 'harbor.junengcloud.com'
]

//使用 k8sJDK11Deploy 调用 gitlab 上面的 k8sJDK11Deploy.groovy,并把 map 传入
k8sJDK11Deploy map

成功运行

posted @ 2021-09-01 16:33  klvchen  阅读(950)  评论(0编辑  收藏  举报