Lors de la création d'une image Docker avec un produit Java, vous pouvez exécuter maven au moment de docker build
, mais cela prend du temps et les artefacts qui ne sont pas nécessaires au moment de l'exécution sont téléchargés, donc l'image devient grande.
Par conséquent, si vous construisez avec CircleCI et créez un Dockerfile qui télécharge et exécute le Jar créé, il sera plus facile à construire et la taille de l'image sera plus petite.
Pour créer un bocal qui inclut toutes les bibliothèques dépendantes, il est facile d'utiliser le bouchon d'ombrage comme suit. Il peut également s'agir d'un fichier Jar exécutable en utilisant ManifestResourceTransformer
pour inclure la mainClass dans le fichier MANIFEST.
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>
Je pense que vous pouvez créer un fichier zip en utilisant le plug-in d'assemblage.
CircleCI 2.0 crée un conteneur de construction en utilisant pom.xml comme clé de cache, afin que vous puissiez construire à grande vitesse à moins que vous ne réécriviez pom. De plus, le référentiel de Maven est reflété par CircleCI, le téléchargement des bibliothèques dépendantes est donc rapide.
Pour les paramètres de construction, créez .circleci / config.yml
directement sous le projet. L'exemple sera affiché lorsqu'il fonctionnera avec le projet GitHub, vous pouvez donc l'utiliser tel quel, mais à la fin, ajoutez uniquement l'étape de téléchargement du fichier Uber JAR ou ZIP vers Artifact (dans l'exemple ci-dessous, à 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
Dans le Dockerfile, écrivez pour télécharger et exécuter cet artefact.
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"]
L'URL du dernier artefact de construction réussi peut être obtenue sans authentification à l'aide de l'API CircleCI v1.1 pour les référentiels publics. Nous utilisons jq pour identifier les artefacts de JSON et extraire les URL.
Recommended Posts