centos7中同时使用多版本nodejs的配置

系统里面已经按照了node14版本,新的项目需要node10,担心不同的nodejs存在兼容性问题,故在系统中安装不同的nodejs版本

1.采用二进制安装的方法

nodejs二进制下载地址:https://nodejs.org/dist/

cd /usr/local

wget https://nodejs.org/dist/v10.22.1/node-v10.22.1-linux-x64.tar.gz

tar xf node-v10.22.1-linux-x64.tar.gz

mv node-v10.22.1-linux-x64 node-v10.22.1

# 生成nodejs10版本的特定命令

ln -s /usr/local/node-v10.22.1/bin/node /usr/bin/node10

ln -s /usr/local/node-v10.22.1/bin/npm /usr/bin/npm10

[root@jenkins_server:/usr/local/node-v10.22.1/bin]# npm10 --version

6.14.6

[root@jenkins_server:/usr/local/node-v10.22.1/bin]# node10 --version

v10.22.1

# 安装cnpm

npm10 install -g cnpm --registry=https://registry.npm.taobao.org

2.在jenkins的web部分配置的shell

#!/bin/bash

# 此脚本功能为根据构建时选择的参数,同步 /data/www/vhosts/h5.chinasoft.io 下的文件同步到远程中转机器

# 2020.1027 初始化脚本

#非apache用户运行脚本,则退出

if [ `whoami` != "apache" ];then

echo "only apache can run me"

exit 1

fi

echo "xxx"

## 1.定义变量

dir_name=bak.$(date +%Y-%m-%d-%H-%M-%S)

project_dir=/data/www/vhosts/h5.chinasoft.io

## 2.备份代码函数

function func_project_backup(){

cp -a $project_dir/ /data/data_backup/h5.chinasoft.io_$dir_name

}

func_project_backup

## 3.判断代码发布目录变量是否为空

if [ ! $project_dir ];then

echo "$project_dir IS NULL ,shell exit!!!!"

exit 1

fi

## 2.判断同步状态

function func_rsync_status(){

if [[ $? == 0 || $? == 23 ]];then

rsync_edit=1

else

rsync_edit=0

echo "`date` 同步到本地目标失败! "

exit 1

fi

}

## 4.同步到本地待发路径

function func_rsync_project_local(){

echo "=========================== start building h5.chinasoft.io ================================="

cd $WORKSPACE/

echo $GIT_BRANCH

/usr/bin/node10 -v

/usr/bin/npm10 -v

cnpm install

/usr/bin/npm10 run build

echo "#########从临时目录同步本机到待发目录 $project_dir #########"

/usr/local/bin/rsync -zvau -progress $WORKSPACE/dist/ $project_dir/httpdocs/

func_rsync_status

}

func_rsync_project_local

## 5.推送代码到远程中转机并发布(发布到线上)

echo "------------------------------------ rsync start prod -----------------------------------------"

chown -R apache.users $project_dir/

sleep 1

/bin/bash /usr/local/worksh/jeninks_task/chinasoft_io_h5.chinasoft.io.sh

echo "------------------------------------ rsync done prod -----------------------------------------"

## 7.通过插件执行远程中转机上的同步脚本

3.jenkins中推送任务

[root@jenkins_server:~]# cat /usr/local/worksh/jeninks_task/chinasoft_io_h5.chinasoft.io.sh

#!/bin/bash

#############################################

## 设置变量和GET请求过来的变量

## GET请求传过来的文件所在目录,目录路径写全路径了

#dir=$1

passfile="/data/www/.rsync/pass.chinasoft_io_h5.chinasoft.io"

# 非apache用户运行脚本,则退出

if [ `whoami` != "apache" ];then

echo " only apache can run me"

exit 1

fi

# 判断同步状态

function func_rsync_status(){

if [[ $? == 0 || $? == 23 ]];then

rsync_edit=1

else

rsync_edit=0

echo "`date` 同步到目标失败! "

exit 1

fi

}

# 判断目录是否为空函数

function func_is_empty_dir(){

return `ls -A $1|wc -w`

}

# 代码发目录

project_dir="/data/www/vhosts/h5.chinasoft.io/"

# 判断待发目录是否为空,为空则退出

if func_is_empty_dir $project_dir

then

echo " $project_dir is empty , exit!!!!"

exit 1

else

echo " $project_dir 可以发布"

fi

## 设置变量,目标服务器

server_ip_list="1.1.1.1"

# src directory

src_directory="h5.chinasoft.io"

# dst directory

dst_directory="h5.chinasoft.io"

exclude_list="--exclude=.svn --exclude=.git --exclude=.gitignore --exclude=*.log --exclude=.gitattributes --exclude=.env --exclude=vendor"

function h5.chinasoft.io_rsync()

{

# rsync ip_list

for ip in ${server_ip_list}

do

echo "####################rsync ${ip} start################################"

rsync -zavP --bwlimit=1000 ${exclude_list} --password-file=${passfile} /data/www/vhosts/${src_directory}/ apache@${ip}::apache_h5.chinasoft.io

func_rsync_status

echo "################### rsync ${ip} end #######################"

done

}

h5.chinasoft.io_rsync

yum不同版本的安装参考:https://github.com/nodesource/distributions

定义npm使用的node版本

# more /usr/local/node-v12.19.0/bin/npm

#!/usr/bin/env node12