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 来调用