你的遠端倉庫總是拉不到包,一個小妙招教你解決

JFrog傑蛙科技發表於2021-04-03

Artifactory 作為外網代理倉庫時,使用者有時候是否會有經常拉不到包最新版本的包?或者拉包失敗後一段時間內始終是失敗,找不到原因,過了一會自己又恢復了?這篇文件帶你詳細瞭解一下代理倉庫一些策略配置,讓你更好的瞭解倉庫的機制。

l   場景1 :拉包失敗後一直重複同樣的錯誤

有一種情況是當你去請求一個不再快取中的包時候,由於當時可能不確定的原因出現了失敗的情況,但是當你再次嘗試,並且確定伺服器已經可以正常下載的這個包時,去遠端倉庫請求,始終是下載不下來。正當你排查了一段時間,百思不得其解時,抱著死馬當活馬醫的心態嘗試下載時,奇蹟般的發現居然可以下載了。

這個問題的原因當Artifactory 去遠端下載包失敗後,會快取這個失敗的狀態一段時間,避免頻繁去外網惡意請求。假設我們網路穩定的情況這個情況是比較少見的,但是由於目前很多公網源都在國外,導致國內使用者使用國外源,網路穩定性使用無法保證。這也就是為什麼會出現我們前面說的那個問題出現的原因。

不過,這個快取的狀態的時間是可以調整的,具體位置在倉庫配置頁面的advance→cache→Missed Retrieval Cache Period (Sec) ,這個引數為快取失敗狀態的時間,倉庫如果沒有做任何配置的話預設是1800 秒,也就是半小時。當出現上面情況的問題是,將這個引數調整為0 ,就可以立刻觸發重新去外網下載。

當然常規時間還是建議配置一定的快取時間,減少去外網的請求頻率。一定程度上可以提高倉庫的工作效率。

l   場景2 :外網有新包,下載時無法獲取到

這種情況尤其是在Npm 使用時很常見,由於Npm 快速迭代的特性,很多開發者不喜歡在自己引用的包上指定版本號,預設使用latest 版本。這樣在自己本地開發和使用公司內網開發時會發現,使用本地連線外網開發的版本和內網連線製品庫獲取的版本不一致。假設版本不同版本間沒有明顯的功能差異還好,但是如果剛好是元件迭代了一個新的功能或者方法,本地開發時候引用到了,這時候會導致整個專案的Bug

這個問題主要原因是製品庫獲取遠端倉庫是有索引的,而這個索引在製品庫中也是同樣有快取的,比如當前更新過一次索引,那麼倉庫一段時間內是不會再次去更新的,這個目的也是為了減少倉庫去外網請求的頻率。

當然這個與上面的內容一樣,也是可以配置的,具體位置在倉庫配置頁面的advance→cache→Metada Retrieval Cache Period (Sec) ,就是倉庫更新索引快取的時間,倉庫如果沒有做任何配置的話預設是7200 秒,也就是兩個小時。當出現上面情況的問題是,將這個引數調整為0 ,就可以立刻觸發重新去外網更新索引,這樣就可以獲取到最新版本了。

l   場景3 :使用的代理,但是無法獲取到包

配置代理後發現無法拉包,但是測試代理下載沒有問題。一般情況下來說,這之後需要去確認代理是否支援Head 請求,遠端倉庫代理下載時為了會使用Head 去校驗包是否存在,但是由於代理不支援Head ,導致請求失敗,無法觸發下載。

當確認下載無問題時,並且公司內代理由於安全管理問題,無法支援Head 請求,可以使用引數配置跳過,直接觸發包的下載。具體引數如下圖。

以上幾個問題是使用Artifactory 作為遠端倉庫代理時常見的幾個場景。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69954434/viewspace-2766465/,如需轉載,請註明出處,否則將追究法律責任。

相關文章