Github之深入解析Ruby Gems缓存
生活随笔
收集整理的這篇文章主要介紹了
Github之深入解析Ruby Gems缓存
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、前言
- 當執行 bundle install 時,需要根據 Gemfile 或者 Gemfile.lock 下載指定的 ruby gems。當在 Github CI 進行構建時,可以把需要下載的 ruby gems 通過使用 Github action 緩存到當前的 CI 服務器,這樣當進行構建時,就能更快的加載需要的 gems。
- Github 一共提供了兩種 action 完成緩存操作:
-
- actions/cache:最流行的緩存 Ruby gem 方案,僅緩存;
-
- ruby/setup-ruby:可以安裝指定版本的 Ruby 并且使用 bundler 緩存 Ruby gem。
二、actions/cache
- actions/cache 將 ruby gems 保存到緩存中并在下一次 CI 構建期間恢復它。如果要指定 Ruby 版本,需要在當前的倉庫目錄,創建一個 .ruby-version 文件,將依賴的 ruby 版本寫入該文件,Kingfisher/.ruby-version:
- 再來看一下 Kingfisher 中的設置:
- 對于 actions/cache 的 v1 版本,僅支持單個路徑,它必須是一個目錄,不能緩存單個文件。使用 actions/cache 的 v2 版本,可以指定單個路徑,也可以在單獨的行上添加多個路徑;
- 輸入參數 path 必要,指定緩存或還原的文件路徑。路徑可以是絕對路徑或相對于工作目錄的路徑,當前是 vendor/bundle;
- 輸入參數 key,必要。根據當前的操作系統和 Gemfile.lock 文件哈希的表達式生成緩存 key 作為搜索緩存的鍵。當操作系統或者 Gemfile.lock 發生改變時,重新生成 key 值;當 key 匹配現有緩存時,被稱為緩存命中,并且操作會將緩存的文件還原到 path 目錄;
- restore-keys:可選。key 沒有發生緩存命中時用于查找緩存的其他密鑰順序列表;
-
- 如果提供 restore-keys,actions/cache 將按順序搜索與 restore-keys 列表匹配的任何緩存;
-
- 當精確匹配時,操作會將緩存中的文件恢復至設置 path 的目錄;
-
- 如果沒有精確匹配,操作將會搜索恢復鍵值的部分匹配。當操作找到部分匹配時,最近的緩存將恢復到設置 path 目錄。
- bundle config path vendor/bundle 配置 bundle,將需要的 ruby gems 安裝到 vendor/bundle 目錄;
- cache-hit 是 actions/cache 的輸出參數。獲取緩存命中的結果。
-
- 當 key 不匹配現有緩存時,則被稱為緩存錯過,在 job 成功完成時將創建一個新緩存。
-
- 發生緩存錯過時,操作將搜索 restore-keys 設置的替代鍵值。
- –jobs 4 --retry 3,并行安裝 ruby gems,如果當前有網絡問題,將嘗試 3 次。
三、ruby/setup-ruby
- 如果使用 ruby/setup-ruby 來管理 gem 緩存和 ruby 版本就更加直觀和簡潔。首先,在 Github 中 fork Kingfisher 到自己的倉庫。把 .github/workflows 中的 build.ymal 修改為:
- 接下來,將修改的代碼 push 到自己的倉庫中,此時已經觸發 Github CI 服務器,開始執行 workflow:
- 一共有四個任務,分別對應著,配置在構建矩陣中的參數:
- 實際執行的命令信息:
- 可以看到,僅僅需要設置 bundler-cache: true,同時不再需要文件去指定 ruby 版本,相對來說就可以避免手動設置緩存時帶來的問題。
總結
以上是生活随笔為你收集整理的Github之深入解析Ruby Gems缓存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GitHub之GitHub Action
- 下一篇: 【网络通信与信息安全】之深入解析TCP与