[JAVA] Création d'un flux de test sur CircleCI à l'aide de Jib

TL;DR

--Une brève introduction de Jib publiée par Google - https://github.com/GoogleContainerTools/jib --Utilisez Jib et CircleCI pour créer un flux afin de pousser une image Docker testée par une boîte noire vers ECR (Amazon EC2 Container Registry).

Qu'est-ce que Jib

Pour transformer une application Java en conteneur Docker avec Docker, vous devez effectuer des étapes telles que la création de Java, la préparation d'un Dockerfile et l'installation de Docker. Jib est un OSS qui peut exécuter tous ces processus gênants avec une seule commande. Publié sous forme de plug-in Maven et Gradle.

Essayez d'utiliser Jib selon le manuel.

Ajout de la description suivante à build.gradle

plugins {
  id 'com.google.cloud.tools.jib' version '0.10.1'
}

Après l'écriture, exécutez la commande comme suit selon le manuel

gradle jib --image=Nom de l'image que vous souhaitez générer

En faisant uniquement cela, une image Docker sera générée et poussée vers Dockerhub. Vous n'avez même pas besoin d'un démon Docker, vous n'avez donc pas besoin de Docker dans votre environnement. ** Fonctionne avec Gradle. Cependant, si vous l'exécutez dans un environnement sans Docker, vous pouvez vous authentifier sur Dockerhub avec juste la description ci-dessus. Pour fonctionner sans Docker localement, vous devez configurer l'authentification dans bug.gradle. Si vous avez un Docker localement, vous pouvez le pousser sans écrire les paramètres dans build.gradle si vous exécutez la connexion Docker à l'avance et passez l'authentification.

Vous pouvez également créer une image Docker localement. Si cela arrive

gradle jibDockerBuild --image=Nom de l'image que vous souhaitez générer

Il est également possible de le générer sur le Docker local en faisant.

Ce que je voulais faire

Jib pousse même l'image vers le référentiel Docker, ce qui facilite la création manuelle de l'image du conteneur à partir de Docker. Profitant du fait qu'il peut être facilement conteneurisé sans préparer un Dockerfile, je vais essayer de l'intégrer dans le flux CI. Un test de boîte noire est effectué sur l'image Docker générée par Jib, et s'il y a un problème, elle est poussée vers ECR, et s'il y a un problème, une alerte est donnée sans l'envoyer à ECR.

Flux d'automatisation

  1. Modifiez le code et appuyez sur GitHub. CircleCI fonctionne
  2. Exécutez un test de boîte blanche sur CircleCI
  3. Exécutez Jib et générez une image Docker dans Docker sur CircleCI
  4. Lancez le conteneur à partir de l'image générée et exécutez le test de la boîte noire
  5. Si tout ce qui précède est correct, utilisez la flèche pour pousser vers ECR. Avertir Slack en cas de problème

1. Modifiez le code et appuyez sur GitHub. CircleCI fonctionne

Tout d'abord, intégrons votre référentiel GitHub à CircleCI. Lier GitHub et CircleCI Prêt si vous coopérez en référence à

2. Exécutez le test de la boîte blanche

C'est une partie de base, donc je vais l'omettre.

3. Exécutez Jib et générez une image Docker dans Docker sur CircleCI

Écrivez la description suivante dans build.gradle et exécutez la commande pour créer une image dans le Docker local.

build.gradle


jib {
  from {
    //Image de base
    image = 'circleci/java'
  }
  to {
    image = 'Dépôt ECR à pousser'
  }
}
gradle jibDockerBuild

4. Lancez le conteneur à partir de l'image générée et exécutez le test de la boîte noire

Lancez le conteneur à partir de l'image Docker et effectuez un test de boîte noire, mais il y a quelques mises en garde. Étant donné que le Docker sur CircleCI n'est pas sur l'hôte CircleCI, même si vous essayez d'y accéder à partir de l'hôte lancé, vous ne pouvez pas.

Prenons le cas du lancement d'un conteneur Nginx sur CircleCI à titre d'exemple.

Exemple dans Nginx


docker run -d -p 8080:80 nginx
curl localhost:8080
curl: (7) Failed to connect to localhost port 8080: Connection refused

Par conséquent, préparez une image Docker à tester par rapport au conteneur Docker et testez-la. En bref, il s'agit simplement d'une image d'envoi d'une requête à une adresse IP spécifique (dans ce cas, l'IP du conteneur à tester) et de la tester. Faisons cela rapidement avec jib et exécutons-le.

yml:.circle/config.yml


      - run:
          name: create test image
          command: cd ./test ; ../gradlew jibDockerBuild
      - run:
          name: blackbox test
          command:image pour exécuter le test d'exécution du docker

5. 5. Si tout ce qui précède est correct, utilisez la flèche pour pousser vers ECR. Avertir Slack en cas de problème

Lorsque vous passez de Jib à ECR, utilisez amazon-ecr-credential-helper. Par conséquent, vous devez ajouter amazon-ecr-credential-helper à votre PATH avant de l'exécuter.

yml:.circle/config.yml


      - run:
          name: download go
          command: wget -O - "https://redirector.gvt1.com/edgedl/go/go1.9.2.linux-amd64.tar.gz" | tar zxvf - -C /home/circleci/project
      - run:
          name: get ecr-helper
          command: ./go/bin/go get -u github.com/awslabs/amazon-ecr-credential-helper/ecr-login/cli/docker-credential-ecr-login
      - run:
          name: push ecr
          command: export PATH=$PATH:/home/circleci/go/bin/ ; ./gradlew jib

La description ci-dessus n'est pas efficace car elle est supprimée à chaque fois pour chaque langue Go.

Si vous souhaitez transmettre la certification à GCP et Dockerhub, veuillez consulter le Document officiel.

La notification à Slack est définie en se référant à Notifier Slack des résultats CircleCI.

Exemple de code

https://github.com/supecura/JibSample

Quelle zone est la meilleure

prime

Questions qui se sont posées lorsque j'ai essayé de l'introduire et la présence ou l'absence de sa fonction

Ceux-ci peuvent être définis à partir de la propriété container de Jib.

sample


jib {
  container {
    jvmFlags = ['-Xms512m']
    mainClass = 'Classe d'exécution'
    args = ['hoge','huga']
    environment = [ENV:'develop', LANG:'ja_JP.UTF-8']
  }
}

Pour d'autres paramètres détaillés, accédez à Documents officiels

Recommended Posts

Création d'un flux de test sur CircleCI à l'aide de Jib
Construction de docker multi-projets à l'aide de jib
Créer un serveur Minecraft sur AWS
Créer un environnement XAMPP sur Ubuntu
Utilisation du réseau local avec iOS 14
Créer un environnement de test de navigateur à l'aide de Capybara dans l'environnement de développement Docker
Créer un référentiel Maven sur AWS S3
Créer un environnement de développement Java sur Mac
Créez un environnement JMeter sur votre Mac
Créer une application Kotlin à l'aide du conteneur OpenJDK Docker
Générer un mot de passe de compte de test à l'aide de Rails SecureRandom.alphanumeric
Présentation de Rspec, un framework de test pour Ruby on Rails
Créer un environnement Laravel sur une instance AWS
Créer un environnement d'exécution Java sur Sakura VPS
Comment créer un environnement Pytorch sur Ubuntu
Installez Ubuntu 20.04 dans la boîte virtuelle sur Windows10 et créez un environnement de développement à l'aide de docker
Créez un environnement de développement Java à l'aide de jenv sur votre Mac
Mémo pour créer un environnement Servlet sur EC2 d'AWS
Créer un environnement de développement Ruby on Rails sur AWS Cloud9
[Compatible JUnit 5] Ecrire un test en utilisant JUnit 5 avec Spring boot 2.2, 2.3
J'ai essayé d'utiliser Log4j2 sur un serveur Java EE
Créez un référentiel interne Maven sur Google Cloud Storage
Un enregistrement d'une simple pression sur le flux de données de GCP
Essayez de créer un environnement de développement Java à l'aide de Docker