当前项目为Pipeline 流水线项目

前端使用Vue 通过nodejs打包

后端spring boot 通过maven打包

在一个Pipeline下进行两个git项目拉取、构建、备份、本地/远程部署

下述pipeline script中包含pipeline多种独特的语法,请各位仔细查看。

This project is parameterized

 

Pipeline Script

 

pipeline {
    agent any
    
    stages {
        stage('前端代码拉取') {
            steps {
                //在一个pipeline下,拉取多个git项目,必须给每一个项目建立文件夹进行存放
                sh "mkdir -p ./vue-project"
                // pipeline语法下切换当前目录,注:不能使用cd命令进行切换,每次执行新的shell命令时会被重置
                dir('./web-project') {
                    git branch: "${params.branch}", credentialsId: '650e9c98-ba94-4a06-b3e5-1b3d4f2be5ae', url: 'git://10.51.xxx.xxx/vue-project.git'
                }
                
            }
        }
        stage('后端代码拉取') {
            steps {
                sh "mkdir -p ./java-project"
                dir('./java-project') {
                    git branch: "${params.branch}", credentialsId: '650e9c98-ba94-4a06-b3e5-1b3d4f2be5ad', url: 'git://10.51.xxx.xxx/java-project.git'
                }
            }
        }
        stage('前端构建') {
            steps {
                dir('./vue-project') {
                    sh "npm install"
                    sh "npm run build"
                }
            }
        }
        stage('后端构建') {
            steps {
                // 将vue项目build后的文件移动到java的resource目录下
                sh "cp -rf vue-project/web java-project/demo/src/main/resources/templates"
                dir('./java-project') {
                    sh "mvn -DskipTests -Dmaven.test.failure.ignore=true clean package"
                }
            }
        }

        stage('程序包备份') {
            steps {
                // 复制一份当前运行的jar为备份文件,补充bak+时间的后缀
                sh "cp -f /home/data/java-project-0.0.1-SNAPSHOT.jar /home/data/java-project-0.0.1-SNAPSHOT.jar_bak\$(date '+%Y%m%d%H%M%S')"
            }
        }
        
        stage('部署') {
            steps {
                script{
                    //如果目标服务器选择的是jenkins所部署的服务器,则只需对本机执行shell
                    // pipeline的if语法必须在script{}中编写
                    if ("${params.target}" == "10.51.xxx.xxx" ) {
                         // 将jenkins workspace里面的git拉取后打包的jar移动到工作目录
                        sh "cp -f java-project/demo/target/java-project-0.0.1-SNAPSHOT.jar /home/data"
                        // run.sh是我自己写的一个启动jar包的脚本,主要内容是nohup java -jar xxx.jar &的内容
                        sh "sh /home/data/run.sh start"
                    }else {
                        // scp将本地的jar复制到远程服务器,这里需要进行ssh免密登录的配置,不然会执行失败
                        sh '''
                            ssh ${target} "cp -f /home/data/java-project-0.0.1-SNAPSHOT.jar /home/data/java-project-0.0.1-SNAPSHOT.jar_bak\$(date '+%Y%m%d%H%M%S')"
                            scp java-project/demo/target/java-project-0.0.1-SNAPSHOT.jar ${target}:/home/data
                            ssh ${target} "sh /home/data/run.sh restart"
                        '''
                    }
                }
            }
        }
    }
}

 

Jenkins系列文章:

一、Jenkins 系列教程-史上最简单Jenkins教程,教你一天学会使用Jenkins利器

二、Centos 安装nodejs

三、Centos 安装Maven

四、Linux下安装java JDK

五、jenkins启动报错 Job for jenkins.service failed because the control process exited with error code.

六、jenkins启动成功,警告Warning: jenkins.service changed on disk.

七、Jenkins以root用户运行

八、Jenkins配置中文语言

九、Jenkins 报mvn:command not found、npm:command not found

十、Jenkins批量删除构建历史

十一、Jenkins 部署前后端分离构建多git项目,打包后远程部署服务器

十二、ssh-copy-id输入密码后Permission denied, please try again.

十三、Jenkins Publish over SSH、SSH免密登录、SCP免密传输、Jenkins远程传输文件、Jenkins远程部署

Logo

前往低代码交流专区

更多推荐