--Tests automatiques avec Rubocop et RSpec dans CircleCI --Construction d'un pipeline CI / CD à l'aide des orbes CircleCI
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.
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 à
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.
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
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
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.
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