TL;DR
Um eine Java-Anwendung mit Docker in einen Docker-Container zu verwandeln, müssen Sie Schritte ausführen, z. B. Java erstellen, eine Docker-Datei vorbereiten und Docker installieren. Jib ist ein OSS, das alle derartigen störenden Prozesse mit einem einzigen Befehl ausführen kann. Veröffentlicht als Maven and Gradle Plug-In.
Die folgende Beschreibung wurde zu build.gradle hinzugefügt
plugins {
id 'com.google.cloud.tools.jib' version '0.10.1'
}
Führen Sie den Befehl nach dem Schreiben wie folgt gemäß dem Handbuch aus
gradle jib --image=Bildname, den Sie generieren möchten
Auf diese Weise wird ein Docker-Image generiert und an Dockerhub gesendet.
Wenn Sie es jedoch in einer Umgebung ohne Docker ausführen, können Sie sich bei Dockerhub mit nur der obigen Beschreibung authentifizieren. Um lokal ohne Docker ausgeführt zu werden, müssen Sie die Authentifizierung in bug.gradle einrichten. Wenn Sie einen Docker lokal haben, können Sie ihn pushen, ohne die Einstellungen in build.gradle zu schreiben, wenn Sie die Docker-Anmeldung im Voraus ausführen und die Authentifizierung bestehen.
Möglicherweise möchten Sie auch lokal ein Docker-Image erstellen. Falls das passiert
gradle jibDockerBuild --image=Bildname, den Sie generieren möchten
Es ist auch möglich, es auf dem lokalen Docker zu generieren, indem Sie dies tun.
Jib überträgt das Image sogar in das Docker-Repository, was es einfacher macht, als das Container-Image manuell aus Docker zu generieren. Unter Ausnutzung der Tatsache, dass es leicht containerisiert werden kann, ohne eine Docker-Datei vorzubereiten, werde ich versuchen, es in den CI-Flow zu integrieren. Wir werden einen Black-Box-Test für das von Jib generierte Docker-Image durchführen. Wenn ein Problem auftritt, senden Sie es an ECR. Wenn ein Problem auftritt, erstellen wir einen Mechanismus, um eine Warnung auszulösen, ohne es an ECR zu senden.
Lassen Sie uns zunächst Ihr GitHub-Repository in CircleCI integrieren. Integrieren Sie GitHub und CircleCI Bereit, wenn Sie mit Bezug auf zusammenarbeiten
Dies ist ein grundlegender Teil, daher werde ich ihn weglassen.
Schreiben Sie die folgende Beschreibung in build.gradle und führen Sie den Befehl aus, um ein Image im lokalen Docker zu erstellen.
build.gradle
jib {
from {
//Basisbild
image = 'circleci/java'
}
to {
image = 'ECR-Repository zu pushen'
}
}
gradle jibDockerBuild
--Bild ist nicht erforderlich, da die Einstellung zum Ausleger auf Gradle hinzugefügt wird.
Starten Sie den Container über das Docker-Image und führen Sie einen Black-Box-Test durch. Es gibt jedoch einige Einschränkungen. Da sich der Docker auf CircleCI nicht auf dem CircleCI-Host befindet, können Sie dies nicht tun, selbst wenn Sie versuchen, vom gestarteten Host aus darauf zuzugreifen.
Nehmen Sie als Beispiel den Start eines Nginx-Containers auf CircleCI.
Beispiel in Nginx
docker run -d -p 8080:80 nginx
curl localhost:8080
curl: (7) Failed to connect to localhost port 8080: Connection refused
Bereiten Sie daher ein Docker-Image vor, das mit dem Docker-Container getestet werden soll, und testen Sie es. Kurz gesagt, es ist nur ein Bild des Sendens einer Anfrage an eine bestimmte IP (diesmal die IP des zu testenden Containers) und des Testens. Lassen Sie uns dies schnell mit Fock machen und ausführen.
yml:.circle/config.yml
- run:
name: create test image
command: cd ./test ; ../gradlew jibDockerBuild
- run:
name: blackbox test
command:Bild zum Ausführen des Docker-Lauftests
Verwenden Sie amazon-ecr-credential-helper, wenn Sie von Jib zu ECR wechseln. Daher müssen Sie Ihrem PATH amazon-ecr-credential-helper hinzufügen, bevor Sie ihn ausführen.
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
Die obige Beschreibung ist nicht effizient, da sie jedes Mal für jede Go-Sprache gelöscht wird.
Wenn Sie die Zertifizierung an GCP und Dockerhub weitergeben möchten, lesen Sie bitte das Offizielle Dokument.
Die Benachrichtigung an Slack wird unter Bezugnahme auf "Slack of CircleCI-Ergebnisse benachrichtigen" (https://qiita.com/su-kun1899/items/640f6fa8b48749396c16) festgelegt.
https://github.com/supecura/JibSample
Diese können über die Containereigenschaft von Jib festgelegt werden.
sample
jib {
container {
jvmFlags = ['-Xms512m']
mainClass = 'Ausführungsklasse'
args = ['hoge','huga']
environment = [ENV:'develop', LANG:'ja_JP.UTF-8']
}
}
Weitere detaillierte Einstellungen finden Sie unter Offizielle Dokumente.
Recommended Posts