Führen Sie Ruby on Rails RSpec-Tests mit GitHub-Aktionen aus

Als ich versuchte, den RSpec-Test von Ruby on Rails mit GitHub-Aktionen auszuführen, war es ziemlich schwierig, deshalb werde ich ihn aufschreiben.

Was sind GitHub-Aktionen?

Es ist eine serverlose Ausführungsumgebung, die auf GitHub ausgeführt wird. Durch die Beschreibung der Einstellungen in einer Datei im Repository kann ein Mechanismus verschiedene Operationen auf GitHub auslösen und beliebige Aktionen ausführen. Sie können es kostenlos verwenden, wenn es sich um ein öffentliches Repository handelt.

Dieses Mal werde ich es zu einem CI für Rails machen, indem ich RSpec in Verbindung mit der Erstellung von Pull Request ausführe.

Fazit

Es scheint gut, ein Docker-Image hochzuladen, mit dem Rails in Docker Hub ausgeführt, Docker gezogen und der Test ausgeführt werden kann.

Umgebung

Es kann leicht gehandhabt werden, auch wenn es sich vom Betriebssystem unterscheidet.

Erstellen Sie ein Docker-Image und laden Sie es in Docker Hub hoch

Dockerfile

Es ist eine grundlegende Umgebung. Wenn Sie die erforderliche Bibliothek haben, fügen Sie diese bitte hinzu.

tools/ci/Dockerfile


FROM ubuntu:16.04

SHELL ["/bin/bash", "-c"]

ENV RUBY_VERSION="2.6.6"
ENV BUNDLER_VERSION="2.1.4"
ENV DEBIAN_FRONTEND="noninteractive"
ENV PATH=/root/.rbenv/bin:/root/.rbenv/shims:$PATH

WORKDIR /app

COPY Gemfile .
COPY Gemfile.lock .

RUN set -x \
  && apt update \
  && apt install -y \
    build-essential \
    curl \
    git \
    libssl-dev \
    libreadline-dev \
    libmysqlclient-dev \
    mysql-client \
    mysql-server \
    tzdata \
    zlib1g-dev \
  # Install rbenv and ruby
  && git clone https://github.com/sstephenson/rbenv.git ~/.rbenv \
  && git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build \
  && CONFIGURE_OPTS='--disable-install-rdoc' /root/.rbenv/bin/rbenv install ${RUBY_VERSION} -s \
  && /root/.rbenv/bin/rbenv global ${RUBY_VERSION} \
  # Install bundler
  && echo 'gem: --no-rdoc --no-ri' > /root/.gemrc \
  && /root/.rbenv/shims/gem install bundler -v ${BUNDLER_VERSION} \
  # bundle install
  && /root/.rbenv/shims/bundle config set without development \
  && /root/.rbenv/shims/bundle install \
  # delete unused file
  && rm -rf /var/lib/apt/lists/* \
  && rm Gemfile Gemfile.lock

Wenn Sie mehrere RUNs schreiben und die Docker-Ebenen überlappen, tritt zur Laufzeit um MySQL ein Fehler auf. Erstellen Sie daher die gesamte Umgebung mit einem Befehl.

Erstellen Sie Docker

docker build -t utyosu/build-rails:latest . -f tools/ci/Dockerfile

Laden Sie das Docker-Image hoch

Sie benötigen ein Docker Hub-Konto. Erstmaliges Registrieren des Docker Hub-Repositorys scheint hilfreich zu sein.

docker push utyosu/build-rails:latest

Setzen Sie Trigger für GitHub-Aktionen

Erstellen Sie eine Datei für GitHubAction im Repository Ihres Projekts.

:.github\workflows\build.yml


name: build

#Eine Pull-Anfrage auslösen
on: [pull_request]

jobs:
  build:
    #Basierend auf der neuesten Version von Ubuntu
    runs-on: ubuntu-latest

    #Ziehen Sie das Bild vom Docker Hub
    container:
      image: utyosu/build-rails:latest

    #Schauen Sie sich diesen Zweig an
    steps:
    - uses: actions/checkout@v1

    # test.lauf sh
    - name: run test
      run: . tools/ci/test.sh

Testskript

Beschreiben Sie, was Sie testen möchten. Wenn dieses Skript fehlschlägt, schlägt der Build fehl.

tools/ci/test.sh


#!/bin/bash

#Es wird kein Prozess ausgeführt. Starten Sie daher zuerst MySQL
service mysql start

#Erstellen und Gewähren von MySQL-Benutzern
mysql -e 'create user "user_name";'
mysql -e 'grant all on *.* to "user_name";'

export RAILS_ENV=test
bundle config set without development

#Installieren Sie Gem.
#Von nichts
bundle install

#Überprüfen Sie, ob Capistrano läuft
#(Ich überprüfe es nur für den Fall, dass es aufgrund von Versionsfehlanpassungen möglicherweise nicht funktioniert.)
bundle exec cap -T

#Statische Analyse mit Rubocop
bundle exec rubocop

#Erstellen Sie eine durch Schienen definierte Datenbank
bundle exec rails db:create

#Datenbankschemaerstellung mit Ridgepole
#Wenn Sie Ridgepole nicht verwenden, bündeln Sie stattdessen Exec Rails DB:schema:Last ausführen
bundle exec ridgepole -c config/database.yml --apply -f db/schema -E test

#Führen Sie RSpec aus
bundle exec rspec

Eigentlich versuchen

Wenn ich eine Pull-Anfrage mache, heißt es "Einige Prüfungen sind noch nicht abgeschlossen".

1.png

Klicken Sie auf Details, um den Fortschritt von CI anzuzeigen.

3.png

Nach einer kurzen Wartezeit sehen Sie die Konsolenausgabe.

4.png

Es wird nach einer Weile abgeschlossen sein.

5.png

Wenn Sie zu PullRequest zurückkehren, wird "Alle Prüfungen bestanden" angezeigt, was darauf hinweist, dass der Test ohne Probleme bestanden wurde.

6.png

Hintergrund

Da die GitHub-Standard-Ruby-Ausführungsumgebung vorbereitet ist, habe ich sie zunächst basierend darauf ausprobiert. Die Installation von Rails and Gem dauert jedoch mehr als 30 Minuten. Daher dachte ich, dass es für CI in leichten Projekten nicht geeignet ist. Ich habe diese Methode verwendet, weil ich festgestellt habe, dass die Testausführung in etwa 40 Sekunden gestartet werden kann, wenn die Methode darin besteht, das Image von DockerHub abzurufen und auszuführen.

Memo

Es scheint eine Möglichkeit zu geben, MySQL in einem anderen Container vorzubereiten und zwischen Containern auszutauschen, aber der Mechanismus war zu schwer zu realisieren. Ich wünschte, ich könnte es in der Rails-Umgebung gut machen.

Recommended Posts

Führen Sie Ruby on Rails RSpec-Tests mit GitHub-Aktionen aus
[Ruby on Rails] Test mit RSpec anzeigen
[Ruby on Rails] Controller-Test mit RSpec
[Ruby on Rails] Modelltest mit RSpec
Einführung in Rspec mit Ruby on Rails x Docker
Verstehen Sie die Codeabdeckung mit Rspec, dem Ruby on Rails-Testframework
Hinweise zur Verwendung von FCM mit Ruby on Rails
[Ruby on Rails] Bis zur Einführung von RSpec
Veröffentlichen Sie die mit Ruby on Rails erstellte App
Einführung in Rspec, ein Testframework für Ruby on Rails
[Rails] Verfahren zum Verknüpfen von Datenbanken mit Ruby On Rails
Bestimmen Sie die aktuelle Seite mit Ruby on Rails
[Ruby on Rails] Hochladen mehrerer Bilder mit Refile
Ich habe mit Ruby On Rails ein Portfolio erstellt
Ruby on Rails Elementary
Ruby on Rails Grundlagen
[Schienen] Test mit RSpec
Ruby On Rails Association
[Ruby on Rails] Löschen Sie s3-Bilder mit Active Strage
Machen Sie fehlgeschlagene rspec-Tests in Prüfanmerkungen auf github sichtbar
Führen Sie RSpec, Brakeman, Rubocop und Rails Best Practices mit Overcommit aus
Site Map im RSS / Atom-Format mit Ruby on Rails erstellt
Ruby on Rails Lernrekord -2020.10.03
Portfolioerstellung Ruby on Rails
Ruby on Rails Lernrekord -2020.10.04
[Ruby on Rails] Debuck (bindend.pry)
Ruby on Rails Lernrekord -2020.10.05
Ruby on Rails Lernrekord -2020.10.09
Ruby on Rails lernen Rekord-2020.10.07 ②
Führen Sie Rails immer im Docker aus
Ruby on Rails lernen Rekord-2020.10.07 ①
Brechen Sie die Ruby on Rails-Migration ab
Ruby on Rails Lernrekord -2020.10.06
Zusammenfassung der Ruby on Rails-Validierung
Ruby on Rails Grundlegendes Memorandum
Ich habe versucht, das Ruby on Rails-Plugin mit vim-plug zu installieren
[Ruby on Rails] Fügen Sie eine Spalte mit externen Schlüsselbeschränkungen hinzu
[Ruby on Rails] Implementieren Sie die Anmeldefunktion von add_token_to_users mit API
Installieren Sie Ruby mit pacman auf MSYS2
[Ruby on Rails] Leseversuch (: [],: Schlüssel)
Ruby on Rails-Variablen, konstante Zusammenfassung
Installation von Ruby + Rails unter Ubuntu 18.04 (rbenv)
[Ruby on Rails] Paging-Funktion eingeführt
Ich möchte eine Browsing-Funktion mit Ruby on Rails hinzufügen
Erstellen einer Entwicklungsumgebung für Ruby on Rails mit Docker + VSCode (Remote Container)
Grundkenntnisse in Ruby on Rails
Progate Ruby on Rails5 Rückblick
Verwendung von Ruby on Rails
Programmieren mit Ruby (unterwegs)