背景
注意:
-
此方案僅適合已經自行搭建私有倉庫的用戶使用
-
如非必要,盡可能使用軟件開發雲或其他服務提供的鏡像站,避免此類特殊處理(會導致倉庫維護成本增加)
場景描述
YARN構建中,如果使用了cypress包,會出現如下的下載過程
1. 從npm倉庫下載 cypress.tgz : npm http fetch GET 200 https://mirrors.huaweicloud.com/repository/npm/cypress/-/cypress-3.1.4.tgz 146ms
2. 執行cypress-3.1.4.tgz中的腳本,該腳本會拼接出cypress.zip的下載地址並下載,分析cypress.tgz腳本發現,下載地址獲取過程如下:
(1) 獲取下載服務器地址:如果環境變量有值,則去環境變量中配置的地址,否則取默認地址 https://download.cypress.io/
(2) 拼接cypress.zip文件路徑:腳本中會固定拼接成 desktop/3.1.4?platform=linux&arch=x64
(3) 最終得到cypress.zip下載地址為:https://download.cypress.io/desktop/3.1.4?platform=linux&arch=x64 ,開始下載依賴
3. 從國內下載 https://download.cypress.io/desktop/3.1.4?platform=linux&arch=x64 時,速度比較慢,會導致構建卡頓甚至超時失敗
問題分析
從”場景描述“中下載步驟可以看出:
-
國內訪問cypress.io慢,需要替換其他地址,cypress.tgz已提供了環境變量 (CYPRESS_DOWNLOAD_MIRROR),可以更換
-
下載地址 https://download.cypress.io/desktop/3.1.4?platform=linux&arch=x64 中,可以在構建過程中改變的只有 https://download.cypress.io部分,余下內容為固定值無法改變
解決方案
-
手工下載cypress.zip文件,並上傳到私有倉庫
-
上傳到私有倉庫時,指定文件路徑為/desktop/3.1.4,與cypress.tgz腳本中定義的保持一致(版本號3.1.4以實際使用為准)
-
在構建命令中設置環境變量,將https://download.cypress.io替換為私有倉庫地址
操作步驟
此處提供簡易操作步驟如下:
1. 從官網下載cypress.zip文件
https://download.cypress.io/desktop/3.1.4?platform=linux&arch=x64
2. 在Nexus3創建文件系統,新建raw(hosted)倉庫
3. 獲取hosted倉庫url,調用如下命令上傳文件到對應路徑
curl -v --user 'admin:admin123' --upload-file ./cypress.zip http://localhost:8081/repository/npm/cypress/desktop/3.1.4
注意:
上傳時指定的文件路徑(/desktop/3.1.4)必須與官網下載地址的文件路徑保持一致,此處使用desktop/3.1.4即可(具體版本號以實際使用的版本為准)
4. 修改構建任務,配置環境變量以修改cypress.zip下載地址
在構建命令前添加:
export CYPRESS_DOWNLOAD_MIRROR="http://localhost:8081/repository/npm/cypress/"