Je vise à obtenir un emploi dans une entreprise développée en interne par des personnes inexpérimentées. J'ai décidé d'étudier CircleCI pour créer un bon portfolio.
Le niveau actuel de connaissances est le développement d'applications simples à l'aide de Ruby on rails, la gestion des versions à l'aide de git et le déploiement à l'aide d'heroku. J'espère que cela sera d'une certaine aide pour ceux qui envisagent d'essayer CircleCI à l'avenir au même niveau que leur propre mémorandum.
Faites le test automatisé à chaque fois que vous poussez avec CircleCI. Réussissez également le test automatisé
【Article associé】 [Challenge CircleCI from 0] Apprenez les bases de CircleCI [Challenge CircleCI from 0] Construire un test automatisé (Rails6.0 / mysql8.0 / Rspec) [Challenge CircleCI from 0] Comprendre AWS ECR / ECS [Challenge CircleCI from 0] Déploiement automatique avec CircleCI / AWS (ECR / ECS)
ruby 2.6.6 rails 6.0 db: mysql 8.0 test: rspec
Nous partirons du principe que la coopération entre github et CircleCI est terminée.
Fondamentalement, exécutez les tests rubocop et rspec en conjonction avec github dans circleCI official ou [[circleCI] Rails app Si vous vous référez à ru etc., vous pouvez facilement définir le test automatique. Cependant, afin d'effectuer un déploiement automatique et des paramètres plus complexes à l'avenir, il est nécessaire de décomposer et de comprendre la description du fichier. Regardons le tout d'abord.
yaml:.circleci/config.yml
version: 2.1
emplois: # ---------------------------------------------- ★ emploi
build:
docker: #----------------------------------------------★Executor
- image: circleci/ruby:2.6.6-node-browsers
environment:
RAILS_ENV: 'test'
MYSQL_HOST: 127.0.0.1
MYSQL_USERNAME: 'root'
MYSQL_PASSWORD: ''
MYSQL_PORT: 3306
- image: circleci/mysql:8.0
command: mysqld --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: 'true'
MYSQL_ROOT_HOST: '%'
working_directory: ~/repo
étapes: # --------------------------------------------- ★ étapes
- checkout
- restore_cache:
keys:
- v1-dependencies-{{ checksum "Gemfile.lock" }}
- v1-dependencies-
- run:
name: install dependencies
command: |
bundle install --jobs=4 --retry=3 --path vendor/bundle
- save_cache:
paths:
- ./vendor/bundle
key: v1-dependencies-{{ checksum "Gemfile.lock" }}
- run: mv config/database.yml.ci config/database.yml
- run: bundle exec rake db:create
- run: bundle exec rake db:schema:load
- run:
name: RSpec
command: |
mkdir /tmp/test-results
TEST_FILES="$(circleci tests glob "spec/models/users_spec.rb" | \
circleci tests split --split-by=timings)"
bundle exec rspec \
--format progress \
--out /tmp/test-results/rspec.xml \
--format progress \
$TEST_FILES
- store_test_results:
path: /tmp/test-results
- store_artifacts:
path: /tmp/test-results
destination: test-results
Outre la description détaillée,Article précédent"Étapes","Emplois"et"Exécuteur"mentionnésdans(Exécuteur)Organisons-nous.
-Les étapes sont celles où les «étapes» sont écrites à la ligne 18. Cette fois, il n'y a qu'un seul endroit où l'étape est déclarée, il n'y a donc qu'une seule étape. "Etapes" Ci-dessous se trouve une liste de commandes qui appartiennent toutes à une seule étape. -Les travaux sont déclarés sur la deuxième ligne à partir du haut où «travaux» est écrit. Puisqu'il n'y a qu'une seule description ici, il n'y a qu'un seul travail cette fois. Tout ce qui se trouve sous «emplois» est le contenu du travail. Au fait, le nom du travail est "build"
En d'autres termes, en résumé, "Ce fichier a un travail appelé" build ", ce travail est exécuté dans l'environnement docker et le contenu de l'exécution est l'étape(Un)以下だよ」という意味になります。大まかな構造をみたので、次はUnUn細かく見ていきましょう。
yaml:.circleci/config.yml
version: 2.1
jobs:
build:
docker:
- image: circleci/ruby:2.6.6-node-browsers
environment:
RAILS_ENV: 'test'
MYSQL_HOST: 127.0.0.1
MYSQL_USERNAME: 'root'
MYSQL_PASSWORD: ''
MYSQL_PORT: 3306
- image: circleci/mysql:8.0
command: mysqld --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: 'true'
MYSQL_ROOT_HOST: '%'
working_directory: ~/repo
-version est la version de CircleCI. 2 ou 2 si vous souhaitez régler à partir de maintenant.Je pense que 1 est bien. -jobs est une déclaration que nous allons écrire le contenu du job. La construction sur la ligne suivante sera le nom du travail. Au fait, s'il n'y a qu'un seul travail, le nom du travail doit être construit, alors soyez prudent. -docker est "Executor(Exécuteur)Déclare de créer un environnement docker et d'exécuter des travaux. -La première image est une image rubis. "Circleci" devant rubis/"" Fait référence à l'image préparée par CircleCI, appelée image de commodité. -environnement Vous trouverez ci-dessous les paramètres de l'image rubis. "DES RAILS_ENV: 'test'Indique qu'il s'agit d'un environnement de test et "MYSQL"HOST: 127.0.0."1" signifie se connecter à MYSQL dans le même local. "MON SQL_NOM D'UTILISATEUR "・" MYSQL ""PASSWORD" est le paramètre de MYSQL. Cela doit également être inclus dans le fichier de configuration de test. Je parlerai de ce fichier plus tard. "MON SQL_PORT:"3306" est le numéro de port de MYSQL. -Ensuite, il y a une autre image, qui crée une image de MYSQL. La configuration est la même et l'environnement de l'image est défini sous environnement. Au fait, "commande"~Modifie le plug-in d'authentification pour mysql. mysql8.Veuillez noter qu'il est indispensable lors de l'utilisation de o ou version ultérieure. "MON SQL_ALLOW_EMPTY_PASSWORD: 'true'Vous permet de vous connecter à MYSQL sans mot de passe. "MON SQL_ROOT_HOST: '%'Indique qu'il est accessible depuis n'importe quel hôte.
Regardons la seconde moitié.
###② steps~Endroit
yaml:.circleci/config.yml
steps:
- checkout
- restore_cache:
keys:
- v1-dependencies-{{ checksum "Gemfile.lock" }}
- v1-dependencies-
- run:
name: install dependencies
command: |
bundle install --jobs=4 --retry=3 --path vendor/bundle
- save_cache:
paths:
- ./vendor/bundle
key: v1-dependencies-{{ checksum "Gemfile.lock" }}
- run: mv config/database.yml.ci config/database.yml
- run: bundle exec rake db:create
- run: bundle exec rake db:schema:load
- run:
name: RSpec
command: |
mkdir /tmp/test-results
TEST_FILES="$(circleci tests glob "spec/models/users_spec.rb" | \
circleci tests split --split-by=timings)"
bundle exec rspec \
--format progress \
--out /tmp/test-results/rspec.xml \
--format progress \
$TEST_FILES
- store_test_results:
path: /tmp/test-results
- store_artifacts:
path: /tmp/test-results
destination: test-results
-Déclare écrire une liste de commandes d'étapes en «étapes».
###③database.yml.ci (fichier sur l'hôte) Comme je le vois souvent, vérifions également le fichier de configuration de la base de données sur CircleCI.
config
test: &default
adapter: mysql2
encoding: utf8
pool: 5
username: <%= ENV.fetch("MYSQL_USERNAME") %>
password: <%= ENV.fetch("MYSQL_PASSWORD") %>
host: <%= ENV.fetch("MYSQL_HOST") %>
port: <%= ENV.fetch("MYSQL_PORT") %>
database: ci_test
C'est la base de données habituelle.C'est le même que le fichier yml, donc je pense qu'il est presque inutile d'expliquer. Au fait, nous utilisons des variables d'environnement.
C'est la fin de l'explication du fichier de paramètres. Après cela, le test est exécuté à chaque fois que vous git push. Voici l'écran d'exécution du test. Assurez-vous que tout est réussi. (* Pour la deuxième base de données à partir du haut, il n'y a pas de problème tant que false n'est pas affiché. Le conteneur de base de données démarrera normalement et sera marqué comme terminé)
Je pense que la marque de fin de test automatique sera affichée sur la demande de tirage de github comme indiqué ci-dessous.
#Résumé / impression La formule CircleCI étant compétente, la formule résout la plupart des questions. Il semble facile d'introduire des tests automatisés. Cependant, cela semble un peu difficile pour le déploiement automatique, je voudrais donc contester tout en passant en revue les connaissances d'AWS et de Docker.
#référence [Livre] "Introduction à la pratique CircleCI ──CI/La vitesse de développement et la qualité apportées par CD Masato Urai(Écrit par),Tomoya Otake(Écrit par),Kim pays occidental(Écrit par) 』
【qiita】 『Je viens de démarrer CircleCI, donc je l'ai résumé d'une manière facile à comprendre.』 『[Circle CI] Présentation de l'application Rails (à propos du fichier de configuration)』
Recommended Posts