Wenn Sie ein Docker-Image mit einem Java-Produkt erstellen, können Sie Maven zum Zeitpunkt des Docker-Builds ausführen. Es dauert jedoch einige Zeit, und Artefakte, die zur Laufzeit nicht benötigt werden, werden heruntergeladen, sodass das Image groß wird.
Wenn Sie mit CircleCI erstellen und eine Docker-Datei erstellen, die das erstellte Jar herunterlädt und ausführt, ist es daher einfacher zu erstellen und die Bildgröße ist kleiner.
Um ein Jar zu erstellen, das alle abhängigen Bibliotheken enthält, können Sie das unten gezeigte Schatten-Plug-In einfach verwenden. Es kann auch ein ausführbares Jar sein, indem "ManifestResourceTransformer" verwendet wird, um die mainClass in die MANIFEST-Datei aufzunehmen.
pom.xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>xxx.Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
Ich denke, Sie können eine Zip-Datei mit dem Assembly-Plug-In erstellen.
CircleCI 2.0 erstellt einen Build-Container mit pom.xml als Cache-Schlüssel, sodass Sie mit hoher Geschwindigkeit erstellen können, sofern Sie pom nicht neu schreiben. Außerdem wird das Repository von Maven von CircleCI gespiegelt, sodass das Herunterladen abhängiger Bibliotheken schnell erfolgt.
Erstellen Sie für Build-Einstellungen ".circleci / config.yml" direkt unter dem Projekt. Das Beispiel wird angezeigt, wenn es mit dem GitHub-Projekt funktioniert, sodass Sie es unverändert verwenden können. Fügen Sie am Ende jedoch nur den Schritt des Hochladens der Uber-JAR oder der ZIP-Datei zu Artifact hinzu (im folgenden Beispiel unter "store_artifacts").
yaml:.circleci/config.yml
version: 2
jobs:
build:
docker:
- image: circleci/openjdk:8-jdk
working_directory: ~/repo
environment:
MAVEN_OPTS: -Xmx3200m
steps:
- checkout
- restore_cache:
keys:
- v1-dependencies-{{ checksum "pom.xml" }}
- v1-dependencies-
- run: mvn dependency:go-offline
- save_cache:
paths:
- ~/.m2
key: v1-dependencies-{{ checksum "pom.xml" }}
- run: mvn integration-test
- store_artifacts:
path: target/xxx-0.1.0-SNAPSHOT.jar
Schreiben Sie in die Docker-Datei, um dieses Artefakt herunterzuladen und auszuführen.
Dockerfile
FROM openjdk:8-alpine
RUN apk --no-cache add curl jq
RUN curl 'https://circleci.com/api/v1.1/project/github/kawasima/xxx/latest/artifacts?branch=develop&filter=successful' \
| jq 'map(select(.["path"] == "home/circleci/repo/target/xxx-0.1.0-SNAPSHOT.jar"))' \
| jq '.[0]["url"]' \
| xargs curl -o xxx.jar
RUN apk del --purge curl jq
ENTRYPOINT ["java", "-jar", "xxx.jar"]
Die URL des letzten erfolgreichen Build-Artefakts kann ohne Authentifizierung mithilfe der CircleCI API v1.1 für öffentliche Repositorys abgerufen werden. Wir verwenden jq, um Artefakte aus JSON zu identifizieren und URLs zu extrahieren.
Recommended Posts