目录
3.1 新增一个普通项目(Freestyle project)
3.2 正式打包前先同步外网gitee代码到内网gitlab
3.3 编写终端打包命令(build -> send file or execute commd)
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 - 用来解决统一调度打包问题;
略
前置工作:需要登录到jenkins服务器,先将指定项目从gitee拉下来,然后给gitee项目增加gitlab地址,参考: 为Github项目新增Gitlab|Gitee地址
注意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"
前置工作,需要在各个终端与服务器之间设置免密登录,参考:SSH免密登陆、设置跳板
首页直接点击三角按钮或者进去项目后点击左侧Build Now
成功归档