[RAILS] Führen Sie Rubocop und RSpec auf CircleCI aus und stellen Sie es in ECS bereit

Was ist in diesem Artikel zu tun?

--Automatische Tests mit Rubocop und RSpec in CircleCI

Nicht handhaben

--CircleCI Grundeinstellungen

Ausgefüllte Form von config.yml

Ich verweise auf die folgende offizielle Seite https://circleci.com/docs/ja/2.0/configuration-reference/#requires

version: 2.1

orbs:
  aws-ecr: circleci/[email protected]
  aws-ecs: circleci/[email protected]

references:
  defaults: &defaults
    working_directory: ~/myqpp

  ruby-docker-image: &ruby-docker-image
    #Schritte Gemeinsamer Primärcontainer
    image: circleci/ruby:2.6.4-node-browsers
    #Umgebungsvariablen des Primärcontainers
    environment:
      RAILS_ENV: test
      MYSQL_HOST: 127.0.0.1
      MYSQL_USERNAME: "db_name"
      MYSQL_PASSWORD: ""
      MYSQL_PORT: 3306

  mysql-docker-image: &mysql-docker-image
    image: circleci/mysql:8.0.19
    command: [--default-authentication-plugin=mysql_native_password]
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: true
      MYSQL_ROOT_HOST: "%"

jobs:
  checkout_code:
    <<: *defaults
    docker:
      - *ruby-docker-image
      - *mysql-docker-image
    steps:
      - checkout
      - save_cache:
          key: v1-repo-{{ .Environment.CIRCLE_SHA1 }}
          paths:
            - ~/project

  test:
    <<: *defaults
    docker:
      - *ruby-docker-image
      - *mysql-docker-image
    steps:
      #Überprüfen Sie den Quellcode zum Arbeitsverzeichnis
      - checkout
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "Gemfile.lock" }}
            - v1-dependencies-
      #Rubinabhängigkeit
      - run: gem install bundler -v 2.1.4
      - run: bundle install --jobs=4 --retry=3 --path vendor/bundle
      - save_cache:
          key: vi-dependencies-{{ checksum "Gemfile.lock" }}
          paths:
            - ./vendor/bundle
      #DB warten/installieren
      - run: mv -f ./config/database.yml.ci ./config/database.yml
      - run: dockerize -wait tcp://127.0.0.1:3306 -timeout 120s
      - run: bundle exec rails db:create db:schema:load --trace
      #Rubocop-Automatisierung
      - run:
          name: start RuboCop
          command: bundle exec rubocop
      #RSpec-Automatisierung
      - run:
          name: start RSpec
          command: |
            mkdir /tmp/test-reports
            TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | \
              circleci tests split --split-by=timings)"
            bundle exec rspec \
              --format progress \
              --format RspecJunitFormatter \
              --out /tmp/test-results/rspec.xml \
              --format progress \
              $TEST_FILES
      #Speichern Sie Berichte und Ergebnisse
      - store_artifacts:
          path: /tmp/test-reports
          destination: tr1
      - store_test_results:
          path: /tmp/test-reports

workflows:
  version: 2.1
  test_code:
    jobs:
      - checkout_code
      - test:
          requires:
            - checkout_code

  #Stellen Sie Rails mithilfe von ECR und ECS bereit
  build-and-deploy-rails:
    jobs:
      - aws-ecr/build-and-push-image:
          filters:
            branches:
              only: master
          account-url: AWS_ECR_ACCOUNT_URL
          region: AWS_REGION
          aws-access-key-id: AWS_ACCESS_KEY_ID
          aws-secret-access-key: AWS_SECRET_ACCESS_KEY
          extra-build-args: "--build-arg RAILS_MASTER_KEY=${RAILS_MASTER_KEY}"
          create-repo: true
          dockerfile: ./Dockerfile
          repo: "${AWS_RESOURCE_NAME_PREFIX_WEB}"
          tag: "${CIRCLE_SHA1}"
      - aws-ecs/deploy-service-update:
          requires:
            - aws-ecr/build-and-push-image
          family: "${ECS_TASK}"
          cluster-name: "${ECS_ARN}"
          service-name: "${ECS_SERVICE}"
          container-image-name-updates: "container=${AWS_RESOURCE_NAME_PREFIX_WEB},tag=${CIRCLE_SHA1}"

  #Stellen Sie nginx bereit
  build-and-deploy-nginx:
    jobs:
      - aws-ecr/build-and-push-image:
          filters:
            branches:
              only: master
          account-url: AWS_ECR_ACCOUNT_URL
          region: AWS_REGION
          aws-access-key-id: AWS_ACCESS_KEY_ID
          aws-secret-access-key: AWS_SECRET_ACCESS_KEY
          create-repo: true
          dockerfile: ./nginx/Dockerfile
          repo: "${AWS_RESOURCE_NAME_PREFIX_NGINX}"
          tag: "${CIRCLE_SHA1}"
      - aws-ecs/deploy-service-update:
          requires:
            - aws-ecr/build-and-push-image
          family: "${ECS_TASK}"
          cluster-name: "${ECS_ARN}"
          service-name: "${ECS_SERVICE}"
          container-image-name-updates: "container=${AWS_RESOURCE_NAME_PREFIX_NGINX},tag=${CIRCLE_SHA1}"

In Jobs werden zwei Ausführungsprozesse festgelegt, und im Workflow wird die parallele Ausführung von zwei Jobs definiert.

Automatisierter Test

Führen Sie RSpec aus

Die folgenden offiziellen Referenzen sind nützlich. https://circleci.com/docs/ja/2.0/language-ruby/

Zu diesem Zeitpunkt müssen Sie vorsichtig sein, wenn Sie MySQL 8 oder höher verwenden. Es scheint, dass sich die Authentifizierungsmethode seit 8.0 geändert hat, daher werden wir Folgendes hinzufügen.

image: circleci/mysql:8.0.19
    command: [--default-authentication-plugin=mysql_native_password] #hinzufügen

Erstellen und Bereitstellen mit Orbs

Sie können ECS bereitstellen, indem Sie die unten stehende offizielle Referenz lesen https://circleci.com/docs/ja/2.0/ecs-ecr/

Hier sollten Sie darauf achten, dass die in CircleCI festgelegten Umgebungsvariablen fest übereinstimmen. Sie können eine CI / CD-Pipeline erstellen, solange die Umgebungsvariablen korrekt festgelegt sind.

Refactor config.yml

Die Teile, die wiederholt verwendet werden, wurden überarbeitet, um die Lesbarkeit zu verbessern.

&(Anker)Definiert in *(alias)Führen Sie aus, was in definiert ist

Bonus

Installieren Sie CircleCI CLI über die folgende Formel. https://circleci.com/docs/ja/2.0/local-cli/

(Mac/Für Linux)
curl -fLSs https://circle.ci/cli | bash

Mit dieser CircleCI-CLI können Sie überprüfen, ob die Konfigurationsdatei gültig ist.

$ circleci config validate

Vielen Dank für das Lesen des Artikels

CircleCI hat auch ein japanisches Dokument, wie man eine Einstellungsdatei schreibt, Darüber hinaus finden Sie eine ausführliche Beschreibung der Einstellungen für die Testausführung, z. B. RSpec.

Ich habe diesen Artikel geschrieben und war dankbar, dass das japanische Dokument vorbereitet wurde.

Referenz

https://discuss.circleci.com/t/solved-mysql-8-0-without-mysql2-authentication-plugin-caching-sha2-password-cannot-be-loaded/25791

https://patorash.hatenablog.com/entry/2018/06/24/122210

https://circleci.com/docs/ja/2.0/configuration-reference/#requires

https://circleci.com/docs/ja/2.0/workflows/

Recommended Posts

Führen Sie Rubocop und RSpec auf CircleCI aus und stellen Sie es in ECS bereit
Führen Sie SystemSpec (RSpec) und Rubocop auf CircleCI aus
Aktivieren Sie den Build-Cache von Docker in GitHub Action und stellen Sie ihn auf Amazon ECS bereit
Wie man mit Heroku einsetzt
Bis Sie Quarkus ausführen und Docker-Image auf Amazon ECS ausführen
So führen Sie React und Rails auf demselben Server aus
So stellen Sie Laravel für CentOS 7 bereit
So installieren und verwenden Sie Composer auf einer ECS-Instanz unter Ubuntu 16.04
Schritte zum Ausführen von Docker auf einem Mac
[Core ML] Konvertieren Sie Cycle GAN in Core ML und führen Sie es unter iOS aus
So stellen Sie Bootstrap auf Rails bereit
So führen Sie JavaFX unter Docker aus
Hinweise zur Migration von CircleCI 1.0 auf 2.0
Installieren Sie Ubuntu20.04 auf RaspberryPi 4 und erstellen Sie Kubernetes, um den Container auszuführen
Stellen Sie Rails on Docker für Heroku bereit
Installieren Sie Webpacker und Yarn, um Rails auszuführen
Bereitstellen für Heroku [Ruby on Rails] Anfänger
Bereitstellung auf Ruby on Rails Elastic Beanstalk (EB-Bereitstellung)
Zu überprüfende Punkte, wenn Rubocop nur langsam ausgeführt wird
Einstellungen zur Vermeidung von Docker Hub-Einschränkungen in CircleCI
In Heroku bereitstellen (zur Bearbeitung nach dem zweiten Mal)
Stellen Sie Rails mit AWS Copilot für ECS Fargate bereit
Kompilieren Sie Java und führen Sie es in der Befehlszeile aus
So führen Sie NullpoMino 7.5.0 unter Ubuntu 20.04.1 64-Bit-Version aus
Ich konnte die Verarbeitung mit jdk-9 nicht ausführen, daher kehrte ich zu jdk-1.8 zurück und es funktionierte unter Eclipse OXYGEN
[Teil 2] Testen und Bereitstellen von WEB-Diensten, die mit Rails + Nuxt + MySQL + Docker mit ECS / ECR / CircleCI erstellt wurden, automatisch für Terraform