Armazenando gems Ruby em ações do GitHub usando ruby ​​/ setup-ruby ou actions / cache

Como carregar gems Ruby do cache para o GitHub Actions para acelerar o lançamento de uma construção de projeto neste sistema de integração contínua (CI)? Colocar todas as dependências de um projeto Ruby on Rails (RoR) em operação em um piscar de olhos pode ajudar a reduzir o tempo necessário para executar os testes desse projeto. É aqui que o cache é útil. Ruby gems necessárias em um projeto podem ser armazenadas em cache usando GitHub Actions, para que possam ser carregadas muito mais rápido quando o pipeline de CI é inicializado do que antes. Existem duas maneiras de armazenar gems Ruby em cache que são aplicáveis ​​ao usar Ações CI GitHub. Um deles prevê o aplicativo ruby/setup-ruby



, e o segundo - actions/cache



.









Actions/cache —



Ações / cache é uma solução popular que pode ser usada para colocar dados no cache e recuperá-los do cache na próxima vez que o processo de construção do projeto for iniciado em um sistema de CI. Esta ação é frequentemente usada para projetos RoR que também usam uma ação para controlar versões Ruby em Ações GitHub actions/setup-ruby



.



Vamos considerar um exemplo de arquivo de configuração para organizar o armazenamento em cache no GitHub Actions, que usa 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

      
      





Vamos analisar as principais características deste arquivo:



  • Você precisa especificar o caminho para o diretório que deseja armazenar em cache. No nosso caso, é - vendor/bundle



    .
  • Além disso, aqui geramos uma chave de key



    cache exclusiva ( ) usando informações sobre a versão do sistema operacional e o arquivo Gemfile.lock



    . Mudar a versão do sistema operacional ou instalar uma nova gema Gemfile.lock



    que causa a mudança irá gerar um novo valor key



    .
  • Em seguida, precisamos configurar o bundler para que ele instale todas as nossas joias Ruby no diretório vendor/bundle



    .
  • Aqui você pode usar os seguintes parâmetros do bundler:


Se você estiver interessado em dar uma olhada nos arquivos YAML completos com configurações de ações do GitHub para projetos Rail - aqui , aqui , ali , aqui estão alguns de nossos artigos sobre este tópico.



Ruby / setup-ruby - instalando Ruby e armazenando gemas em cache



Acima, mencionamos que ele é frequentemente usado em projetos RoR actions/setup-ruby



. Mas a ação actions/setup-ruby



foi descontinuada. Recomenda-se usar uma ação em vez dela nos dias de hoje ruby/setup-ruby



. Nele, entre outros recursos, também existe a possibilidade de armazenar dados em cache. Esta é a aparência do arquivo de configuração quando se destina a ser usado 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

      
      





Como você pode ver, esta opção para organizar o cache de gemas é mais simples do que o que descrevemos na seção anterior. E aqui, além disso, temos à nossa disposição o sistema de controle de versões Ruby. Em essência, se falamos sobre gemas de cache, tudo se resume a adicionar uma linha ao arquivo de configuração bundler-cache: true



.



Mas o que você pode descobrir consultando a documentação para ruby/setup-ruby



:



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





Cobrimos duas maneiras de armazenar gems Ruby em ações do CI GitHub. Esperamos que qualquer pessoa que precise acelerar a construção de projetos Ruby tenha encontrado algo para pensar aqui. Mas, é claro, existem outras maneiras de acelerar os pipelines de CI, por exemplo, a execução paralela de testes.



Você está usando o GitHub Actions?






All Articles