Jenkins pipeline 通过 shell 来动态生成变量


 

//获取标准输出
//第一种
result = sh returnStdout: true ,script: "<shell command>"
result = result.trim()
//第二种
result = sh(script: "<shell command>", returnStdout: true).trim()
//第三种
sh "<shell command> > commandResult"
result = readFile('commandResult').trim()
//获取执行状态
//第一种
result = sh returnStatus: true ,script: "<shell command>"
result = result.trim()
//第二种
result = sh(script: "<shell command>", returnStatus: true).trim()
//第三种
sh '<shell command>; echo $? > status'
def r = readFile('status').trim()
//无需返回值,仅执行shell命令
//最简单的方式
sh '<shell command>'

dcomposeJDK11Deploy.groovy

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'
		}        
		
		environment {
			MAVEN_HOME = "${sh(script:'	[ -d /data/java/apache-maven-3.6.3 ] && { MAVEN_HOME=/data/java/apache-maven-3.6.3; echo -n $MAVEN_HOME; } || { MAVEN_HOME=/usr/local/apache-maven-3.5.4; echo -n $MAVEN_HOME;}', returnStdout: true)}"
            JAVA_HOME  = "${sh(script:' [ -d /data/java/jdk-11.0.4 ] && { JAVA_HOME=/data/java/jdk-11.0.4;      echo -n $JAVA_HOME; } || { JAVA_HOME=/usr/local/jdk-11.0.4;      echo -n $JAVA_HOME; }', returnStdout: true)}"
            CLASSPATH  = "${sh(script:' [ -d /data/java/jdk-11.0.4 ] && { CLASSPATH=/data/java/jdk-11.0.4/lib/; echo -n $CLASSPATH; } || { CLASSPATH=/usr/local/jdk-11.0.4/lib/; echo -n $CLASSPATH; }', returnStdout: true)}"
		}
		
		stages {
			stage('拉取代码') {
				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('构建代码') {
				steps {
						sh """
							cd ${env.WORKSPACE}
							
							PATH="${env.MAVEN_HOME}/bin:${env.JAVA_HOME}/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/docker-compose/${config.nameSpace}/${config.projectName}/docker-compose.yml'
					ssh ${config.remoteServer} -p ${config.remotePort} 'cd /data/docker-compose/${config.nameSpace}/${config.projectName} ; sudo /usr/local/sbin/docker-compose up -d'
					"""
				}							
			}
			
		}
	}
}

通过定义 environment 块中的变量,需要写 returnStdout: true 且变量是需要返回的,可以使用 echo -n 来返回,后续就可以使用 env.xxx 来调用

posted @ 2024-07-11 15:05  技术颜良  阅读(1)  评论(0编辑  收藏  举报