[Challenge CircleCI von 0] Erstellen Sie einen automatisierten Test (Rails6.0, mysql8.0, Rspec)

Hintergrund

Ich möchte einen Job in einem eigens entwickelten Unternehmen von unerfahrenen bekommen. Ich habe mich entschlossen, CircleCI zu studieren, um ein gutes Portfolio zu erstellen.

Der aktuelle Wissensstand ist die einfache Anwendungsentwicklung mit Ruby on Rails, die Versionsverwaltung mit git und die Bereitstellung mit heroku. Ich hoffe, es wird denjenigen helfen, die darüber nachdenken, CircleCI in Zukunft auf der gleichen Ebene wie ihr eigenes Memorandum auszuprobieren.

Endziele

Führen Sie den automatisierten Testlauf jedes Mal durch, wenn Sie mit CircleCI Push ausführen. Machen Sie auch automatisierte Tests erfolgreich

【Verwandter Artikel】 [CircleCI von 0 herausfordern] Lernen Sie die Grundlagen von CircleCI [CircleCI von 0 herausfordern] Erstellen Sie einen automatisierten Test (Rails6.0 / mysql8.0 / Rspec) [CircleCI von 0 herausfordern] AWS ECR / ECS verstehen [CircleCI von 0 herausfordern] Automatisch mit CircleCI / AWS (ECR / ECS) bereitstellen

Umgebung

ruby 2.6.6 rails 6.0 db: mysql 8.0 test: rspec

Erstellen Sie automatisierte Tests (Rails6.0, mysql8.0, Rspec)

Wir gehen davon aus, dass die Zusammenarbeit zwischen github und CircleCI abgeschlossen ist.

Grundsätzlich circleCI offiziell oder [[circleCI] Rails App, um Rubocop- und Rspec-Tests in Zusammenarbeit mit Github durchzuführen Wenn Sie auf ru usw. verweisen, können Sie den automatischen Test einfach einstellen. Um jedoch in Zukunft eine automatische Bereitstellung und kompliziertere Einstellungen durchführen zu können, muss die Beschreibung der Datei zerlegt und verstanden werden. Schauen wir uns zuerst das Ganze an.

Ganze Datei

yaml:.circleci/config.yml


version: 2.1
 Jobs: # ---------------------------------------------- ★ Job
  build:
    docker:                    #----------------------------------------------★Executor
      - image: circleci/ruby:2.6.6-node-browsers
        environment:
          RAILS_ENV: 'test'
          MYSQL_HOST: 127.0.0.1
          MYSQL_USERNAME: 'root'
          MYSQL_PASSWORD: ''
          MYSQL_PORT: 3306
      - image: circleci/mysql:8.0
        command: mysqld --default-authentication-plugin=mysql_native_password
        environment:
          MYSQL_ALLOW_EMPTY_PASSWORD: 'true'
          MYSQL_ROOT_HOST: '%'
    working_directory: ~/repo
 Schritte: # ----------------------------------------- ★ Schritte
      - checkout
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "Gemfile.lock" }}
            - v1-dependencies-
      - run:
          name: install dependencies
          command: |
            bundle install --jobs=4 --retry=3 --path vendor/bundle
      - save_cache:
          paths:
          - ./vendor/bundle
          key: v1-dependencies-{{ checksum "Gemfile.lock" }}
      - run: mv config/database.yml.ci config/database.yml
      - run: bundle exec rake db:create
      - run: bundle exec rake db:schema:load
      - run:
          name: RSpec

          command: |
            mkdir /tmp/test-results
            TEST_FILES="$(circleci tests glob "spec/models/users_spec.rb" | \
              circleci tests split --split-by=timings)"
            bundle exec rspec \
              --format progress \
              --out /tmp/test-results/rspec.xml \
              --format progress \
              $TEST_FILES
      - store_test_results:
          path: /tmp/test-results
      - store_artifacts:
          path: /tmp/test-results
          destination: test-results

Abgesehen von der detaillierten Beschreibung,Vorheriger Artikel"Schritte","Jobs"und"Executor"erwähntin(Testamentsvollstrecker)Lassen Sie uns über organisieren.

-In Schritten steht "Schritte" in Zeile 18. Dieses Mal gibt es nur einen Ort, an dem der Schritt deklariert wird, also gibt es nur einen Schritt. "Schritte" Nachfolgend finden Sie eine Liste der Befehle, die alle zu einem Schritt gehören. -Jobs werden in der zweiten Zeile von oben deklariert, in der "Jobs" geschrieben ist. Da es hier nur eine Beschreibung gibt, gibt es diesmal nur einen Job. Alles unter "Jobs" ist der Inhalt des Jobs. Der Jobname lautet übrigens "build"

Mit anderen Worten, zusammenfassend: "Diese Datei hat einen Job namens" Build ", dieser Job wird in der Docker-Umgebung ausgeführt und der Ausführungsinhalt ist Schritt(Einer)以下だよ」という意味になります。大まかな構造をみたので、次はEinerEiner細かく見ていきましょう。

① version~Executor Teil

yaml:.circleci/config.yml


version: 2.1
jobs:                          
  build:
    docker:                   
      - image: circleci/ruby:2.6.6-node-browsers
        environment:
          RAILS_ENV: 'test'
          MYSQL_HOST: 127.0.0.1
          MYSQL_USERNAME: 'root'
          MYSQL_PASSWORD: ''
          MYSQL_PORT: 3306
      - image: circleci/mysql:8.0
        command: mysqld --default-authentication-plugin=mysql_native_password
        environment:
          MYSQL_ALLOW_EMPTY_PASSWORD: 'true'
          MYSQL_ROOT_HOST: '%'
    working_directory: ~/repo

-version ist die Version von CircleCI. 2 oder 2, wenn Sie von nun an einstellen möchten.Ich denke 1 ist in Ordnung. -jobs ist eine Erklärung, dass wir den Inhalt des Jobs schreiben werden. Der Build in der nächsten Zeile ist der Name des Jobs. Übrigens, wenn es nur einen Job gibt, muss der Jobname erstellt werden, seien Sie also vorsichtig. -Docker ist "Executor(Testamentsvollstrecker)Erklärt, eine Docker-Umgebung zu erstellen und Jobs auszuführen. -Das erste Bild ist ein Rubinbild. "Circleci" vor Rubin/"" Bezieht sich auf das von CircleCI erstellte Bild, das als Convenience-Bild bezeichnet wird. -Umgebung Nachfolgend sind die Einstellungen für das Rubinbild aufgeführt. "SCHIENEN_ENV: 'test'Zeigt an, dass es sich um eine Testumgebung handelt, und "MYSQL"HOST: 127.0.0."1" bedeutet, dass eine Verbindung zu MYSQL im selben lokalen Bereich hergestellt wird. "MEIN SQL_BENUTZERNAME "・" MYSQL ""PASSWORD" ist die Einstellung von MYSQL. Dies muss auch in der Testkonfigurationsdatei enthalten sein. Ich werde später über diese Datei sprechen. "MEIN SQL_PORT:"3306" ist die Portnummer von MYSQL. -Als nächstes gibt es ein anderes Bild, das ein Bild von MYSQL erstellt. Die Konfiguration ist dieselbe und die Image-Umgebung wird unter Umgebung festgelegt. Übrigens "Befehl"~Ändert das Authentifizierungs-Plug-In für MySQL. mysql8.Bitte beachten Sie, dass dies bei Verwendung von o oder höher unverzichtbar ist. "MEIN SQL_ALLOW_EMPTY_PASSWORD: 'true'Ermöglicht die Anmeldung bei MYSQL ohne Kennwort. "MEIN SQL_ROOT_HOST: '%'Gibt an, dass von jedem Host aus darauf zugegriffen werden kann.

Schauen wir uns die zweite Hälfte an.

###② steps~Platz

yaml:.circleci/config.yml


    steps:                    
      - checkout
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "Gemfile.lock" }}
            - v1-dependencies-
      - run:
          name: install dependencies
          command: |
            bundle install --jobs=4 --retry=3 --path vendor/bundle
      - save_cache:
          paths:
          - ./vendor/bundle
          key: v1-dependencies-{{ checksum "Gemfile.lock" }}
      - run: mv config/database.yml.ci config/database.yml
      - run: bundle exec rake db:create
      - run: bundle exec rake db:schema:load
      - run:
          name: RSpec

          command: |
            mkdir /tmp/test-results
            TEST_FILES="$(circleci tests glob "spec/models/users_spec.rb" | \
              circleci tests split --split-by=timings)"
            bundle exec rspec \
              --format progress \
              --out /tmp/test-results/rspec.xml \
              --format progress \
              $TEST_FILES
      - store_test_results:
          path: /tmp/test-results
      - store_artifacts:
          path: /tmp/test-results
          destination: test-results

-Erklärt, eine Befehlsliste mit Schritten in "Schritte" zu schreiben.

###③database.yml.ci (Datei auf dem Host) Wie ich oft sehe, überprüfen wir auch die Datenbankkonfigurationsdatei auf CircleCI.

config


test: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: <%= ENV.fetch("MYSQL_USERNAME") %>
  password: <%= ENV.fetch("MYSQL_PASSWORD") %>
  host: <%= ENV.fetch("MYSQL_HOST") %>
  port: <%= ENV.fetch("MYSQL_PORT") %>
  database: ci_test

Dies ist die übliche Datenbank.Es ist das gleiche wie die yml-Datei, daher denke ich, dass es fast unnötig ist, dies zu erklären. Übrigens verwenden wir Umgebungsvariablen.

Dies ist das Ende der Erläuterung der Einstellungsdatei. Danach wird der Test jedes Mal ausgeführt, wenn Sie einen Push ausführen. Das Folgende ist der Testausführungsbildschirm. Stellen Sie sicher, dass alles erfolgreich ist. (* Für die zweite Datenbank von oben gibt es kein Problem, solange false nicht angezeigt wird. Der Datenbankcontainer wird normal gestartet und als fertig markiert.)

Screenshot 2020-10-23 10.27.33.png

Ich denke, dass die automatische Testabschlussmarke auf der Pull-Anfrage von Github angezeigt wird, wie unten gezeigt. Screenshot 2020-10-23 10.31.32.png

#Zusammenfassung / Eindruck Da die CircleCI-Formel kompetent war, löste die Formel im Grunde die meisten Fragen. Es scheint einfach zu sein, automatisierte Tests einzuführen. Die automatische Bereitstellung scheint jedoch etwas schwierig zu sein, daher möchte ich beim Überprüfen der Kenntnisse von AWS und Docker eine Herausforderung darstellen.

#Referenz [Buch] "Einführung in die CircleCI-Praxis ──CI/Erzielung von Entwicklungsgeschwindigkeit und -qualität durch CD Masato Urai(Geschrieben von),Tomoya Otake(Geschrieben von),Kim Westliches Land(Geschrieben von) 』

【qiita】 『Ich habe gerade CircleCI gestartet und es daher leicht verständlich zusammengefasst.』 『[Circle CI] Einführung in die Rails-App (Informationen zum Einstellen der Datei)

Recommended Posts

[Challenge CircleCI von 0] Erstellen Sie einen automatisierten Test (Rails6.0, mysql8.0, Rspec)
[Herausforderung CircleCI von 0] Lernen Sie die Grundlagen von CircleCI
[Challenge CircleCI von 0] Erstellen Sie einen automatisierten Test (Rails6.0, mysql8.0, Rspec)
[Schienen] Test mit RSpec
[Schienen] Von der Testvorbereitung zum Modelleinheitentest [RSpec]
[Rails] Testcode mit Rspec
[Rails] Informationen zum Rspec-Antworttest
[Schienen] Machen wir einen Unit-Test mit Rspec!
[Circle CI] Ich war süchtig nach dem automatischen Test von Circle CI (Rails + MySQL) [Memo]
[Herausforderung CircleCI von 0] Lernen Sie die Grundlagen von CircleCI
[Ruby on Rails] Test mit RSpec anzeigen
[Ruby on Rails] Controller-Test mit RSpec
[Ruby on Rails] Modelltest mit RSpec
[Ruby On Rails] Testfehler mit RSpec MySQL-Client ist nicht verbunden