Commit eb401682 authored by DasSkelett's avatar DasSkelett

Merge branch 'feature/ci-tests' into 'master'

Test image before pushing to registry

This extends the CI to have multiple jobs:
- build
- test
- deploy

The first job builds the image and pushes it to the repo registry (https://gitlab.com/DasSkelett/nginx-quic-docker/container_registry) for use in later steps.
The building is split into a separate script (`build.sh`) that in theory should also be runnable during development on one's own system.
The second job runs the newly built image as a service and uses [this external Docker image](https://hub.docker.com/r/ymuski/curl-http3) with curl with http3 support to make sure that nginx actually listens for HTTP/3 connections.

The third job finally tags and pushes the already built image to Dockerhub.

Fixes #1

See merge request DasSkelett/nginx-quic-docker!1
parents 02d004b9 62321d75
docker-build-master:
# Official docker image.
image: docker:latest
image: docker:latest
services:
- docker:dind
stages:
- build
- test
- deploy
variables:
CI_IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
LAST_VERSION_FILE: .last_version
CI_ENV_FILE: .ci.env
docker-build:
stage: build
services:
- docker:dind
variables:
LAST_VERSION_FILE: .last_version
cache:
paths:
- $LAST_VERSION_FILE
artifacts:
reports:
dotenv: $CI_ENV_FILE
expire_in: 30 minutes
before_script:
- apk add --no-cache jq curl
- apk add bash curl jq
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
script:
- FULL_VERSION=$(curl --silent "https://aur.archlinux.org/rpc.php?type=info&arg=nginx-quic" | jq -r '.results.Version') && VERSION=${FULL_VERSION%-*} && export FULL_VERSION && export VERSION
- if [[ -f $LAST_VERSION_FILE ]]; then export LAST_VERSION=$(<$LAST_VERSION_FILE); fi
- if [[ -n $LAST_VERSION && $LAST_VERSION != $FULL_VERSION ]]; then export CI_USE_CACHE=false; fi
- params=(); if [[ $CI_USE_CACHE == true ]]; then params+=(--cache-from "${CI_REGISTRY_IMAGE}:latest"); else params+=(--no-cache) ; fi && export params
- chmod +x ./build.sh && /bin/bash ./build.sh
- docker push "${CI_IMAGE_TAG}"
only:
changes:
- "Dockerfile"
- "nginx.conf"
- ".gitlab-ci.yml"
- "build.sh"
- docker pull "${CI_REGISTRY_IMAGE}:latest" # https://gitlab.com/gitlab-org/gitlab-foss/-/issues/17861#note_19140733
- docker build --pull "${params[@]}" -t "${CI_REGISTRY_IMAGE}:latest" .
- docker tag "${CI_REGISTRY_IMAGE}:latest" "${CI_REGISTRY_IMAGE}:${VERSION}"
- docker tag "${CI_REGISTRY_IMAGE}:latest" "${CI_REGISTRY_IMAGE}:archlinux"
- docker tag "${CI_REGISTRY_IMAGE}:latest" "${CI_REGISTRY_IMAGE}:${VERSION}-archlinux"
docker-tests:
stage: test
dependencies:
- docker-build
image: ymuski/curl-http3
services:
- name: "$CI_IMAGE_TAG"
alias: nginxquic
script:
- curl --http3 -v --silent --insecure "https://nginxquic:443"
- /opt/httpstat.sh --http3 "https://nginxquic:443"
only:
changes:
- "Dockerfile"
- "nginx.conf"
- ".gitlab-ci.yml"
- "build.sh"
docker-publish:
stage: deploy
dependencies:
- docker-tests
cache:
paths:
- $LAST_VERSION_FILE
before_script:
- docker login -u "$DP_REGISTRY_USER" -p "$DP_REGISTRY_PASSWORD" $DP_REGISTRY
script:
- docker tag "${CI_IMAGE_TAG}" "${CI_REGISTRY_IMAGE}:${VERSION}"
- docker tag "${CI_IMAGE_TAG}" "${CI_REGISTRY_IMAGE}:archlinux"
- docker tag "${CI_IMAGE_TAG}" "${CI_REGISTRY_IMAGE}:${VERSION}-archlinux"
- docker push "${CI_REGISTRY_IMAGE}:latest"
- docker push "${CI_REGISTRY_IMAGE}:archlinux"
- docker push "${CI_REGISTRY_IMAGE}:latest"
- docker push "${CI_REGISTRY_IMAGE}:archlinux"
- docker tag "${CI_IMAGE_TAG}" "${DP_REGISTRY_IMAGE}:${VERSION}"
- docker tag "${CI_IMAGE_TAG}" "${DP_REGISTRY_IMAGE}:archlinux"
- docker tag "${CI_IMAGE_TAG}" "${DP_REGISTRY_IMAGE}:${VERSION}-archlinux"
- docker push "${DP_REGISTRY_IMAGE}:latest"
- docker push "${DP_REGISTRY_IMAGE}:archlinux"
- docker push "${DP_REGISTRY_IMAGE}:latest"
- docker push "${DP_REGISTRY_IMAGE}:archlinux"
- echo $FULL_VERSION > $LAST_VERSION_FILE
only:
- master
except:
refs:
- master
- schedules
- web
variables:
- $DP_REGISTRY && $DP_REGISTRY_USER && $DP_REGISTRY_PASSWORD && $DP_REGISTRY_IMAGE
changes:
- "README.md"
- "Dockerfile"
- "nginx.conf"
- ".gitlab-ci.yml"
- "build.sh"
#!/bin/bash
set -ex
export FULL_VERSION=$(curl --silent "https://aur.archlinux.org/rpc.php?type=info&arg=nginx-quic" | jq -r '.results.Version')
export VERSION=${FULL_VERSION%-*}
echo "FULL_VERSION=$FULL_VERSION" > $CI_ENV_FILE && echo "VERSION=$VERSION" >> $CI_ENV_FILE
if [[ -f $LAST_VERSION_FILE ]]; then
export LAST_VERSION=$(<$LAST_VERSION_FILE)
fi
if [[ -n $LAST_VERSION && $LAST_VERSION != $FULL_VERSION ]]; then
export CI_USE_CACHE=false
fi
params=()
if [[ $CI_USE_CACHE == true ]]; then
params+=(--cache-from "$CI_IMAGE_TAG")
else
params+=(--no-cache)
echo "CI_USE_CACHE is false"
fi
export params
# https://gitlab.com/gitlab-org/gitlab-foss/-/issues/17861#note_19140733
if [[ $CI_USE_CACHE == true ]]; then
docker pull "$CI_IMAGE_TAG"
fi
docker build "${params[@]}" -t "${CI_IMAGE_TAG}" .
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment