--Automatische Tests mit Rubocop und RSpec in CircleCI
--CircleCI Grundeinstellungen
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.
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
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.
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
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
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.
https://patorash.hatenablog.com/entry/2018/06/24/122210
https://circleci.com/docs/ja/2.0/configuration-reference/#requires