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).
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.
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.
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.
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 à
C'est une partie de base, donc je vais l'omettre.
É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
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
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.
https://github.com/supecura/JibSample
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