--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