Zwischenspeichern von Ruby-Edelsteinen in GitHub-Aktionen mit Ruby / Setup-Ruby oder Actions / Cache

Wie lade ich Ruby-Edelsteine ​​aus dem Cache in GitHub-Aktionen, um den Start eines in diesem CI-System (Continuous Integration) erstellten Projekts zu beschleunigen? Wenn Sie alle Abhängigkeiten eines Ruby on Rails (RoR) -Projekts in kürzester Zeit zum Laufen bringen, können Sie die Zeit für die Ausführung von Tests für dieses Projekt verkürzen. Hier bietet sich das Caching an. In einem Projekt benötigte Ruby-Edelsteine ​​können mithilfe von GitHub-Aktionen zwischengespeichert werden, sodass sie beim Start der CI-Pipeline viel schneller als zuvor geladen werden können. Es gibt zwei Möglichkeiten, Ruby-Edelsteine ​​zwischenzuspeichern, die bei Verwendung von CI GitHub-Aktionen anwendbar sind. Einer von ihnen sieht die Anwendung vor ruby/setup-ruby



, der zweite - actions/cache



.









Actions/cache —



Aktionen / Cache ist eine beliebte Lösung, mit der Daten im Cache abgelegt und beim nächsten Start des Projekterstellungsprozesses in einem CI-System aus dem Cache abgerufen werden können. Diese Aktion wird häufig für RoR-Projekte verwendet, die auch eine Aktion zum Steuern von Ruby-Versionen in GitHub-Aktionen verwenden actions/setup-ruby



.



Betrachten wir ein Beispiel für eine Konfigurationsdatei zum Organisieren des Caching in GitHub-Aktionen, die Folgendes verwendet actions/cache



:



# .github/workflows/main.yml
name: Main
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - uses: actions/cache@v2
        with:
          path: vendor/bundle
          key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
          restore-keys: |
            ${{ runner.os }}-gems-

      - name: Bundle install
        env:
          RAILS_ENV: test
        run: |
          bundle config path vendor/bundle
          bundle install --jobs 4 --retry 3

      
      





Lassen Sie uns die Hauptmerkmale dieser Datei analysieren:



  • Sie müssen den Pfad zu dem Verzeichnis angeben, das Sie zwischenspeichern möchten. In unserem Fall ist es - vendor/bundle



    .
  • Außerdem generieren wir hier einen eindeutigen key



    Cache- Schlüssel ( ) mit Informationen zur Betriebssystemversion und zur Datei Gemfile.lock



    . Wenn Sie die Betriebssystemversion ändern oder ein neues Juwel installieren Gemfile.lock



    , das die Änderung verursacht , wird ein neuer Wert generiert key



    .
  • Als nächstes müssen wir den Bundler so konfigurieren, dass alle unsere Ruby-Edelsteine ​​im Verzeichnis installiert werden vendor/bundle



    .
  • Hier können Sie die folgenden Bundler-Parameter verwenden:


Wenn Sie sich die vollständigen YAML-Dateien mit den Einstellungen für GitHub-Aktionen für Rail-Projekte ansehen möchten , finden Sie hier , hier , hier einige unserer Artikel zu diesem Thema.



Ruby / Setup-Ruby - Installation von Ruby und Zwischenspeichern von Edelsteinen



Oben haben wir erwähnt, dass es häufig in RoR-Projekten verwendet wird actions/setup-ruby



. Aber die Aktion actions/setup-ruby



wurde abgelehnt. Es wird heutzutage empfohlen, stattdessen eine Aktion zu verwenden ruby/setup-ruby



. Darin besteht unter anderem die Möglichkeit, Daten zwischenzuspeichern. So sieht die Konfigurationsdatei aus, wenn sie verwendet werden soll ruby/setup-ruby



:



# .github/workflows/main.yml
name: Main
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2

    - uses: ruby/setup-ruby@v1
      with:
        #     .ruby-version
        ruby-version: 2.7
        #  'bundle install'     
        bundler-cache: true

    #  RSpec-
    - run: bundle exec rspec

      
      





Wie Sie sehen können, ist diese Option zum Organisieren des Zwischenspeicherns von Edelsteinen einfacher als die im vorherigen Abschnitt beschriebene. Und hier steht uns zusätzlich das Ruby-Versionskontrollsystem zur Verfügung. Wenn wir über das Zwischenspeichern von Edelsteinen sprechen, kommt es im Wesentlichen darauf an, der Konfigurationsdatei eine Zeile hinzuzufügen bundler-cache: true



.



Aber was Sie herausfinden können, indem Sie sich auf die Dokumentation beziehen für ruby/setup-ruby



:



, , , . , -, , - — . , , actions/cache ( — , , , .lock-, , , ABI- ruby-head ). , , , bundler-cache: true…





Wir haben zwei Möglichkeiten zum Zwischenspeichern von Ruby-Edelsteinen in CI GitHub-Aktionen behandelt. Wir hoffen, dass jeder, der den Aufbau von Ruby-Projekten beschleunigen muss, hier einige Denkanstöße gefunden hat. Natürlich gibt es auch andere Möglichkeiten, um CI-Pipelines zu beschleunigen, z. B. die parallele Ausführung von Tests.



Verwenden Sie GitHub-Aktionen?






All Articles