如何实现java调用shell脚本并部署vue项目

最近给网站加了一个通过shell脚本部署的功能,通过前台调用后台java接口,java再调用shell脚本实现部署。


目前后台管理系统跟门户系统都实现了部署功能,这个过程涉及到两个功能点,一是java调用shell脚本文件,二是vue项目或者Nuxt项目本身的编译脚本。

在java代码实现的过程中遇到了一些问题,主要的问题就是java无法调用到shell文件,调用到shell文件没执行。


后面总结了一下主要还是文件路径跟权限两个问题,文件路径要正确,再给加上可执行权限,一下为Java参考代码:

String shpath = /www/wwwroot/test.sh; //.sh文件的绝对路径
Process process = null;
List<String> processList = new ArrayList<String>();
try {
    // 修改权限,否则无效
    String chmod = "chmod 777 " + shpath;
    Process proc = Runtime.getRuntime().exec(chmod);
    process = Runtime.getRuntime().exec(shpath);
    process.waitFor();
    BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
    String line = "";
    while ((line = input.readLine()) != null) {
        processList.add(line);
    }
    input.close();
} catch (IOException | InterruptedException e) {
    e.printStackTrace();
}

for (String line : processList) {
    System.out.println(line);
}


对于vue项目来说通过shell编译相对简单,主要执行npm run build这个命令,以下为vue项目编译build.sh参考代码:

#!/bin/bash
#输出当前系统的所有PATH值
echo $PATH
pwd
cd /www/wwwroot/test
pwd
node -v
npm -v
git clone https://gitee.com/wilkwo/vueAdmin.git
cd vueAdmin
echo "---------pull code start--------"
git pull
echo "---------pull code end--------"
sudo npm i --ignore-scripts
sudo npm run build
sudo rm dist.tar
sudo tar -cvf dist.tar dist
sudo cp -rf dist.tar ../
cd ../
pwd
sudo tar -xvf dist.tar
sudo rm -rf index.html
sudo rm -rf static
sudo mv -f dist/* ./
sudo rm -rf dist
sudo rm -rf dist.tar


nuxt项目的shell编译命令相对vue项目来说会稍微复杂一点,主要是对.nuxt目录做一些操作,以下为nuxt项目编译build.nuxt.sh参考代码:

#!/bin/bash
#输出当前系统的所有PATH值
pwd
node -v
cd /www/wwwroot/test2
git clone https://gitee.com/wilkwo/nuxt-web.git
cd nuxt-web
echo "---------start pull code--------"
git pull
echo "---------end pull code--------"

npm i
npm run build
sudo rm dist.tar
sudo tar -cvf dist.tar .nuxt static  package.json nuxt.config.js
sudo cp -rf dist.tar /www/wwwroot/www.dsiab.com/
cd /www/wwwroot/www.dsiab.com
echo "---------显示当前目录---------"
pwd
echo "---------显示当前目录---------"

#sudo rm -rf static
sudo rm -rf plugins
sudo rm -rf store
sudo rm -rf assets
sudo rm -rf layouts
sudo rm -rf components
sudo rm -rf pages
sudo rm -rf middleware

tar -xvf dist.tar

#sudo mv -f dist/* ./
sudo rm -rf dist.tar

## 其中www.dsiab.com为之前已经通过PM2启动的nuxt项目名称 sudo pm2 restart www.dsiab.com


最后记得通过pm2重启nuxt应用


本文章由javascript技术分享原创和收集

发表评论 (审核通过后显示评论):