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
繁體地址,請注明出處:http://hk.pswp.cn/web/81893.shtml
英文地址,請注明出處:http://en.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是數據庫性能瓶頸的主要誘因,可…