feat: docker multi-arch images

This commit is contained in:
Gauthier Roebroeck 2020-03-10 15:30:49 +08:00
parent a7a96145c0
commit d54c67b3df
9 changed files with 57 additions and 18 deletions

View file

@ -1,3 +1,4 @@
os: linux
language: java language: java
before_install: before_install:

View file

@ -1,4 +0,0 @@
#!/usr/bin/env bash
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
./gradlew dockerPushLatest dockerPushSemVer

2
.travis/docker-common.sh Normal file
View file

@ -0,0 +1,2 @@
export DOCKER_CLI_EXPERIMENTAL=enabled
PLATFORMS=linux/amd64,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x

25
.travis/prepare-dockerhub.sh Executable file
View file

@ -0,0 +1,25 @@
#!/usr/bin/env bash
source "$(dirname "$0")/docker-common.sh"
# Update Docker CE
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
# Enable buildx
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
docker buildx create --name mybuilder --driver docker-container --use
docker buildx inspect --bootstrap
# Unpack fat jar
./gradlew unpack
# Build docker images (no push)
cd komga
docker buildx build \
--platform $PLATFORMS \
--cache-from gotson/komga:latest \
--tag gotson/komga:latest \
--tag gotson/komga:$1 \
--file ./Dockerfile .

11
.travis/prepare-release.sh Executable file
View file

@ -0,0 +1,11 @@
#!/usr/bin/env bash
# Update version for Gradle
echo version=$1 >gradle.properties
# Build jar
./gradlew copyWebDist
./gradlew assemble
# Prepare Dockerhub release
source "$(dirname "$0")/prepare-dockerhub.sh" $1

14
.travis/publish-dockerhub.sh Executable file
View file

@ -0,0 +1,14 @@
#!/usr/bin/env bash
source "$(dirname "$0")/docker-common.sh"
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
# Push docker images (built previously)
cd komga
docker buildx build \
--platform $PLATFORMS \
--cache-from gotson/komga:latest \
--tag gotson/komga:latest \
--tag gotson/komga:$1 \
--file ./Dockerfile . \
--push

View file

@ -1,6 +1,6 @@
FROM adoptopenjdk:11-jre-hotspot FROM adoptopenjdk:11-jdk-hotspot
VOLUME /tmp VOLUME /tmp
ARG DEPENDENCY=target/dependency ARG DEPENDENCY=build/dependency
COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY ${DEPENDENCY}/META-INF /app/META-INF COPY ${DEPENDENCY}/META-INF /app/META-INF
COPY ${DEPENDENCY}/BOOT-INF/classes /app COPY ${DEPENDENCY}/BOOT-INF/classes /app

View file

@ -1,4 +1,3 @@
import com.palantir.gradle.docker.DockerExtension
import org.apache.tools.ant.taskdefs.condition.Os import org.apache.tools.ant.taskdefs.condition.Os
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
@ -14,7 +13,6 @@ plugins {
id("org.springframework.boot") version "2.2.5.RELEASE" id("org.springframework.boot") version "2.2.5.RELEASE"
id("io.spring.dependency-management") version "1.0.9.RELEASE" id("io.spring.dependency-management") version "1.0.9.RELEASE"
id("com.github.ben-manes.versions") version "0.28.0" id("com.github.ben-manes.versions") version "0.28.0"
id("com.palantir.docker") version "0.25.0"
id("com.gorylenko.gradle-git-properties") version "2.2.2" id("com.gorylenko.gradle-git-properties") version "2.2.2"
jacoco jacoco
} }
@ -163,14 +161,6 @@ tasks {
} }
} }
configure<DockerExtension> {
name = "gotson/komga"
tag("latest", "$name:latest")
tag("semVer", "$name:$version")
copySpec.from(tasks.getByName("unpack").outputs).into("dependency")
buildArgs(mapOf("DEPENDENCY" to "dependency"))
}
springBoot { springBoot {
buildInfo() buildInfo()
} }

View file

@ -29,8 +29,8 @@
[ [
"@semantic-release/exec", "@semantic-release/exec",
{ {
"prepareCmd": "echo version=${nextRelease.version}> gradle.properties && ./gradlew copyWebDist && ./gradlew assemble", "prepareCmd": ".travis/prepare-release.sh ${nextRelease.version}",
"publishCmd": ".travis/deploy-dockerhub-prod.sh" "publishCmd": ".travis/publish-dockerhub.sh ${nextRelease.version}"
} }
], ],
[ [