diff options
author | Carlo Landmeter <clandmeter@alpinelinux.org> | 2020-01-02 21:29:26 +0100 |
---|---|---|
committer | Carlo Landmeter <clandmeter@alpinelinux.org> | 2020-01-02 21:29:26 +0100 |
commit | 6e2e6a984162c43d92e480fb3b0f74c1318a0901 (patch) | |
tree | ba2c1a9ecd15c2b9ad7692f752e720c259da3c9f | |
parent | 0c11a9e38e67b32f909d0cf435e9607fb061bda2 (diff) | |
download | docker-abuild-6e2e6a984162c43d92e480fb3b0f74c1318a0901.tar.bz2 docker-abuild-6e2e6a984162c43d92e480fb3b0f74c1318a0901.tar.xz |
add gitlab ci
-rw-r--r-- | .gitlab-ci.yml | 103 | ||||
-rw-r--r-- | Dockerfile.in | 2 | ||||
-rwxr-xr-x | make_images.sh | 78 |
3 files changed, 182 insertions, 1 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..1715d07 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,103 @@ +image: alpinelinux/docker-cli +stages: + - build + - push + - manifest + - cleanup + +# Build jobs + +build-v3.8: + stage: build + script: + - ./make_images.sh build v3.8 + +build-v3.9: + stage: build + script: + - ./make_images.sh build v3.9 + +build-v3.10: + stage: build + script: + - ./make_images.sh build v3.10 + +build-v.3.11: + stage: build + script: + - ./make_images.sh build v3.11 + +build-edge: + stage: build + script: + - ./make_images.sh build edge + +# Push jobs + +push-v3.8: + stage: push + script: + - ./make_images.sh push v3.8 + +push-v3.9: + stage: push + script: + - ./make_images.sh push v3.9 + +push-v3.10: + stage: push + script: + - ./make_images.sh push v3.10 + +push-v.3.11: + stage: push + script: + - ./make_images.sh push v3.11 + +push-edge: + stage: push + script: + - ./make_images.sh push edge + +manifest-v3.8: + stage: manifest + variables: + DOCKER_CLI_EXPERIMENTAL: enabled + script: + - ./make_images.sh manifest v3.8 + +manifest-v3.9: + stage: manifest + variables: + DOCKER_CLI_EXPERIMENTAL: enabled + script: + - ./make_images.sh manifest v3.9 + +manifest-v3.10: + stage: manifest + variables: + DOCKER_CLI_EXPERIMENTAL: enabled + script: + - ./make_images.sh manifest v3.10 + +manifest-v3.11: + stage: manifest + variables: + DOCKER_CLI_EXPERIMENTAL: enabled + script: + - ./make_images.sh manifest v3.11 + +manifest-edge: + stage: manifest + variables: + DOCKER_CLI_EXPERIMENTAL: enabled + script: + - ./make_images.sh manifest edge + +# cleanup images/layers + +cleanup: + stage: cleanup + script: + - docker system prune --force + diff --git a/Dockerfile.in b/Dockerfile.in index 4da02eb..1b0424f 100644 --- a/Dockerfile.in +++ b/Dockerfile.in @@ -1,4 +1,4 @@ -FROM alpine:%%ALPINE_TAG%% +FROM %%ALPINE_IMG%%/alpine:%%ALPINE_TAG%% MAINTAINER Richard Mortier <mort@cantab.net> RUN rm /etc/apk/repositories && \ diff --git a/make_images.sh b/make_images.sh new file mode 100755 index 0000000..1d2be49 --- /dev/null +++ b/make_images.sh @@ -0,0 +1,78 @@ +#!/bin/sh + +set -eu + +readonly NAMESPACE="${NAMESPACE:=alpinelinux}" +readonly PROJECT="${PROJECT:=docker-alpine}" +readonly ARCHES="${ARCHES:=x86 x86_64 armhf armv7 aarch64 ppc64le s390x}" +readonly TEMPLATE="Dockerfile.in" + +readonly OPERATION="$1" +readonly RELEASE="$2" + +die() { + echo "$1" >&2 + exit 1 +} + +arch_to_image() { + case $1 in + armv7) echo arm32v7 ;; + aarch64) echo arm64v8 ;; + x86_64) echo amd64 ;; + armhf) echo arm32v6 ;; + x86) echo i386 ;; + ppc64le) echo ppc64le ;; + s390x) echo s390x ;; + *) die "Unknown arch detected: \"$1\"" + esac +} + +build() { + for arch in $ARCHES; do + [ "$RELEASE" = "v3.8" ] && [ "$arch" = "armv7" ] && continue + sed -e "s/%%ALPINE_IMG%%/$(arch_to_image $arch)/" \ + -e "s/%%ALPINE_TAG%%/${RELEASE/v/}/" \ + -e "s/%%ALPINE_REL%%/$RELEASE/" "$TEMPLATE" > Dockerfile + docker build --no-cache -t "$NAMESPACE/$PROJECT:$RELEASE-$arch" . || \ + die "Failed to build docker-abuild:$RELEASE-$arch" + done +} + +push() { + printf "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" \ + --password-stdin || die "Failed to login to docker hub" + + for arch in $ARCHES; do + [ "$RELEASE" = "v3.8" ] && [ "$arch" = "armv7" ] && continue + docker push "$NAMESPACE/$PROJECT:$RELEASE-$arch" || \ + die "Failed to push docker-abuild:$RELEASE-$arch" + done +} + +manifest() { + local images= arch= + + printf "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" \ + --password-stdin || die "Failed to login to docker hub" + + for arch in $ARCHES; do + [ "$RELEASE" = "v3.8" ] && [ "$arch" = "armv7" ] && continue + images="$images $NAMESPACE/$PROJECT:$RELEASE-$arch" + done + + docker manifest create --amend "$NAMESPACE/$PROJECT" $images || \ + die "Failed to create manifest" + docker manifest push --purge "$NAMESPACE/$PROJECT" || \ + die "Failed to push manifest" +} + +[ "$RELEASE" ] || die "Second argument needs to be a alpine release" + +case $OPERATION in + build) build ;; + push) push ;; + manifest) manifest ;; + *) die "First argument needs to be build|push|manifest" ;; +esac + |