Centos7.x内网环境Jenkins前端打包环境配置

Centos7.x内网环境Jenkins前端打包环境配置

参考地址:

https://www.cnblogs.com/guangdelw/p/18763336

https://2048.csdn.net/682c1be8606a8318e857d687.html

前言:环境描述和目标

最近公司新接了一个项目,要求是:需要再桌面云中进行内网开发,所有的开发桌面云没办法连接公网,但是内网搭建了nexus私服,javanpm 的应用可以通过nexus私服来下载依赖。

我们本地的文件可以复制到桌面云内部,但是桌面云中的文件无法复制出来。

目标:

  1. 需要将本地的代码上传到对方提供的gitlab私服
  2. 安装Jenkins到Centos服务器中
  3. 添加前后端的打包配置到Jenkins中

代码迁移的过程就不描述了,这里着重描述安装Jenkins 和 添加配置。

一、安装Jenkins

Jenkins的国内源:

以下是一些常用的国内 Jenkins 插件更新源地址:

  • 清华大学:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
  • 华为开源镜像站:https://mirrors.huaweicloud.com/jenkins/updates/update-center.json
  • 腾讯云:https://mirrors.cloud.tencent.com/jenkins/updates/update-center.json
  • 中国科学技术大学:https://mirrors.ustc.edu.cn/jenkins/updates/update-center.json
  • 北京理工大学:https://mirror.bit.edu.cn/jenkins/updates/update-center.json

1.1、前置思考:

由于公司的后端代码使用的JDK版本为1.8,所以为了统一jdk版本,所以最初选定使用JDK8的最后一个版本:Jenkins-2.346.3

但是再实际操作的时候发现:Jenkins在线安装插件的时候,并不会将当前Jenkins的版本传过去获取适合当前版本的插件,而是会获取当前最新版本,基于这种情况最终选定安装比较LTS新版本的2.479.3 (注意这里使用的是JDK17)

而安装的过程区分为两种方式:

  1. 再一个可联网的机器上安装插件,然后将插件和配置目录打包一起迁移到服务器中(默认的目录为:当前用户主目录下的**.jenkins**文件夹下)
  2. 只是将 jpi插件 copy到桌面云中,并通过web界面一个个上传上去

相比之下第一种操作方式更简单,所以最终选用第一种方式。

但是当前时间(2025-05-27)前后国内的插件源没办法使用,找不到对应的 update-center.json 文件,所以吭哧了好久最终使用魔法直接连接插件官网直接进行下载的。

1.2、安装的过程

操作步骤如下:

  1. 下载 jenkins.war 文件
  2. 通过 java -jar jenkins.war 命令进行启动
  3. 然后配置用户名和密码和选择插件下载即可。
  4. 下载完毕后,直接将jenkins配置主目录(当前用户主目录下的**.jenkins**文件夹下)和 jenkins.war 文件打包上传到桌面云服务器中
  5. 然后解压,将其 .jenkins 目录同样放到当前用户主目录下,然后启动即可

二、前端环境的配置

2.1、nodejs环境的安装和配置

2.1.1、前置思考:

由于我们使用服务器为:Centos7.9,而项目依赖的nodejs版本要求为:16.15.1, pnpm的安装要求为:大于18,基于安装LTS版本的要求,最终选定安装:18.20.8或者20.19.2版本。

而官网提供 18.20.8 或者 20.19.2 版本的nodejs再Centos7.9通过tar包安装配置后,再执行:node -v 的过程出现类似一下的错误:

$ node -v
/lib64/libm.so.6: version `GLIBC_2.27' not found (required by ./node)
/lib64/libc.so.6: version `GLIBC_2.25' not found (required by ./node)
/lib64/libc.so.6: version `GLIBC_2.28' not found (required by ./node)
/lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ./node)
/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by ./node)
/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./node)linux-vdso.so.1 =>  (0x00007ffca6bd4000)libdl.so.2 => /lib64/libdl.so.2 (0x00002b574ed87000)libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00002b574ef8b000)libm.so.6 => /lib64/libm.so.6 (0x00002b574f293000)libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002b574f595000)libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b574f7ab000)libc.so.6 => /lib64/libc.so.6 (0x00002b574f9c7000)/lib64/ld-linux-x86-64.so.2 (0x00002b574eb63000)

大概的原因是:

而CentOS 7.x等操作系统自带的glibc版本为2.17,Node.js v18.x或更高编译的环境所需glibc≥2.28,所以这里有三种方案:

  1. 升级本服务器的glibc,但是各个应用之间会依赖低版本的,强制升级会导致其他应用服务异常(不推荐)
  2. 通过Linux的scl计划,再CentOS 7.x安装各种开发工具集,重新编译(不推荐)
  3. 通过nodejs官网旗下的unofficial-builds子计划,来下载对方提供好的编译版。地址为:https://unofficial-builds.nodejs.org/download/release/

再unofficial-builds提供的nodejs中, 18.20.8 版本再实际的使用过程中发现还是会有报错的情况,所以最终选择了 20.19.2,下载的地址为:

https://unofficial-builds.nodejs.org/download/release/v20.19.2/node-v20.19.2-linux-x64-glibc-217.tar.xz

2.1.2、nodejs的安装

具体的操作如下:

  1. 下载 node-v20.19.2-linux-x64-glibc-217.tar.xz 文件并上传到桌面云服务器中
  2. 通过 tar -Jxf node-v20.19.2-linux-x64-glibc-217.tar.xz 对文件进行解压缩
  3. 配置环境变量,将当前目录配置到 PATH 中,然后重新加载配置文件:. /etc/profile
  4. npm配置使用nexus的私服,执行操作:npm config set registry https://nexus.sunwoda.com/repository/npm-group

2.2、项目的编译

2.2.1、项目中的配置文件

{// 省略部分配置"devDependencies": {"@ant-design/colors": "^6.0.0","@commitlint/cli": "^17.6.6","@commitlint/config-conventional": "^17.6.6","@iconify/json": "^2.2.87","@purge-icons/generated": "^0.9.0","@types/codemirror": "^5.60.8","@types/crypto-js": "^4.1.1","@types/intro.js": "^5.1.1","@types/lodash-es": "^4.17.7","@types/mockjs": "^1.0.7","@types/nprogress": "^0.2.0","@types/qrcode": "^1.5.1","@types/qs": "^6.9.7","@types/showdown": "^2.0.1","@types/sortablejs": "^1.15.1","@dcore/eslint-config": "workspace:*","@dcore/stylelint-config": "workspace:*","@dcore/ts-config": "workspace:*","@dcore/types": "workspace:*","@dcore/vite-config": "workspace:*","@vue/compiler-sfc": "^3.3.4","@vue/test-utils": "^2.4.0","cross-env": "^7.0.3","cz-git": "^1.6.1","czg": "^1.6.1","eslint": "^8.13.0","eslint-config-prettier": "^8.5.0","eslint-define-config": "^1.1.1","eslint-plugin-jest": "^25.2.2","eslint-plugin-prettier": "^4.0.0","eslint-plugin-vue": "^8.6.0","husky": "^8.0.3","lint-staged": "13.2.3","prettier": "^2.8.8","prettier-plugin-packagejson": "^2.4.4","rimraf": "^5.0.1","turbo": "^1.10.7",		// 这里是个关键,后面考试要考"typescript": "^5.1.6","unbuild": "^1.2.1","vite": "^4.4.0","vite-plugin-mock": "^2.9.6","vue-tsc": "^1.8.4"},"packageManager": "pnpm@8.1.0","engines": {"node": ">=16.15.1","pnpm": ">=8.1.0"}
}

2.2.2、配置、编译和打包

# npm 先配置registry私服地址,注意私服地址结尾不要添加“/”否则后期会报错
$ npm config set registry https://nexus.sunwoda.com/repository/npm-group# 先安装 pnpm 命令
$ npm install pnpm@8.6.7 -g# 安装 turbo 命令
$ npm install turbo@1.10.8 -g# pnpm 命令也配置registry私服地址
$ pnpm config set registry https://nexus.sunwoda.com/repository/npm-group# 进入项目工程,先拉取依赖
$ pnpm install# 打包操作
$ pnpm run build

2.2.3、操作过程中的异常情况

2.2.3.1、pnpm install出现error (ERR_INVALID_THIS)的情况

具体的报错内容如下:

$ pnpm install
Scope: all 7 workspace projects
internal/eslint-config                   |  WARN  deprecated eslint@8.46.0WARN  deprecated eslint-define-config@1.1.1: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.WARN  deprecated @iconify/iconify@3.1.1: no longer maintained, switch to modern iconify-icon web componentWARN  GET https://nexus.sunwoda.com/repository/npm-ptl-hosted/debug error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.WARN  GET https://nexus.sunwoda.com/repository/npm-ptl-hosted/graphemer error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.WARN  GET https://nexus.sunwoda.com/repository/npm-ptl-hosted/ignore error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left. WARN  GET https://nexus.sunwoda.com/repository/npm-ptl-hosted/natural-compare-lite error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.WARN  GET https://nexus.sunwoda.com/repository/npm-ptl-hosted/semver error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.WARN  GET https://nexus.sunwoda.com/repository/npm-ptl-hosted/ts-api-utils error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.WARN  GET https://nexus.sunwoda.com/repository/npm-ptl-hosted/@eslint%2Feslintrc error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.WARN  GET https://nexus.sunwoda.com/repository/npm-ptl-hosted/@eslint%2Fjs error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.

nodejs20 版本中,就会出现这个问题,为了解决这个问题,你只需要升级到 pnpm v8.3.1 或更高版本即可。

参考地址:

https://www.wyr.me/post/746

https://blog.csdn.net/qq_19661477/article/details/134234971

2.2.3.2、pnpm install出现turbo run stub,run failed: error hashing package files

具体的报错内容如下:

$ pnpm install
. postinstall$ turbo run stub
│  ERROR  run failed: error hashing package files: git error: 'git status' in /root/abc/limsui/packages/hooks exited with code 129 stderr: error: unknown option `no-renames'
│ usage: git status [options] [--] <pathspec>...
│     -v, --verbose         be verbose
│     -s, --short           show status concisely
│     -b, --branch          show branch information
│     --porcelain           machine-readable output
│     --long                show status in long format (default)
│     -z, --null            terminate entries with NUL
│     -u, --untracked-files[=<mode>]
│                           show untracked files, optional modes: all, normal, no. (Default: all)--ignored             show ignored files
│     --ignore-submodules[=<when>]
│                           ignore changes to submodules, optional when: all, dirty, untracked. (Default: all)
│     --column[=<style>]    list untracked files in columns

这个是 turbo v1.10.7 版本的bug,然后升级package.json中turbo的版本到新版本即可,例如: turbo v1.10.8

参考地址:

https://github.com/vercel/turborepo/issues/5447#issuecomment-1621908600

扩展操作

1、将依赖上传到nexus私服中

# 本地npm环境添加镜像
$ npm config set registry https://registry.npmmirror.com# 安装 pnpm
$ npm i pnpm@8.6.7 -g# 安装 get-npm-tgz
$ npm i get-npm-tgz -g# 进入到项目目录中,然后下载依赖
$ pnpm install# 然后将  pnpm-lock.yaml 转换为:package-lock.json
$ npx pnpm-lock-to-npm-lock ./pnpm-lock.yaml# 这个命令会把当前文件夹的 package-lock.json 的依赖tgz格式下载下来, 执行成功后所有的依赖会再当前目录的 tgz 文件夹下
$ npx get-npm-tgz# 然后将tgz文件夹压缩为xz文件,然后上传到桌面云中
$ tar -Jcf tgz.tar.xz tgz#======= 以下内容再桌面云中执行 =======
# 先解压缩
$ tar -Jxf tgz.tar.xz# 先设置私服的url并进行登录
$ npm login --registry http://registry.npmjs.com# 发布 xxxx.tgz 文件
$ npm publish xxxx.tgz 

批量的发布脚本

#!/bin/bashREPOSITORY=https://nexus.sunwoda.com/repository/npm-ptl-hosted
PACKAGES_PATH=./tgznpm login --registry=$REPOSITORYfor package in $PACKAGES_PATH/*.tgz; donpm publish --registry=$REPOSITORY $package
done

参考地址:

https://blog.csdn.net/2401_85743969/article/details/141128702

https://www.npmjs.com/package/get-npm-tgz

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/81893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hash 的工程优势: port range 匹配

昨天和朋友聊到 “如何匹配一个 port range”&#xff0c;觉得挺有意思&#xff0c;简单写篇散文。 回想起十多年前&#xff0c;我移植并优化了 nf-HiPAC&#xff0c;当时还看不上 ipset hash&#xff0c;后来大约七八年前&#xff0c;我又舔 nftables&#xff0c;因为用它可直…

kafka学习笔记(三、消费者Consumer使用教程——使用实例及及核心流程源码讲解)

1.核心概念与架构 1.1.消费者与消费者组 Kafka消费者是订阅主题&#xff08;Topic&#xff09;并拉取消息的客户端实例&#xff0c;其核心逻辑通过KafkaConsumer类实现。消费者组&#xff08;Consumer Group&#xff09;是由多个逻辑关联的消费者组成的集合。 核心规则 同一…

《java创世手记》---java基础篇(下)

《Java 创世手记 - 基础篇&#xff08;下&#xff09;》 第五章&#xff1a;契约与规范 —— 接口 (Interfaces) 与抽象类 (Abstract Classes) 造物主&#xff0c;在你日益繁荣的世界里&#xff0c;你发现仅仅依靠“继承”来构建“物种体系”有时会遇到一些限制。比如&#x…

气镇阀是什么?

01、阀门介绍&#xff1a; 油封机械真空泵的压缩室上开一小孔&#xff0c;并装上调节阀&#xff0c;当打开阀并调节入气量&#xff0c;转子转到某一位置&#xff0c;空气就通过此孔掺入压缩室以降低压缩比&#xff0c;从而使大部分蒸汽不致凝结而和掺入的气体一起被排除泵外起此…

计算机一次取数过程分析

计算机一次取数过程分析 1 取址过程 CPU由运算器和控制器组成&#xff0c;其中控制器中的程序计数器(PC)保存的是下一条指令的虚拟地址&#xff0c;经过内存管理单元(MMU)&#xff0c;将虚拟地址转换为物理地址&#xff0c;之后交给主存地址寄存器(MAR)&#xff0c;从主存中取…

从equals思考对“正念”的认知

正念 很多人聊正念&#xff0c;每个人有自己的解说&#xff0c;我听到最符合逻辑的一个说法&#xff1a;正念就是对抗惯性。 如果尝试过打坐或者冥想&#xff0c;就有一个说法叫正观&#xff0c;什么意义呢&#xff1f;就是说感受自己的呼吸&#xff0c;自己的心跳&#xff0c…

信息安全管理与评估2025山东卷

需要其他赛题解析的可联系博主

【leetcode】02.07. 链表相交

链表相交 题目代码1. 计算两个链表的长度2. 双指针 题目 02.07. 链表相交 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 代码 …

可视化与动画:构建沉浸式Vue应用的进阶实践

在现代Web应用中&#xff0c;高性能可视化和流畅动画已成为提升用户体验的核心要素。本节将深入探索Vue生态中的可视化与动画技术&#xff0c;分享专业级解决方案与最佳实践。 一、 Canvas高性能渲染体系 01、Konva.js流程图引擎深度优化 <template><div class"…

⼤模型驱动的DeepInsight Copilot在蚂蚁的技术实践

本文整理自潘兰天&#xff08;蚂蚁数据智能团队数据分析平台技术专家)在DA数智大会2025上海站的演讲实录。 本文围绕AI技术在数据分析领域的应用及DeepInsight Copilot产品展开。DeepInsight是一款蚂蚁长期深耕数据分析领域的BI产品&#xff0c;本文首先介绍了DeepInsight Copi…

Express教程【003】:Express获取查询参数

文章目录 3、获取URL中携带的查询参数3.1 参数形式&#xff1a;查询字符串3.2 参数形式&#xff1a;动态参数3.3 参数形式&#xff1a;Json数据 3、获取URL中携带的查询参数 3.1 参数形式&#xff1a;查询字符串 1️⃣通过req.query对象&#xff0c;可以访问到客户端通过查询…

在CentOS7上使用tree查看目录树

文章目录 1. 利用yum安装tree2. 利用rpm安装tree2.1 下载tree的rpm包2.2 上传到云主机2.3 安装tree软件 3. 使用tree查看目录树4. 实战小结 1. 利用yum安装tree 执行命令&#xff1a;yum -y install tree CentOS7停止更新&#xff0c;即使更新镜像源&#xff0c;也无法正常安装…

大规模JSON反序列化性能优化实战:Jackson vs FastJSON深度对比与定制化改造

背景&#xff1a;500KB JSON处理的性能挑战 在当今互联网复杂业务场景中&#xff0c;处理500KB以上的JSON数据已成为常态。 常规反序列化方案在CPU占用&#xff08;超30%&#xff09;和内存峰值&#xff08;超原始数据3-5倍&#xff09;方面表现堪忧。 本文通过Jackson与Fas…

华为交换机S12708常用命令

以下是华为S12708交换机&#xff08;高端园区/数据中心核心交换机&#xff09;的常用运维命令&#xff0c;涵盖基础配置、状态查看、故障排查等场景&#xff1a; 一、基础配置命令 1. 系统管理 system-view # 进入系统视图 sysname S12708-Core # 设置设备名称 clock timez…

通过海康萤石API控制家里相机的云台及抓图

通过海康萤石API控制家里相机的云台及抓图 一、背景二、环境准备2.1 注册开发者账号2.2 安装依赖库2.3 创建`.`env`文件三、代码片段解释3.1 加载并使用环境变量3.2 发送HTTP请求的封装函数3.3 获取AccessToken3.4 分页查询设备列表3.5 抓拍图片3.6 开始云台控制3.7 控制云台并…

XCUITest 是什么

XCUITest&#xff08;全称 Xcode UI Test&#xff09;是苹果官方提供的 iOS/macOS UI 自动化测试框架&#xff0c;集成在 Xcode 开发工具中&#xff0c;专门用于测试 Swift/Objective-C 开发的应用程序。 1. XCUITest 的核心特点 ✅ 官方支持&#xff1a;苹果原生框架&#xf…

mapbox高阶,PMTiles介绍,MBTiles、PMTiles对比,加载PMTiles文件

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️Fill面图层样式1.4 ☘️PMTiles介绍1.5…

5.0以上版本antv/g6使用心得

1. 画布只重新渲染数据 graph.render graph.drawgraph,fitview()graph.fitCenter()setData塞入新的数据 const updateGraph (data) > {if (!graph) {console.warn("Graph is not initialized");return;}graph.clear();graph.setData(data);graph.render(); };…

4.5V~100V, 3.8A 峰值电流限, 非同步, 降压转换器,LA1823完美替换MP9487方案

一&#xff1a;综述 LA1823 是一款易用的非同步&#xff0c;降压转换器。 该模块集成了 500mΩ 低导通阻抗的高侧 MOSFET。LA1823 使用 COT 控制技术。此种控制方式有利于快速动态响应,同时简化了反馈环路的设计。LA1823 可以提供最大 2A 的持续负载电流。LA1823有150kHz/240kH…

如何定位并优化慢 SQL?

如何定位并优化慢 SQL? 一、慢 SQL 的定义与影响 1.1 什么是慢 SQL? 慢 SQL是指执行时间超过预期阈值的SQL语句,通常由以下特征: 执行时间超过慢查询阈值(如MySQL默认10秒)消耗大量CPU/IO资源导致连接堆积或系统负载升高关键结论:慢SQL是数据库性能瓶颈的主要诱因,可…