声明式pipeline
#!groovy
// 此pipeline是声明式写法
// 注意: 不能在 sh '执行命令' 中定义变量,否则执行此pipeline时会报错“No such property”
// 要想在 sh '执行命令' 中使用变量,需要先在environment{}中提前把变量定义好,才可以在sh代码中使用变量。
// 而script式的pipeline,要想在sh代码中使用变量,则需要这样定义: env.tomcat_home = "/usr/local/tomcat2"
// 在sh代码中这样引用变量${tomcat_home}即可
pipeline {
agent {node {label 'master'}}
environment {
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
}
stages {
stage("pull code") {
steps {
sh "git config --global http.sslVerify false"
dir("${env.WORKSPACE}") {
git branch: 'master',
credentialsId: '036938fb-888b-47d3-92cf-f9acc7f4fdaf',
url: 'http://gitlab.cgy.com:8880/dev-java/mybank-demo-maven.git'
}
}
}
stage("compile code") {
steps {
sh 'mvn -U -B clean install'
}
}
stage("deploy project") {
environment {
WORKSPACE = "${env.WORKSPACE}"
WAR_PATH = "${env.WORKSPACE}/target/ROOT.war"
tomcat_home="/usr/local/tomcat2"
app_home="${tomcat_home}/webapps/ROOT/"
}
steps {
sh """
set -e -u -x
echo "JOB_PATH: ${WORKSPACE}"
echo "[INFO] 关闭tomcat"
sudo ${tomcat_home}/bin/shutdown.sh
echo "[INFO] 清空app_home: $app_home"
sudo rm -rf ${app_home}*
echo "[INFO] 拷贝编译完成的war包"
sudo cp -f "${WAR_PATH}" ${app_home}
cd ${app_home}
sudo jar xf ROOT.war
echo "[INFO] 启动tomcat"
sudo ${tomcat_home}/bin/startup.sh
"""
}
}
}
}
// 此pipeline是声明式写法
// 注意: 不能在sh '执行命令'
中定义变量,否则执行此pipeline时会报错“No such property”
// 要想在 sh '执行命令' 中使用变量,需要先在environment{}
中提前把变量定义好,才可以在sh代码中使用变量。
脚本式pipeline
#!groovy
node {
stage("pull code") {
sh 'git config --global http.sslVerify false'
dir("${env.WORKSPACE}") {
git branch: 'master',
credentialsId: '036938fb-888b-47d3-92cf-f9acc7f4fdaf',
url: 'http://gitlab.cgy.com:8880/dev-java/mybank-demo-maven.git'
}
}
stage("compile code") {
sh """
mvn -U -B clean install
"""
}
stage("deploy project") {
env.WORKSPACE = "${env.WORKSPACE}"
env.WAR_PATH = "${env.WORKSPACE}/target/ROOT.war"
env.tomcat_home = "/usr/local/tomcat2"
env.app_home = "${tomcat_home}/webapps/ROOT/"
sh """
set -e -u -x
echo "JOB_PATH: ${WORKSPACE}"
echo "[INFO] 关闭tomcat"
sudo ${tomcat_home}/bin/shutdown.sh
echo "[INFO] 清空app_home: $app_home"
sudo rm -rf ${app_home}*
echo "[INFO] 拷贝编译完成的war包"
sudo cp -f ${WAR_PATH} ${app_home}
cd ${app_home}
sudo jar xf ROOT.war
echo "[INFO] 启动tomcat"
sudo ${tomcat_home}/bin/startup.sh
"""
}
}
// 而script式的pipeline,要想在sh代码中使用变量,则需要这样定义:例如
env.tomcat_home = "/usr/local/tomcat2"
// 在sh代码中这样引用变量${tomcat_home}
即可.
以上两种pipeline写法可以达到相同的效果。
网友评论