Skip to content

Commit cb3727d

Browse files
frederik-bkr1sp1n
andauthored
use fixed docker versions where possible (#97)
* use fixed docker versions where possible * set VERSION to TRAVIS_COMMIT * push all tagged images instead of onyl latest * no PULL_FLAG in travis * always build all images in travis Co-authored-by: Frederik Berg <[email protected]> Co-authored-by: Krispin Schulz <[email protected]>
1 parent 7415f34 commit cb3727d

File tree

21 files changed

+106
-67
lines changed

21 files changed

+106
-67
lines changed

.travis.yml

+11-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,17 @@ before_script:
1919
- git remote set-branches --add origin master
2020
- git fetch
2121
# See issue: https://graysonkoonce.com/getting-the-current-branch-name-during-a-pull-request-in-travis-ci/
22-
- export BRANCH=$(if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then echo $TRAVIS_BRANCH; else echo $TRAVIS_PULL_REQUEST_BRANCH; fi)
22+
- BRANCH=$(if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then echo $TRAVIS_BRANCH; else echo $TRAVIS_PULL_REQUEST_BRANCH; fi)
23+
- export BRANCH
24+
# commit hashes as tags is broken, use something reliable
25+
- export VERSION="${TRAVIS_COMMIT}"
26+
# always build everything locally
27+
- export PULL_FLAG=""
28+
# it's okay to use the cache
29+
- export CACHE_FLAG=""
30+
# always bind all images, so that all images get synchronzide versions
31+
- IMAGES="$(find * -maxdepth 0 -type d)"
32+
- export IMAGES
2333

2434
script:
2535
# stop immediately if there's a failure

Makefile

+2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ help:
2323

2424
# TODO Add make traps for docker-compose
2525

26+
.PHONY: build
2627
build: ## Builds all changed images. `-e IMAGES="name"` builds single image.
2728
@docker-compose -f docker-compose.ops.yml build \
2829
${CACHE_FLAG} \
@@ -52,6 +53,7 @@ test: ## Tests all changed images where tests exist. `-e IMAGES="name"` runs tes
5253
test-images || make clean
5354
@make clean
5455

56+
.PHONY: push
5557
push: ## Pushes all changed images. `-e IMAGES="name"` pushes a single image.
5658
@docker-compose -f docker-compose.ops.yml build \
5759
${CACHE_FLAG} \

docker-build/Dockerfile

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
1+
ARG IMAGE_PREFIX="avenga/"
2+
ARG VERSION="latest"
3+
14
FROM koalaman/shellcheck-alpine:v0.6.0 as test
25
COPY *.sh ./
36
RUN find . -name "*.sh" | xargs shellcheck
47

5-
FROM avenga/docker AS release
8+
FROM ${IMAGE_PREFIX}docker:${VERSION} AS release
69
#
710
# DEFAULTS
811
#
912
ENV IMAGE_PREFIX=""
1013
ENV IMAGES=""
11-
ENV IMAGE_TAG="latest"
1214
ENV TARGET="release"
1315
ENV LABEL_VENDOR=""
1416
ENV LABEL_VCS_URL=""

docker-build/run.sh

+7-11
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
#!/bin/bash -eu
1+
#!/usr/bin/env bash
2+
set -eu
23

34
IMAGES="${IMAGES:-}"
45
DRY_RUN="${DRY_RUN:-}"
@@ -32,28 +33,23 @@ else
3233
then
3334
DOCKERFILE="$WORKDIR/$IMAGE_NAME/Dockerfile"
3435
CONTEXT="$WORKDIR/$IMAGE_NAME"
35-
TAG=$IMAGE_PREFIX$IMAGE_NAME:$IMAGE_TAG
36-
COMMIT_TAG=$IMAGE_PREFIX$IMAGE_NAME:$VERSION
3736
DOCKERFILE_FLAG=""
38-
if [ -e "$DOCKERFILE" ]
39-
then
37+
if [ -e "$DOCKERFILE" ]; then
4038
DOCKERFILE_FLAG="--file $DOCKERFILE"
4139
fi
4240
CACHE_FLAG="--no-cache"
43-
if [[ -n "$CACHE" ]]
44-
then
41+
if [[ -n "$CACHE" ]]; then
4542
CACHE_FLAG=""
4643
fi
4744
PULL_FLAG="--pull"
48-
if [[ -n "$NO_PULL" ]]
49-
then
45+
if [[ -n "$NO_PULL" ]]; then
5046
PULL_FLAG=""
5147
fi
5248

5349
COMMAND="docker build $PULL_FLAG $CACHE_FLAG \\
5450
--build-arg IMAGE_PREFIX=$IMAGE_PREFIX \\
55-
--tag $TAG \\
56-
--tag $COMMIT_TAG \\
51+
--tag $IMAGE_PREFIX$IMAGE_NAME:latest \\
52+
--tag $IMAGE_PREFIX$IMAGE_NAME:$VERSION \\
5753
--target $TARGET \\
5854
--label org.opencontainers.image.created=\"$BUILD_DATE\" \\
5955
--label org.opencontainers.image.revision=\"$VERSION\" \\

docker-compose.ops.yml

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ services:
3737
- CI_REGISTRY_USER
3838
- CI_REGISTRY
3939
- IMAGES
40+
- VERSION
4041
volumes:
4142
- .:/work
4243
- /var/run/docker.sock:/var/run/docker.sock

docker-push/Dockerfile

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1+
ARG IMAGE_PREFIX="avenga/"
2+
ARG VERSION="latest"
3+
14
FROM koalaman/shellcheck-alpine:v0.6.0 as test
25
COPY *.sh ./
36
RUN find . -name "*.sh" | xargs shellcheck
47

5-
FROM avenga/docker AS release
8+
FROM ${IMAGE_PREFIX}docker:${VERSION} AS release
69
#
710
# DEFAULTS
811
#

docker-push/run.sh

+26-18
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
#!/bin/bash -eu
1+
#!/usr/bin/env bash
2+
set -eu
23

34
IMAGES="${IMAGES:-}"
45
DRY_RUN="${DRY_RUN:-}"
@@ -12,26 +13,33 @@ if [[ -z $IMAGES ]] ; then
1213
)
1314
fi
1415

15-
if [[ -z $IMAGES ]]
16-
then
16+
if [[ -z $IMAGES ]]; then
1717
echo "Nothing to push."
1818
exit 0
1919
fi
2020

21-
if [[ -n "$DRY_RUN" ]]; then
22-
echo "$IMAGES"
21+
# only push images if specific branch and not dry run
22+
if [[ -n "$DRY_RUN" ]] || [[ "$CURRENT_BRANCH" != "$ONLY_BRANCH" ]]; then
23+
[[ "$CURRENT_BRANCH" != "$ONLY_BRANCH" ]] && echo "Skipping push since CURRENT_BRANCH $CURRENT_BRANCH is not equal to ONLY_BRANCH $ONLY_BRANCH"
24+
# for all images
25+
for image in $IMAGES; do
26+
# for all tags that are equal to latest
27+
for tagged_image in $(docker image inspect --format $'{{range .RepoTags}}{{.}} {{end}}' "$IMAGE_PREFIX$image:latest"); do
28+
# print it
29+
echo "$tagged_image"
30+
done
31+
done
2332
exit 0
24-
else
25-
# only push images if specific branch
26-
if [[ "$CURRENT_BRANCH" == "$ONLY_BRANCH" ]]
27-
then
28-
echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" "$CI_REGISTRY" --password-stdin
29-
while IFS= read -r IMAGE_NAME
30-
do
31-
# push all tags:
32-
docker push "$IMAGE_PREFIX$IMAGE_NAME"
33-
done < <(echo "$IMAGES" | tr " " "\n")
34-
else
35-
echo "Skipping since not on ONLY_BRANCH $ONLY_BRANCH"
36-
fi
3733
fi
34+
35+
36+
echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" "$CI_REGISTRY" --password-stdin
37+
38+
# for all images
39+
for image in $IMAGES; do
40+
# for all tags that are equal to latest
41+
for tagged_image in $(docker image inspect --format $'{{range .RepoTags}}{{.}} {{end}}' "$IMAGE_PREFIX$image"); do
42+
# push it
43+
docker push "$tagged_image"
44+
done
45+
done

docker-push/tests/push.bats

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
#!/usr/bin/env bats
22

33
@test "dry run" {
4-
run docker run --rm -e IMAGES=gitlab-job -e DRY_RUN=1 "avenga/docker-push:$VERSION"
4+
run docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -e IMAGES="$IMAGE_PREFIX/gitlab-job" -e DRY_RUN=1 "avenga/docker-push:$VERSION"
55
echo "$output"
66
[[ $status -eq 0 ]]
7-
[[ $output == "gitlab-job" ]]
7+
[[ $output =~ "gitlab-job:latest" ]]
8+
[[ $output =~ "gitlab-job:${VERSION}" ]]
89
}
910
@test "make dry run" {
1011
cd ..
1112
run make push -e IMAGES=gitlab-job -e CURRENT_BRANCH=push-test "avenga/docker-push:$VERSION"
1213
echo "$output"
1314
[[ $status -eq 2 ]]
14-
[[ $output =~ "Skipping since not on ONLY_BRANCH master" ]]
15+
[[ $output =~ "Skipping push" ]]
1516
}

docker-test/Dockerfile

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
FROM avenga/docker AS release
1+
ARG IMAGE_PREFIX="avenga/"
2+
ARG VERSION="latest"
3+
FROM ${IMAGE_PREFIX}docker:${VERSION} AS release
24

35
# Install bats-core and other requirements
46
COPY --from=bats/bats:latest /opt/bats /opt/bats

docker-test/run.sh

+16-15
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
#!/bin/bash
2-
1+
#!/usr/bin/env bash
32
set -euo pipefail
43

54
CHANGES=$(git diff --name-only "$GIT_DIFF" | \
@@ -15,17 +14,19 @@ if [[ -z $IMAGES ]] ; then
1514
exit 0
1615
fi
1716

18-
while IFS= read -r IMAGE_NAME
19-
do
20-
( cd "$IMAGE_NAME"
21-
if [[ -d ./tests ]] ; then
22-
echo "Running test for $IMAGE_NAME"
23-
if [[ -f tests/test.sh ]] ; then
24-
./tests/test.sh
25-
else
26-
bats --tap ./tests
27-
fi
17+
# for all images
18+
for image in $IMAGES; do
19+
if [[ ! -d "$image/tests" ]] ; then
20+
echo "No tests found for $image"
21+
continue
22+
fi
23+
24+
echo "Running test for $image"
25+
pushd "$image"
26+
if [[ -f tests/test.sh ]] ; then
27+
./tests/test.sh
2828
else
29-
echo "No tests found for $IMAGE_NAME"
30-
fi )
31-
done < <(echo "$IMAGES" | tr " " "\n")
29+
bats --tap ./tests
30+
fi
31+
popd
32+
done

gitlab-job/Dockerfile

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
FROM avenga/docker AS release
1+
ARG IMAGE_PREFIX="avenga/"
2+
ARG VERSION="latest"
3+
FROM ${IMAGE_PREFIX}docker:${VERSION} AS release
24
RUN apk --quiet --no-progress --no-cache add make coreutils curl jq docker-compose \
35
&& sed -i 's|ash$|bash|g' /etc/passwd
46
RUN docker-compose --version

gitlab-runner/Dockerfile

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
ARG GITLAB_RUNNER_IMAGE_TAG=alpine
22
FROM gitlab/gitlab-runner:${GITLAB_RUNNER_IMAGE_TAG} AS release
3+
ARG IMAGE_PREFIX="avenga/"
4+
ARG VERSION="latest"
35

46
# Defaults:
57
ENV RUNNER_LIMIT="1"
68
ENV RUNNER_REQUEST_CONCURRENCY="1"
79
ENV RUNNER_EXECUTOR="docker"
8-
ENV DOCKER_IMAGE="avenga/gitlab-job:latest"
10+
ENV DOCKER_IMAGE="${IMAGE_PREFIX}/gitlab-job:${VERSION}"
911

1012
COPY register-runner.sh /
1113
ENTRYPOINT ["/usr/bin/dumb-init", "/register-runner.sh"]

gitlab-runner/tests/runner.bats

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@
44
run docker run --rm --entrypoint gitlab-runner "avenga/gitlab-runner:$VERSION" --version
55
echo "$output"
66
[[ $status -eq 0 ]]
7-
[[ $output =~ Version:.*13.1.1 ]]
7+
[[ $output =~ Version:.*13.5.0 ]]
88
}

kubectl/tests/version.bats

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
# test the version
1+
#!/usr/bin/env bats
2+
23
@test "test kubectl version" {
34
run bash -c "docker run --rm -e CONFIGURE_KUBECTL=false avenga/kubectl version --client -o json | jq -r '.clientVersion.gitVersion'"
45
echo "$output"
5-
[[ $output =~ "v1.18" ]]
6+
[[ $output =~ "v1.19" ]]
67
[[ $status -eq 0 ]]
78
}

nodejs-javascript-app/Dockerfile

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
ARG IMAGE_PREFIX="avenga/"
2-
FROM ${IMAGE_PREFIX}nodejs-runner:latest AS release
1+
ARG IMAGE_PREFIX="avenga/"
2+
ARG VERSION="latest"
3+
FROM ${IMAGE_PREFIX}nodejs-runner:${VERSION} AS release
34
ONBUILD COPY --from=build /app/package.json ./
45
ONBUILD COPY --from=build /app/src ./src
56
ONBUILD COPY --from=build /prod_node_modules ./node_modules

nodejs-javascript-builder/Dockerfile

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
ARG IMAGE_PREFIX="avenga/"
2-
FROM ${IMAGE_PREFIX}nodejs-runner:latest AS release
2+
ARG VERSION="latest"
3+
FROM ${IMAGE_PREFIX}nodejs-runner:${VERSION} AS release
34
ENV YARN_VERSION="1.15.0"
45
RUN wget -O /yarn.js https://github.com/yarnpkg/yarn/releases/download/v${YARN_VERSION}/yarn-${YARN_VERSION}.js
56
COPY yarn /usr/bin

nodejs-javascript-hello/Dockerfile

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1-
ARG IMAGE_PREFIX="avenga/"
2-
FROM ${IMAGE_PREFIX}nodejs-javascript-builder:latest AS build
3-
FROM ${IMAGE_PREFIX}nodejs-javascript-app:latest AS release
1+
ARG IMAGE_PREFIX="avenga/"
2+
ARG VERSION="latest"
3+
FROM ${IMAGE_PREFIX}nodejs-javascript-builder:${VERSION} AS build
4+
FROM ${IMAGE_PREFIX}nodejs-javascript-app:${VERSION} AS release

sloppy-deployment/Dockerfile

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
FROM avenga/sloppy:1.13.1 as release
1+
ARG IMAGE_PREFIX="avenga/"
2+
FROM ${IMAGE_PREFIX}sloppy:1.13.1 as release
23
ARG SLOPPY_TEMPLATE_FILE="sloppy.tmpl.yml"
34
ENV SLOPPY_TEMPLATE_FILE=${SLOPPY_TEMPLATE_FILE}
45
ENV SLOPPY_APITOKEN=""

sloppy-rollout/Dockerfile

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
FROM avenga/sloppy as release
1+
ARG IMAGE_PREFIX="avenga/"
2+
ARG VERSION="latest"
3+
FROM ${IMAGE_PREFIX}sloppy:${VERSION} AS release
24
ENV SLOPPY_APITOKEN=""
35
# If templating is used, files from this environment are used.
46
ENV TEMPLATE_ENVIRONMENT=""

vault-pull/entrypoint.sh

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
#!/bin/bash -eu
1+
#!/usr/bin/env bash
2+
set -eu
23

34
ENVIRONMENTS=$(vault list -format=json "$VAULT_SECRETS_PATH/$PROJECT/environments" | jq -r 'join(",")')
45

vault-push/entrypoint.sh

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
#!/bin/bash -eu
1+
#!/usr/bin/env bash
2+
set -eu
23

34
ENVIRONMENTS_PATH=/environments
45
ENVIRONMENTS=$(find $ENVIRONMENTS_PATH/* -type d -maxdepth 1 -print0 | xargs -0 -n 1 basename)

0 commit comments

Comments
 (0)