• 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重新赋值

    1. #!/bin/bash
    2. SERVER_CONFIGURATION=test
    3. PC_NAME=longxin3000
    4. PACKAGE_VERSION="2.3.719"
    5. PROJECT_LOCATION=
    6. NEED_REPLACE_SJSICONS=1
    7. PC_ARCH=
    8. PC_PACKAGE_TYPE=
    9. NEED_REPLACE_EASEMOB_NODE=
    10. if [ "$PC_NAME" = "uos" ];then
    11. PC_ARCH="arm64"
    12. PC_PACKAGE_TYPE="deb"
    13. NEED_REPLACE_EASEMOB_NODE=0
    14. PROJECT_LOCATION="/home/test/projects/xxx"
    15. 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
    16. elif [ "$PC_NAME" = "kunpeng" ];then
    17. PC_ARCH="arm64"
    18. PC_PACKAGE_TYPE="rpm"
    19. NEED_REPLACE_EASEMOB_NODE=1
    20. PROJECT_LOCATION="/home/neokylin/projects/xxx"
    21. 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
    22. elif [ "$PC_NAME" = "longxin3000" ];then
    23. PC_ARCH="mips64el"
    24. PC_PACKAGE_TYPE="rpm"
    25. NEED_REPLACE_EASEMOB_NODE=1
    26. PROJECT_LOCATION="/home/user/projects/xxx"
    27. 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
    28. elif [ "$PC_NAME" = "changcheng" ];then
    29. PC_ARCH="arm64"
    30. PC_PACKAGE_TYPE="deb"
    31. NEED_REPLACE_EASEMOB_NODE=1
    32. PROJECT_LOCATION="/home/kylin/projects/xxx"
    33. 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
    34. elif [ "$PC_NAME" = "longxin4000" ];then
    35. PC_ARCH="mips64el"
    36. PC_PACKAGE_TYPE="deb"
    37. NEED_REPLACE_EASEMOB_NODE=0
    38. PROJECT_LOCATION="/home/kylin/projects/xxx"
    39. 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
    40. elif [ "$PC_NAME" = "longxin5000" ];then
    41. PC_ARCH="la64"
    42. PC_PACKAGE_TYPE="deb"
    43. NEED_REPLACE_EASEMOB_NODE=0
    44. PROJECT_LOCATION="/home/kylin/projects/xxx"
    45. export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
    46. else
    47. echo "DETECTE THE PC_NAME_SYS_ENV HAS NOT YET BEEN SET UP! PLEASE SET FIRST! PC NAMES LIKE:"
    48. echo "uos kunpeng longxin3000 changcheng longxin4000 longxin5000"
    49. echo "$PC_NAME"
    50. exit 1
    51. fi
    52. #CHECK WORK DIR
    53. if [ ! -d"$PROJECT_LOCATION" ];then
    54. echo "ERROR?THE PROJECT DIR NOT EXIST! NORMAL FORMAT IS?"
    55. echo "~/projects/xxx"
    56. echo "$PROJECT_LOCATION"
    57. exit 1
    58. fi
    59. cd "$PROJECT_LOCATION"
    60. #CHECK PACKED SERVER_CONF
    61. if [ ! "$SERVER_CONFIGURATION" ];then
    62. echo "错误:服务器环境参数不存在,应作为本脚本的第一个参数输入"
    63. echo "$SERVER_CONFIGURATION"
    64. exit 1
    65. fi
    66. echo "CHECK SYS CONF...."
    67. echo "COMPUTER NAME? ""$PC_NAME"
    68. echo "SERVER CONFIGURATION? ""$SERVER_CONFIGURATION"
    69. echo "PACKAGE VERSION? ""$PACKAGE_VERSION"
    70. echo "PROJECT LOCATION? ""$PROJECT_LOCATION"
    71. echo "NEED REPLACE SJSICONS? ""$NEED_REPLACE_SJSICONS"
    72. echo "PC ARCH ""$PC_ARCH"
    73. echo "PC PACKAGE TYPE? ""$PC_PACKAGE_TYPE"
    74. echo "NEED REPLACE EASEMOB NODE? ""$NEED_REPLACE_EASEMOB_NODE"
    75. #PULL LATEST CODE
    76. git checkout your_branch
    77. git pull
    78. #REPLACE ICONS
    79. if [ "$NEED_REPLACE_SJSICONS" = "1" ];then
    80. echo "READY TO CHANGE SJSICONS.."
    81. cd "./sjs-icons"
    82. bash ./replace.sh --update
    83. cd "$PROJECT_LOCATION"
    84. echo "CHANGE SJSICONS DONE."
    85. fi
    86. #REPLACE SDK
    87. if [ "$NEED_REPLACE_EASEMOB_NODE" = "1" ];then
    88. echo "READY TO REPLACE EASEMOB MEDIA SDK.."
    89. if [ ! -d "./bak/""$PC_NAME" ];then
    90. echo "ERROR! CANNT FIND REPLACEBLE MEDIA SDK!"
    91. echo "./bak/""$PC_NAME"
    92. exit 1
    93. fi
    94. cd "./bak/""$PC_NAME"
    95. bash ./replace.sh --update
    96. cd "$PROJECT_LOCATION"
    97. echo "COMPLETE EASEMOB MEDIA SDK REPLACEMENT!"
    98. fi
    99. #REPLACE PACKAGE SERVER CONF
    100. echo "READY TO SET SERVER_CONFIGURATION.."
    101. sed -i "/module.exports = projectConfig./cmodule.exports = projectConfig.""$SERVER_CONFIGURATION"";" ./src/sdkConfig/serverConfig.js
    102. echo "SET SERVER_CONFIGURATION DONE."
    103. #SET PACKAGE VERSION
    104. echo "READY TO SET PACKAGE VERSION.."
    105. sed -i "/\"version\":/c\"version\":"\""$PACKAGE_VERSION""\"," ./package.json
    106. echo "SET PACKAGE VERSION DONE."
    107. echo "READY TO COMPLIE THE CODE.."
    108. npm run build
    109. chmod -R 777 dist/addon
    110. echo "COMPLIE DONE."
    111. echo "READY TO PACK THE CODE.."
    112. npm run "pack:""$PC_ARCH"
    113. echo "PACK CODE DONE"
    114. echo "READY TO PACK UP.."
    115. npm run "pack-""$PC_PACKAGE_TYPE"":""$PC_ARCH"
    116. echo "PACK UP DONE."
    117. cd "$PROJECT_LOCATION"/build
    118. 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

    成功归档 

  • 相关阅读:
    数据库 1.关系
    更多配色,更全面的手感选择,雷柏VT9PRO系列鼠标体验
    137.只出现一次的数字II
    企业运维实践-Nginx使用geoip2模块并利用MaxMind的GeoIP2数据库实现处理不同国家或城市的访问最佳实践指南...
    存储数据的介质销毁时怎么处置
    MATLAB非矩形区域上曲面的绘制
    spark—KV算子解析
    【进阶版】 机器学习之各类距离度量概念:欧氏距离、马氏距离......(17)
    docker基本命令
    php将字符串拆分成数组有哪些方法
  • 原文地址:https://blog.csdn.net/tfstone/article/details/126412832