Skip to content
Snippets Groups Projects
Commit 144c75c7 authored by Neil-Jocelyn Schark's avatar Neil-Jocelyn Schark
Browse files

Add release container build and cleanup general container build pipeline

See merge request !796
parent f31fcbf7
No related branches found
No related tags found
1 merge request!796Add release container build and cleanup general container build pipeline
Pipeline #187101 passed
variables:
DOCKER_TAG: $CI_COMMIT_SHA
GOSDN_IMAGE: "${CI_REGISTRY_IMAGE}:${DOCKER_TAG}"
GOSDN_TESTING_IMAGE: "${CI_REGISTRY_IMAGE}:testing_${DOCKER_TAG}"
GOSDN_INTEGRATION_TEST_IMAGE: "${CI_REGISTRY_IMAGE}/integration-tests:${DOCKER_TAG}"
GOSDN_IMAGE: "${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA}"
GOSDN_TESTING_IMAGE: "${CI_REGISTRY_IMAGE}:testing_${CI_COMMIT_SHA}"
GOSDN_INTEGRATION_TEST_IMAGE: "${CI_REGISTRY_IMAGE}/integration-tests:${CI_COMMIT_SHA}"
CEOS_IMAGE: "${CI_PCONTAINERS_REGISTRY_IMAGE}/ceos:4.28.2F"
GOLANG_VERSION: "1.22"
GNMI_TARGET_IMAGE: registry.code.fbi.h-da.de/danet/gnmi-target/debian:master
......@@ -22,6 +21,7 @@ stages:
- test
- analyze
- test-legacy
- release
- deploy
- .post
......@@ -34,3 +34,4 @@ include:
- local: "/.gitlab/ci/.renovate.yml"
- local: "/.gitlab/ci/.mk-docs-deploy.yml"
- local: "/.gitlab/ci/legacy/.test.yml"
- local: "/.gitlab/ci/.release-container.yml"
......@@ -4,8 +4,6 @@
services:
- name: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/docker:latest
alias: docker
variables:
DOCKER_TLS_CERTDIR: "/certs"
before_script:
- apk add git
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
......@@ -19,8 +17,6 @@
services:
- name: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/docker:latest
alias: docker
variables:
DOCKER_TLS_CERTDIR: "/certs"
before_script:
- apk add git
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
......@@ -28,36 +24,46 @@
build-controller-image:
script:
- docker buildx build -t "$CI_REGISTRY_IMAGE:$DOCKER_TAG" -f "${CI_PROJECT_DIR}/controller/controller.Dockerfile" --build-arg "GOLANG_VERSION=$GOLANG_VERSION" --build-arg "BUILDARGS=$BUILDARGS" --build-arg "GITLAB_PROXY=${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/" .
- docker push "$CI_REGISTRY_IMAGE:$DOCKER_TAG"
- docker buildx build -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA" -f "${CI_PROJECT_DIR}/controller/controller.Dockerfile" --build-arg "GOLANG_VERSION=$GOLANG_VERSION" --build-arg "BUILDARGS=$BUILDARGS" --build-arg "GITLAB_PROXY=${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/" .
- docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA"
- docker tag "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA" "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG"
- docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG"
<<: *build
build-cli-image:
script:
- CLI_IMAGE_NAME="${CI_REGISTRY_IMAGE}/gosdnc"
- docker buildx build -t "$CLI_IMAGE_NAME:$DOCKER_TAG" -f "${CI_PROJECT_DIR}/cli/cli.Dockerfile" --build-arg "GOLANG_VERSION=$GOLANG_VERSION" --build-arg "BUILDARGS=$BUILDARGS" --build-arg "GITLAB_PROXY=${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/" .
- docker push "$CLI_IMAGE_NAME:$DOCKER_TAG"
- docker buildx build -t "$CLI_IMAGE_NAME:$CI_COMMIT_SHA" -f "${CI_PROJECT_DIR}/cli/cli.Dockerfile" --build-arg "GOLANG_VERSION=$GOLANG_VERSION" --build-arg "BUILDARGS=$BUILDARGS" --build-arg "GITLAB_PROXY=${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/" .
- docker push "$CLI_IMAGE_NAME:$CI_COMMIT_SHA"
- docker tag "$CLI_IMAGE_NAME:$CI_COMMIT_SHA" "$CLI_IMAGE_NAME:$CI_COMMIT_REF_SLUG"
- docker push "$CLI_IMAGE_NAME:$CI_COMMIT_REF_SLUG"
<<: *build
build-venv-manager-image:
script:
- VENV_MANAGER_IMAGE_NAME="${CI_REGISTRY_IMAGE}/venv-manager"
- docker buildx build -t "$VENV_MANAGER_IMAGE_NAME:$DOCKER_TAG" -f "${CI_PROJECT_DIR}/applications/venv-manager/venv-manager.Dockerfile" --build-arg "GOLANG_VERSION=$GOLANG_VERSION" --build-arg "GITLAB_PROXY=${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/" .
- docker push "$VENV_MANAGER_IMAGE_NAME:$DOCKER_TAG"
- docker buildx build -t "$VENV_MANAGER_IMAGE_NAME:$CI_COMMIT_SHA" -f "${CI_PROJECT_DIR}/applications/venv-manager/venv-manager.Dockerfile" --build-arg "GOLANG_VERSION=$GOLANG_VERSION" --build-arg "GITLAB_PROXY=${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/" .
- docker push "$VENV_MANAGER_IMAGE_NAME:$CI_COMMIT_SHA"
- docker tag "$VENV_MANAGER_IMAGE_NAME:$CI_COMMIT_SHA" "$VENV_MANAGER_IMAGE_NAME:$CI_COMMIT_REF_SLUG"
- docker push "$VENV_MANAGER_IMAGE_NAME:$CI_COMMIT_REF_SLUG"
<<: *build
build-arista-routing-engine-image:
script:
- ARISTA_ROUTING_ENGINE_IMAGE_NAME="${CI_REGISTRY_IMAGE}/arista-routing-engine"
- docker buildx build -t "$ARISTA_ROUTING_ENGINE_IMAGE_NAME:$DOCKER_TAG" -f "${CI_PROJECT_DIR}/applications/arista-routing-engine/arista-routing-engine.Dockerfile" --build-arg "GOLANG_VERSION=$GOLANG_VERSION" --build-arg "GITLAB_PROXY=${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/" .
- docker push "$ARISTA_ROUTING_ENGINE_IMAGE_NAME:$DOCKER_TAG"
- docker buildx build -t "$ARISTA_ROUTING_ENGINE_IMAGE_NAME:$CI_COMMIT_SHA" -f "${CI_PROJECT_DIR}/applications/arista-routing-engine/arista-routing-engine.Dockerfile" --build-arg "GOLANG_VERSION=$GOLANG_VERSION" --build-arg "GITLAB_PROXY=${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/" .
- docker push "$ARISTA_ROUTING_ENGINE_IMAGE_NAME:$CI_COMMIT_SHA"
- docker tag "$ARISTA_ROUTING_ENGINE_IMAGE_NAME:$CI_COMMIT_SHA" "$ARISTA_ROUTING_ENGINE_IMAGE_NAME:$CI_COMMIT_REF_SLUG"
- docker push "$ARISTA_ROUTING_ENGINE_IMAGE_NAME:$CI_COMMIT_REF_SLUG"
<<: *build
build-plugin-registry-image:
script:
- PLUGIN_REGISTRY_IMAGE_NAME="${CI_REGISTRY_IMAGE}/plugin-registry"
- docker buildx build -t "$PLUGIN_REGISTRY_IMAGE_NAME:$DOCKER_TAG" -f "${CI_PROJECT_DIR}/plugin-registry/plugin-registry.Dockerfile" --build-arg "GOLANG_VERSION=$GOLANG_VERSION" --build-arg "GITLAB_PROXY=${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/" .
- docker push "$PLUGIN_REGISTRY_IMAGE_NAME:$DOCKER_TAG"
- docker buildx build -t "$PLUGIN_REGISTRY_IMAGE_NAME:$CI_COMMIT_SHA" -f "${CI_PROJECT_DIR}/plugin-registry/plugin-registry.Dockerfile" --build-arg "GOLANG_VERSION=$GOLANG_VERSION" --build-arg "GITLAB_PROXY=${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/" .
- docker push "$PLUGIN_REGISTRY_IMAGE_NAME:$CI_COMMIT_SHA"
- docker tag "$PLUGIN_REGISTRY_IMAGE_NAME:$CI_COMMIT_SHA" "$PLUGIN_REGISTRY_IMAGE_NAME:$CI_COMMIT_REF_SLUG"
- docker push "$PLUGIN_REGISTRY_IMAGE_NAME:$CI_COMMIT_REF_SLUG"
<<: *build
build-integration-test-images:
......@@ -67,11 +73,11 @@ build-integration-test-images:
- apk add openssl make
- make generate-certs
# Build gosdn with ssl certificates
- docker buildx build -t "$CI_REGISTRY_IMAGE:${DOCKER_TAG}_integration-test" -f "${CI_PROJECT_DIR}/.gitlab/ci/gosdn-integration.Dockerfile" --build-arg "GOSDN_IMAGE=$CI_REGISTRY_IMAGE:${DOCKER_TAG}" .
- docker buildx build -t "$CI_REGISTRY_IMAGE:${CI_COMMIT_SHA}_integration-test" -f "${CI_PROJECT_DIR}/.gitlab/ci/gosdn-integration.Dockerfile" --build-arg "GOSDN_IMAGE=$CI_REGISTRY_IMAGE:${CI_COMMIT_SHA}" .
# Update gnmi-target with ssl certificates
- docker buildx build -t $GNMI_TARGET_INTEGRATION_IMAGE -f "${CI_PROJECT_DIR}/.gitlab/ci/gnmi-cert-integration.Dockerfile" --build-arg "GNMI_TARGET_IMAGE=${GNMI_TARGET_IMAGE}" .
# Push images
- docker push "$CI_REGISTRY_IMAGE:${DOCKER_TAG}_integration-test"
- docker push "$CI_REGISTRY_IMAGE:${CI_COMMIT_SHA}_integration-test"
- docker push $GNMI_TARGET_INTEGRATION_IMAGE
artifacts:
paths:
......
.release: &release
stage: release
image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/docker:latest
services:
- name: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/docker:latest
alias: docker
variables:
RELEASE_DOCKER_TAG: $CI_COMMIT_REF_SLUG
before_script:
- apk add git
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker login -u $CI_DEPENDENCY_PROXY_USER -p $CI_DEPENDENCY_PROXY_PASSWORD $CI_DEPENDENCY_PROXY_SERVER
needs: []
only:
- tags
release-controller-image:
script:
- CONTROLLER_IMAGE_NAME="${CI_REGISTRY_IMAGE}"
- docker buildx build -t "${CONTROLLER_IMAGE_NAME}:${RELEASE_DOCKER_TAG}" -f "${CI_PROJECT_DIR}/controller/controller.Dockerfile" --build-arg "GOLANG_VERSION=$GOLANG_VERSION" --build-arg "BUILDARGS=$BUILDARGS" --build-arg "GITLAB_PROXY=${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/" .
- docker push "${CONTROLLER_IMAGE_NAME}:${RELEASE_DOCKER_TAG}"
- docker tag "${CONTROLLER_IMAGE_NAME}:${RELEASE_DOCKER_TAG}" "${CONTROLLER_IMAGE_NAME}:latest"
- docker push "${CONTROLLER_IMAGE_NAME}:latest"
<<: *release
release-cli-image:
script:
- CLI_IMAGE_NAME="${CI_REGISTRY_IMAGE}/gosdnc"
- docker buildx build -t "$CLI_IMAGE_NAME:$RELEASE_DOCKER_TAG" -f "${CI_PROJECT_DIR}/cli/cli.Dockerfile" --build-arg "GOLANG_VERSION=$GOLANG_VERSION" --build-arg "BUILDARGS=$BUILDARGS" --build-arg "GITLAB_PROXY=${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/" .
- docker push "$CLI_IMAGE_NAME:$RELEASE_DOCKER_TAG"
- docker tag "$CLI_IMAGE_NAME:$RELEASE_DOCKER_TAG" "$CLI_IMAGE_NAME:latest"
- docker push "$CLI_IMAGE_NAME:latest"
<<: *release
release-venv-manager-image:
script:
- VENV_MANAGER_IMAGE_NAME="${CI_REGISTRY_IMAGE}/venv-manager"
- docker buildx build -t "$VENV_MANAGER_IMAGE_NAME:$RELEASE_DOCKER_TAG" -f "${CI_PROJECT_DIR}/applications/venv-manager/venv-manager.Dockerfile" --build-arg "GOLANG_VERSION=$GOLANG_VERSION" --build-arg "GITLAB_PROXY=${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/" .
- docker push "$VENV_MANAGER_IMAGE_NAME:$RELEASE_DOCKER_TAG"
- docker tag "$VENV_MANAGER_IMAGE_NAME:$RELEASE_DOCKER_TAG" "$VENV_MANAGER_IMAGE_NAME:latest"
- docker push "$VENV_MANAGER_IMAGE_NAME:latest"
<<: *release
release-plugin-registry-image:
script:
- PLUGIN_REGISTRY_IMAGE_NAME="${CI_REGISTRY_IMAGE}/plugin-registry"
- docker buildx build -t "$PLUGIN_REGISTRY_IMAGE_NAME:$RELEASE_DOCKER_TAG" -f "${CI_PROJECT_DIR}/plugin-registry/plugin-registry.Dockerfile" --build-arg "GOLANG_VERSION=$GOLANG_VERSION" --build-arg "GITLAB_PROXY=${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/" .
- docker push "$PLUGIN_REGISTRY_IMAGE_NAME:$RELEASE_DOCKER_TAG"
- docker tag "$PLUGIN_REGISTRY_IMAGE_NAME:$RELEASE_DOCKER_TAG" "$PLUGIN_REGISTRY_IMAGE_NAME:latest"
- docker push "$PLUGIN_REGISTRY_IMAGE_NAME:latest"
<<: *release
......@@ -20,7 +20,7 @@ integration-test-gosdn:
alias: rabbitmq
variables:
HEALTHCHECK_TCP_PORT: "5672"
- name: ${CI_REGISTRY_IMAGE}/plugin-registry:${DOCKER_TAG}
- name: ${CI_REGISTRY_IMAGE}/plugin-registry:${CI_COMMIT_SHA}
alias: plugin-registry
- name: $GNMI_TARGET_INTEGRATION_IMAGE
alias: gnmi-target_A
......@@ -29,7 +29,7 @@ integration-test-gosdn:
alias: gnmi-target_B
command: ["start", "--cert", "/etc/gnmi-target/ssl/certs/gnmi-target-selfsigned.crt", "--key", "/etc/gnmi-target/ssl/private/gnmi-target-selfsigned.key", "--ca_file", "/etc/gnmi-target/ssl/ca.crt"]
# Use gosdn docker image from this branch
- name: "${CI_REGISTRY_IMAGE}:${DOCKER_TAG}_integration-test"
- name: "${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA}_integration-test"
alias: gosdn
variables:
GOSDN_ADMIN_PASSWORD: TestPassword
......
#!/bin/sh
TEMPLATE="{{ (index (index .NetworkSettings.Ports \"${1}/tcp\") 0).HostPort }}"
docker inspect -f "${TEMPLATE}" ${2}
import sys
from hashlib import sha256
input_data = sys.argv[1]
# Hash input and store it as string
hashed_string = sha256(bytes(input_data, encoding='utf8')).hexdigest()
final_string = ""
# Iterate over hash and take out all chars that are a number
for character in hashed_string:
if character.isdigit():
final_string += character
final_int = int(final_string)
# Print number mod 256 to get a number between 0 and 255 for ip adress
print(final_int % 256)
#!/usr/bin/env bash
# Use this script to test if a given TCP host/port are available
WAITFORIT_cmdname=${0##*/}
echoerr() { if [[ $WAITFORIT_QUIET -ne 1 ]]; then echo "$@" 1>&2; fi }
usage()
{
cat << USAGE >&2
Usage:
$WAITFORIT_cmdname host:port [-s] [-t timeout] [-- command args]
-h HOST | --host=HOST Host or IP under test
-p PORT | --port=PORT TCP port under test
Alternatively, you specify the host and port as host:port
-s | --strict Only execute subcommand if the test succeeds
-q | --quiet Don't output any status messages
-t TIMEOUT | --timeout=TIMEOUT
Timeout in seconds, zero for no timeout
-- COMMAND ARGS Execute command with args after the test finishes
USAGE
exit 1
}
wait_for()
{
if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
echoerr "$WAITFORIT_cmdname: waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
else
echoerr "$WAITFORIT_cmdname: waiting for $WAITFORIT_HOST:$WAITFORIT_PORT without a timeout"
fi
WAITFORIT_start_ts=$(date +%s)
while :
do
if [[ $WAITFORIT_ISBUSY -eq 1 ]]; then
nc -z $WAITFORIT_HOST $WAITFORIT_PORT
WAITFORIT_result=$?
else
(echo -n > /dev/tcp/$WAITFORIT_HOST/$WAITFORIT_PORT) >/dev/null 2>&1
WAITFORIT_result=$?
fi
if [[ $WAITFORIT_result -eq 0 ]]; then
WAITFORIT_end_ts=$(date +%s)
echoerr "$WAITFORIT_cmdname: $WAITFORIT_HOST:$WAITFORIT_PORT is available after $((WAITFORIT_end_ts - WAITFORIT_start_ts)) seconds"
break
fi
sleep 1
done
return $WAITFORIT_result
}
wait_for_wrapper()
{
# In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692
if [[ $WAITFORIT_QUIET -eq 1 ]]; then
timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --quiet --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
else
timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
fi
WAITFORIT_PID=$!
trap "kill -INT -$WAITFORIT_PID" INT
wait $WAITFORIT_PID
WAITFORIT_RESULT=$?
if [[ $WAITFORIT_RESULT -ne 0 ]]; then
echoerr "$WAITFORIT_cmdname: timeout occurred after waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
fi
return $WAITFORIT_RESULT
}
# process arguments
while [[ $# -gt 0 ]]
do
case "$1" in
*:* )
WAITFORIT_hostport=(${1//:/ })
WAITFORIT_HOST=${WAITFORIT_hostport[0]}
WAITFORIT_PORT=${WAITFORIT_hostport[1]}
shift 1
;;
--child)
WAITFORIT_CHILD=1
shift 1
;;
-q | --quiet)
WAITFORIT_QUIET=1
shift 1
;;
-s | --strict)
WAITFORIT_STRICT=1
shift 1
;;
-h)
WAITFORIT_HOST="$2"
if [[ $WAITFORIT_HOST == "" ]]; then break; fi
shift 2
;;
--host=*)
WAITFORIT_HOST="${1#*=}"
shift 1
;;
-p)
WAITFORIT_PORT="$2"
if [[ $WAITFORIT_PORT == "" ]]; then break; fi
shift 2
;;
--port=*)
WAITFORIT_PORT="${1#*=}"
shift 1
;;
-t)
WAITFORIT_TIMEOUT="$2"
if [[ $WAITFORIT_TIMEOUT == "" ]]; then break; fi
shift 2
;;
--timeout=*)
WAITFORIT_TIMEOUT="${1#*=}"
shift 1
;;
--)
shift
WAITFORIT_CLI=("$@")
break
;;
--help)
usage
;;
*)
echoerr "Unknown argument: $1"
usage
;;
esac
done
if [[ "$WAITFORIT_HOST" == "" || "$WAITFORIT_PORT" == "" ]]; then
echoerr "Error: you need to provide a host and port to test."
usage
fi
WAITFORIT_TIMEOUT=${WAITFORIT_TIMEOUT:-15}
WAITFORIT_STRICT=${WAITFORIT_STRICT:-0}
WAITFORIT_CHILD=${WAITFORIT_CHILD:-0}
WAITFORIT_QUIET=${WAITFORIT_QUIET:-0}
# Check to see if timeout is from busybox?
WAITFORIT_TIMEOUT_PATH=$(type -p timeout)
WAITFORIT_TIMEOUT_PATH=$(realpath $WAITFORIT_TIMEOUT_PATH 2>/dev/null || readlink -f $WAITFORIT_TIMEOUT_PATH)
WAITFORIT_BUSYTIMEFLAG=""
if [[ $WAITFORIT_TIMEOUT_PATH =~ "busybox" ]]; then
WAITFORIT_ISBUSY=1
# Check if busybox timeout uses -t flag
# (recent Alpine versions don't support -t anymore)
if timeout &>/dev/stdout | grep -q -e '-t '; then
WAITFORIT_BUSYTIMEFLAG="-t"
fi
else
WAITFORIT_ISBUSY=0
fi
if [[ $WAITFORIT_CHILD -gt 0 ]]; then
wait_for
WAITFORIT_RESULT=$?
exit $WAITFORIT_RESULT
else
if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
wait_for_wrapper
WAITFORIT_RESULT=$?
else
wait_for
WAITFORIT_RESULT=$?
fi
fi
if [[ $WAITFORIT_CLI != "" ]]; then
if [[ $WAITFORIT_RESULT -ne 0 && $WAITFORIT_STRICT -eq 1 ]]; then
echoerr "$WAITFORIT_cmdname: strict mode, refusing to execute subprocess"
exit $WAITFORIT_RESULT
fi
exec "${WAITFORIT_CLI[@]}"
else
exit $WAITFORIT_RESULT
fi
variables:
DOCKER_TLS_CERTDIR: "/certs"
build-docker:
before_script:
- echo "override global before script"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment