[DOCKER] [Challenge CircleCI from 0] Apprenez les bases de CircleCI

Contexte

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.

buts finaux

Comprenez ce qu'est CircleCI. Supprimez la base de l'écriture de CircleCI.

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

table des matières

① À propos de CI / CD (2) Raisons du choix de CircleCI-Comparaison d'autres outils ③ Flux brut de tests avec CircleCI ④ À propos de la méthode de description du fichier de paramètres CircleCI

Allons vite.

① À propos de CI / CD

Signification de CI / CD

CI (Continuous Integration) signifie intégration continue, et CD (Continuous Delivery / Deployment) signifie livraison continue ou déploiement continu. Pour être plus précis, il s'agit d'un mécanisme qui "lorsque vous poussez vers un système de gestion de version tel que git, il sera testé automatiquement, et si le test est effacé, il sera déployé automatiquement".

Pourquoi CI / CD attire l'attention

C'est parce que l'idée de «DevOps» s'est récemment étendue au monde de l'ingénierie. «DevOps» est l'idée de briser la barrière entre l'équipe de développement et l'équipe d'exploitation et de faire croître l'entreprise, et CI / CD attire l'attention comme une méthode pour pratiquer «DevOps».

(2) Raisons du choix de CircleCI-Comparaison d'autres outils

Il existe des outils CI / CD bien connus. Comparons-les brièvement et voyons pourquoi CircleCI est choisi.

Jekins Un outil CI / CD de type local typique. Il est open source et possède une excellente extension avec des plug-ins.

CircleCI Outil CI / CD de type saas. Il fonctionne également bien avec GitHub et recommande d'utiliser Docker, qui a connu une croissance explosive ces dernières années. Vous pouvez également vous connecter via ssh.

Travis CI Il s'agit également d'un outil CI / CD de type saas. Sa force est qu'il prend en charge un large éventail de langues et peut introduire CI avec des paramètres simples.

Gitlab L'outil CI de Git, célèbre pour les logiciels de gestion de version. Apparemment, il n'a pas beaucoup de part dans l'industrie, mais il pourrait croître à l'avenir.

Les éléments ci-dessus sont considérés comme les principaux outils célèbres. En ce qui concerne les critères de choix, décidez d'abord s'il s'agit d'un type sur site ou de type saas. Pour le développement personnel, le type saas, qui a un faible coût d'exploitation, est nettement meilleur. S'il s'agit d'un type saas, peu importe celui que vous utilisez, mais personnellement, je choisis CircleCI, qui est actuellement le plus populaire de l'industrie et recommande le docker de la technologie de contenu qui a attiré l'attention ces dernières années. Je pense que c'est le meilleur. (* Bien sûr, si vous utilisez Docker pour l'environnement de développement)

③ Flux brut de tests avec CircleCI

Le flux lui-même est très simple.

  1. Créez un compte circleCI (il est plus facile de se lier à un compte github pour le moment)
  2. Lien avec github après avoir créé un compte
  3. Sélectionnez un référentiel de github
  4. Créez (.circleci / config.yml) dans le répertoire racine du référentiel sélectionné
  5. Ecrire du code pour CircleCi
  6. Appuyez sur git
  7. Lancer le test automatique
  8. Le résultat est reflété dans la demande d'extraction

Une fois que vous avez écrit le code CircleCI, il n'est pas différent du flux de développement habituel utilisant git. Donc je pense que le cou sera la partie description du fichier (.circleci / config.yml).

④ À propos de la méthode de description du fichier de paramètres CircleCI

À propos des fichiers YAML

Tous les paramètres CircleCI sont décrits dans le fichier YAML. Qu'est-ce qu'un fichier YAML? C'est un format qui décrit les données de la même manière que XML et JSON. À propos, YAML est une abréviation pour (yaml n'est pas un langage de balisage). J'ai le sentiment de me définir.

Et la caractéristique de YAML est qu'il est intuitif et facile à comprendre. Il se compose principalement des trois méthodes de description suivantes.

yaml


#① Liste → Arrangement
- 1
- 2
- 3

#② Carte → Hash
name: a
id :  1
text: ccc

#③ Scalaire → Autre que la liste et la carte
true false
null
123

Bien sûr, le fichier réel est un peu plus compliqué car ce qui précède est écrit sur plusieurs lignes. Cependant, il n'y a que trois principes de base, alors gardez cela à l'esprit.

À propos de la structure de base du fichier

Le fichier CircleCI est composé de plusieurs composants. Vérifions un par un.

I. Projet

Bien que cela n'ait rien à voir avec la description du fichier, le référentiel github est traité comme un seul projet dans CircleCI.

Ii. Étape

La plus petite unité d'un fichier. Plus précisément, il s'agit d'une liste de commandes à exécuter par CircleCI. (Bien qu'il s'agisse de la plus petite unité du concept de CircleCI, les étapes ne sont qu'une liste, elles peuvent donc s'étendre sur plusieurs lignes). À propos, il existe deux types d'étapes, l'étape d'exécution et l'étape d'intégration. La première est définie par l'utilisateur et la seconde est une étape spéciale préparée par CircleCI.

Iii. Job

Un groupe d'étapes est appelé un travail.

Ⅳ. Exécuteur

Fait référence à l'environnement de l'étape de travail. Par exemple, s'il s'agit de «Docker Executor», exécutez les étapes dans l'environnement Docker. En plus de Docker, il y a "macOS Executor", "Machine Executor", "windows Executor", etc., et vous pouvez librement définir l'environnement.

Ⅴ. Flux de travail

C'est une règle d'ordre d'exécution des travaux. Fondamentalement, il y a plusieurs travaux dans un fichier et le flux de travail définit l'ordre dans lequel ils sont exécutés. Il peut également être exécuté en parallèle. Les flux de travail ont également des caches, des espaces de travail et des artefacts en tant que mécanismes de persistance des données. Prenons un exemple concret.

Par exemple, supposons que vous ayez un fichier qui est exécuté dans l'ordre "A job-> B job-> C job". Lorsque "Un travail" est terminé, supposons que vous souhaitiez reprendre le contenu de ce "travail A" et effectuer le "travail B". Cette méthode de partage des données du «travail A» au «travail B» est appelée *** espace de travail ***. Ensuite, supposons qu'une erreur se produise dans "tâche C" lors de l'exécution du fichier dans la procédure ci-dessus. Dans un tel cas, il est nécessaire d'exécuter à nouveau à partir de 1 après modification du fichier, c'est-à-dire à partir de "A job". Si "A job" ou "B job" comprend une étape pour lire un fichier lourd, cela prendra du temps. Dans un tel cas, la méthode de reprise du fichier qui a été effectuée la première fois et de partage des données afin que cela puisse être fait en douceur à partir de la deuxième fois est appelée *** cache ***. Et si vous exécutez le fichier comme ci-dessus, de nombreuses données sur le résultat de l'exécution du travail seront générées. Le stockage qui stocke les résultats de l'exécution de ce travail est appelé *** artefact ***. Cela peut être un peu déroutant, mais rappelons-nous.

Ⅵ. Pipeline

En fait, vous pouvez créer plusieurs flux de travail et il existe un pipeline pour les assembler. Fondamentalement, CircleCI ne peut en avoir qu'un (.circleci / config.yml) pour un projet. En d'autres termes, il n'y a qu'un seul pipeline pour un projet, qui est le plus grand concept du fichier qui organise le flux de travail. * À propos, CircleCI implémentera de nouvelles fonctions basées sur le concept de ce pipeline.

ⅶ. Orbs Orbs est un ensemble d'une série de processus tels que des étapes et des tâches qui peuvent être utilisés à divers endroits. Vous pouvez créer des orbes vous-même, mais vous pouvez utiliser ceux publiés dans CircleCI orb Registry.


Cet article sera coupé ici. Dans le prochain article, j'écrirai un fichier spécifique et exécuterai un test automatisé.

Résumé / impression

Fondamentalement, contrairement à Docker, il était facile de comprendre le flux général et les rôles. Cependant, quand il s'agit d'écrire des fichiers à l'avenir, c'est un peu pénible. De plus, CircleCI a un peu de difficulté car il y a peu de matériaux japonais. Je continuerai à faire de mon mieux.

référence

[Livre] "Introduction à la pratique CircleCI ── La vitesse et la qualité de développement apportées par CI / CD Masato Urai (Auteur), Tomoya Otake (Auteur), Hirokuni Kim (Auteur)"

【qiita】 "Je viens de démarrer CircleCI, donc je l'ai résumé d'une manière facile à comprendre"

Recommended Posts

[Challenge CircleCI from 0] Apprenez les bases de CircleCI
[Résumé des livres techniques] Résumé de la lecture "Apprendre Docker à partir des bases"
Surveillance Docker-expliquant les bases des bases-
À propos des bases du développement Android
Les bases de SpringBoot + MyBatis + MySQL
Comprendre les bases de l'enregistrement audio Android
[Challenge CircleCI from 0] Comprendre AWS ECR / ECS
[Ruby] Des bases à la méthode inject
Maintenant, j'ai résumé les bases de RecyclerView
[Challenge Docker from 0] Présentation et conditions de Docker
L'histoire de RxJava souffrant de NoSuchElementException
[jour: 5] J'ai résumé les bases de Java
Retour sur les bases de Java
Trouvez la différence à partir d'un multiple de 10
Qu'est-ce que JSP? ~ Connaissons les bases de JSP !! ~
[Ruby] Résumé des définitions de classe. Maîtrisez les bases.
Le contenu de useBodyEncodingForURI a-t-il changé par rapport à Tomcat8?
J'ai compris les bases de la saisie de caractères
Un jeune ingénieur a appris JUnit à partir des bases
Bases de Ruby
Apprenez le mécanisme rudimentaire et l'utilisation de Gradle 4.4
Apprenez à créer un serveur WEB Introduction au développement d'applications WEB à partir des bases
[Développement SPA avec Rails x Vue] Apprenez les bases de Vue.js (Vue d'ensemble de vue.js, syntaxe du modèle)
ArrayList et le rôle de l'interface vu depuis List
De l'introduction de la conception à la création de la table des utilisateurs
Volume 3 types de Docker Compose considérés à partir de l'objectif
Comment écrire Scala du point de vue de Java
[Pour les débutants] DI ~ Les bases de DI et DI au printemps ~
[Pour les débutants] Comprendre rapidement les bases de Java 8 lambda
À propos de l'utilité des monades dans une perspective orientée objet
Langage Java du point de vue de Kotlin et C #
J'ai résumé les types et les bases des exceptions Java
Extraire un élément spécifique de la liste des objets
[Ruby] Imbrication de classes, héritage et principes de base de soi
Un record d'étude du Spring Framework à partir de zéro
Le monde de Clara-Rules (2)
Jugement du calendrier
Le monde de Clara-Rules (4)
Le monde de Clara-Rules (1)
Le monde de Clara-Rules (3)
Principes de base de l'instruction try-with-resources
Le monde de Clara-Rules (5)
L'idée du tri rapide
L'idée de jQuery
L'histoire de la montée de Spring Boot de la série 1.5 à la série 2.1 part2
J'ai essayé de résumer les bases de kotlin et java
Apprendre des bases Manuel sur l'intelligence artificielle Chapitre 3 Problèmes de fin de chapitre
Accédez à l'abréviation à partir de 5 exemples de listes Java en italique
Une histoire remplie des bases de Spring Boot (résolu)
L'histoire du lancement de données BLOB depuis EXCEL dans DBUnit
Comment obtenir les informations les plus longues de Twitter à partir du 12/12/2016
Apprendre des bases Manuel sur l'intelligence artificielle Chapitre 4 Problèmes de fin de chapitre
De l'habitude de créer des objets de valeur pour une compréhension orientée objet
Agréger le nombre de personnes tous les 10 ans à partir de la liste <Personne>
Apprendre des bases Manuel sur l'intelligence artificielle Chapitre 2 Problèmes de fin de chapitre