Jenkins在指定终端服务器打客户端包并进行归档(四)

目录

一、单点打包存在的问题

二、一台能联网的终端

2.1 GitLab搭建

2.2 Verdaccio搭建

2.3 Jenkins搭建

三、Jenkins项目配置

3.1 新增一个普通项目(Freestyle project) 

3.2 正式打包前先同步外网gitee代码到内网gitlab

3.3 编写终端打包命令(build -> send file or execute commd)

3.4 回传到jenkins服务器,准备归档

3.5 jenkins服务器进行归档(工作目录所有rpm结尾的都归档) 

四、开始构建


与在jenkins服务器打服务端的包有所不同,服务端的包一般都具有跨平台的特性,客户端的包则需要根据客户终端平台的类型(x86、arm、mips等芯片等)分别打包,博主目前使用electron进行前端客户端的打包。

一、单点打包存在的问题

在没有jenkins服务器统一管理前,客户端的打包需要拷贝最新的代码到终端,然后手动输入打包命令,而公司日常打包有7台国产机,有飞腾、龙芯、鲲鹏、兆芯、UOS等,如果有新的npm依赖,还需要给这些机器接入外网(公司禁用wifi,连外网的机器需要申请)并执行npm install解决依赖问题,维护起来费事费力。

二、一台能联网的终端

npm依赖需要更新,必然要联网,好不容易申请了一台连接外网的服务器,配合Jenkins、Verdaccio、GitLab,我们可以将所有终端管理起来,以上的问题也都迎刃而解了。

初步设计如下(gitlab装在另一台内网服务器上,刚好多一台服务器就用了):

GitLab - 用来解决内网代码同步问题;

Verdaccio - 用来解决新增npm依赖问题;

Jenkins - 用来解决统一调度打包问题;

 2.1 GitLab搭建

2.2 Verdaccio搭建

Verdaccio简单安装

2.3 Jenkins搭建

Linux下Jenkins简单安装(一)

三、Jenkins项目配置

3.1 新增一个普通项目(Freestyle project) 

3.2 正式打包前先同步外网gitee代码到内网gitlab

 前置工作:需要登录到jenkins服务器,先将指定项目从gitee拉下来,然后给gitee项目增加gitlab地址,参考: 为Github项目新增Gitlab|Gitee地址

 3.3 编写终端打包命令(build -> send file or execute commd)

 注意Advanced中需要勾选 Verbose output in console不然终端日志不打印!

Execute Commd填入真正的脚本

通过ssh执行远程主机命令,使用的是本地服务器的环境变量;使用ssh登录远程主机使用的是远程服务器的环境变量。即,使用SSH Publishers执行exec使用的是ssh执行远程主机命令,使用的是jenkins部署服务器的环境变量。所以在真正执行脚本前,需要export path将Path重新赋值

#!/bin/bash

SERVER_CONFIGURATION=test
PC_NAME=longxin3000
PACKAGE_VERSION="2.3.719"
PROJECT_LOCATION=
NEED_REPLACE_SJSICONS=1
PC_ARCH=
PC_PACKAGE_TYPE=
NEED_REPLACE_EASEMOB_NODE=

if [ "$PC_NAME" = "uos" ];then
    PC_ARCH="arm64"
    PC_PACKAGE_TYPE="deb"
    NEED_REPLACE_EASEMOB_NODE=0
    PROJECT_LOCATION="/home/test/projects/xxx"
    export PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/sbin:/usr/sbin:/home/test/projects/node/bin:/home/test/projects/node/bin
elif [ "$PC_NAME" = "kunpeng" ];then
    PC_ARCH="arm64"
    PC_PACKAGE_TYPE="rpm"
    NEED_REPLACE_EASEMOB_NODE=1
        PROJECT_LOCATION="/home/neokylin/projects/xxx"
    export PATH=/usr/lib64/qt-3.3/bin:/home/neokylin/perl5/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/neokylin/Workspace/node-v14.17.3-linux-arm64/bin:/home/neokylin/Workspace/node-v14.17.3-linux-arm64/bin:/usr/libexec/docker:/home/neokylin/.local/bin:/home/neokylin/bin
elif [ "$PC_NAME" = "longxin3000" ];then
    PC_ARCH="mips64el"
    PC_PACKAGE_TYPE="rpm"
    NEED_REPLACE_EASEMOB_NODE=1
        PROJECT_LOCATION="/home/user/projects/xxx"
    export PATH=/usr/lib64/ccache:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user/node:/home/user/.local/bin:/home/user/bin
elif [ "$PC_NAME" = "changcheng" ];then
    PC_ARCH="arm64"
    PC_PACKAGE_TYPE="deb"
    NEED_REPLACE_EASEMOB_NODE=1
        PROJECT_LOCATION="/home/kylin/projects/xxx"
    export PATH=/home/kylin/projects/node/bin:/home/kylin/projects/node/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
elif [ "$PC_NAME" = "longxin4000" ];then
    PC_ARCH="mips64el"
    PC_PACKAGE_TYPE="deb"
    NEED_REPLACE_EASEMOB_NODE=0
        PROJECT_LOCATION="/home/kylin/projects/xxx"
    export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/kylin/projects/node/bin:/home/kylin/projects/node/bin
elif [ "$PC_NAME" = "longxin5000" ];then
    PC_ARCH="la64"
    PC_PACKAGE_TYPE="deb"
    NEED_REPLACE_EASEMOB_NODE=0
        PROJECT_LOCATION="/home/kylin/projects/xxx"
    export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
else
    echo "DETECTE THE PC_NAME_SYS_ENV HAS NOT YET BEEN SET UP! PLEASE SET FIRST! PC NAMES LIKE:"
    echo "uos kunpeng longxin3000 changcheng longxin4000 longxin5000"
    echo "$PC_NAME"
    exit 1
fi 

#CHECK WORK DIR
if [ ! -d"$PROJECT_LOCATION" ];then
    echo "ERROR?THE PROJECT DIR NOT EXIST! NORMAL FORMAT IS?"
    echo "~/projects/xxx"
    echo "$PROJECT_LOCATION"
    exit 1
fi

cd "$PROJECT_LOCATION"

#CHECK PACKED SERVER_CONF
if [ ! "$SERVER_CONFIGURATION" ];then
    echo "错误:服务器环境参数不存在,应作为本脚本的第一个参数输入"
    echo "$SERVER_CONFIGURATION"
    exit 1
fi

echo "CHECK SYS CONF...."
echo "COMPUTER NAME? ""$PC_NAME"
echo "SERVER CONFIGURATION? ""$SERVER_CONFIGURATION"
echo "PACKAGE VERSION? ""$PACKAGE_VERSION"
echo "PROJECT LOCATION? ""$PROJECT_LOCATION"
echo "NEED REPLACE SJSICONS? ""$NEED_REPLACE_SJSICONS"
echo "PC ARCH ""$PC_ARCH"
echo "PC PACKAGE TYPE? ""$PC_PACKAGE_TYPE"
echo "NEED REPLACE EASEMOB NODE? ""$NEED_REPLACE_EASEMOB_NODE"


#PULL LATEST CODE
git checkout your_branch
git pull

#REPLACE ICONS
if [ "$NEED_REPLACE_SJSICONS" = "1" ];then
    echo "READY TO CHANGE SJSICONS.."
    cd "./sjs-icons"
    bash ./replace.sh --update
    cd "$PROJECT_LOCATION"
    echo "CHANGE SJSICONS DONE."
fi

#REPLACE SDK
if [ "$NEED_REPLACE_EASEMOB_NODE" = "1" ];then
    echo "READY TO REPLACE EASEMOB MEDIA SDK.."
    if [ ! -d "./bak/""$PC_NAME" ];then
        echo "ERROR! CANNT FIND REPLACEBLE MEDIA SDK!"
        echo "./bak/""$PC_NAME"
        exit 1
    fi
    cd "./bak/""$PC_NAME"
    bash ./replace.sh --update
    cd "$PROJECT_LOCATION"
    echo "COMPLETE EASEMOB MEDIA SDK REPLACEMENT!"
fi

#REPLACE PACKAGE SERVER CONF
echo "READY TO SET SERVER_CONFIGURATION.."
sed -i "/module.exports = projectConfig./cmodule.exports = projectConfig.""$SERVER_CONFIGURATION"";" ./src/sdkConfig/serverConfig.js
echo "SET SERVER_CONFIGURATION DONE."

#SET PACKAGE VERSION
echo "READY TO SET PACKAGE VERSION.."
sed -i "/\"version\":/c\"version\":"\""$PACKAGE_VERSION""\"," ./package.json
echo "SET PACKAGE VERSION DONE."

echo "READY TO COMPLIE THE CODE.."
npm run build
chmod -R 777 dist/addon
echo "COMPLIE DONE."

echo "READY TO PACK THE CODE.."
npm run "pack:""$PC_ARCH"
echo "PACK CODE DONE"

echo "READY TO PACK UP.."
npm run "pack-""$PC_PACKAGE_TYPE"":""$PC_ARCH"
echo "PACK UP DONE."

cd "$PROJECT_LOCATION"/build
mv *."$PC_PACKAGE_TYPE" iccs_"$PACKAGE_VERSION"_"$PC_ARCH"_`date +"%Y-%m-%d_%H:%M:%S"`."$PC_PACKAGE_TYPE"

3.4 回传到jenkins服务器,准备归档

前置工作,需要在各个终端与服务器之间设置免密登录,参考:SSH免密登陆、设置跳板

3.5 jenkins服务器进行归档(工作目录所有rpm结尾的都归档) 

四、开始构建

首页直接点击三角按钮或者进去项目后点击左侧Build Now

成功归档 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值