[RAILS] Exécutez Rubocop et RSpec sur CircleCI et déployez-le sur ECS

Que faire dans cet article

--Tests automatiques avec Rubocop et RSpec dans CircleCI --Construction d'un pipeline CI / CD à l'aide des orbes CircleCI

Ne pas manipuler

Formulaire complété de config.yml

Je renvoie à la page officielle suivante 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
    #étapes Conteneur principal commun
    image: circleci/ruby:2.6.4-node-browsers
    #Variables d'environnement du conteneur principal
    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:
      #Consultez le code source du répertoire de travail
      - checkout
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "Gemfile.lock" }}
            - v1-dependencies-
      #dépendance rubis
      - 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
      #Attente DB/installer
      - 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
      #Automatisation Rubocop
      - run:
          name: start RuboCop
          command: bundle exec rubocop
      #Automatisation RSpec
      - 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
      #Enregistrer les rapports et les résultats
      - 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

  #Déployer des rails à l'aide d'ECR et d'ECS
  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}"

  #Déployer nginx
  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}"

Deux processus d'exécution sont définis dans les travaux et l'exécution parallèle de deux travaux est définie dans le workflow.

Test automatisé

Exécutez RSpec

Les références officielles suivantes sont utiles. https://circleci.com/docs/ja/2.0/language-ruby/

À ce stade, vous devez faire attention si vous utilisez MySQL 8 ou supérieur. Il semble que la méthode d'authentification a changé depuis la version 8.0, nous allons donc répondre en ajoutant ce qui suit.

image: circleci/mysql:8.0.19
    command: [--default-authentication-plugin=mysql_native_password] #ajouter à

Construire et déployer à l'aide d'orbes

Vous pouvez déployer sur ECS en lisant la référence officielle ci-dessous https://circleci.com/docs/ja/2.0/ecs-ecr/

Ce à quoi vous devez faire attention ici est de vous assurer que les variables d'environnement définies dans CircleCI correspondent fermement. Vous pouvez créer un pipeline CI / CD tant que les variables d'environnement sont définies correctement.

Refactoriser config.yml

Les pièces utilisées à plusieurs reprises sont remaniées pour améliorer la lisibilité.

&(ancre)Défini dans *(alias)Exécuter ce qui est défini dans

prime

Installez CircleCI CLI à partir de la formule ci-dessous. https://circleci.com/docs/ja/2.0/local-cli/

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

Vous pouvez vérifier si le fichier de configuration est valide avec cette CLI CircleCI.

$ circleci config validate

Merci d'avoir lu l'article

CircleCI a également un document japonais, comment écrire un fichier de paramètres, En outre, il existe une description détaillée des paramètres d'exécution des tests tels que RSpec.

J'ai écrit cet article en ressentant la gratitude pour la documentation japonaise.

référence

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

Exécutez Rubocop et RSpec sur CircleCI et déployez-le sur ECS
Exécutez SystemSpec (RSpec) et Rubocop sur CircleCI
Activer le cache de construction de Docker dans GitHub Action et déployer sur Amazon ECS
Comment déployer avec heroku
Jusqu'à ce que vous exécutiez Quarkus et que vous exécutiez l'image docker sur Amazon ECS
Comment exécuter React et Rails sur le même serveur
Comment déployer Laravel sur CentOS 7
Comment installer et utiliser Composer sur une instance ECS sur Ubuntu 16.04
Étapes pour exécuter Docker sur Mac
[Core ML] Convertissez Cycle GAN en Core ML et exécutez-le sur iOS
Comment déployer Bootstrap sur Rails
Pour exécuter JavaFX sur Docker
Remarques sur la migration de CircleCI 1.0 vers 2.0
Installez Ubuntu20.04 sur RaspberryPi 4 et compilez Kubernetes pour exécuter le conteneur
Déployer des rails sur Docker vers heroku
Installez Webpacker et Yarn pour exécuter Rails
Déployer sur Heroku [Ruby on Rails] Débutant
Déployer sur Ruby on Rails Elastic beanstalk (déploiement EB)
Points à examiner lorsque Rubocop est lent à s'exécuter
Paramètres pour éviter les restrictions Docker Hub dans CircleCI
Déployer sur Heroku (pour édition après la deuxième fois)
Déployer des rails sur ECS Fargate avec AWS Copilot
Compilez et exécutez Java sur la ligne de commande
Comment exécuter NullpoMino 7.5.0 sur la version 64 bits d'Ubuntu 20.04.1
Je ne pouvais pas exécuter le traitement avec jdk-9, donc je suis revenu à jdk-1.8 et cela a fonctionné sur Eclipse OXYGEN
[Partie 2] Testez et déployez automatiquement les services WEB créés avec Rails + Nuxt + MySQL + Docker avec ECS / ECR / CircleCI pour terraformer