系统里面已经按照了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