一个Pipeline示例

声明式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写法可以达到相同的效果。

你可能感兴趣的:(一个Pipeline示例)