Allow to build image with common from Gerrit
Story: 2001694 Task: 24226 Change-Id: I356c9fdde670433bef1f3c70e02f2f760521ee0a
This commit is contained in:
parent
adfc935a62
commit
15c761a6af
@ -44,9 +44,11 @@ ONBUILD ARG GITHUB_REPO
|
||||
ONBUILD ARG REPO_VERSION
|
||||
ONBUILD ARG GIT_COMMIT
|
||||
ONBUILD ARG CONSTRAINTS_BRANCH
|
||||
ONBUILD ARG CONSTRAINTS_FILE=http://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt
|
||||
ONBUILD ARG CONSTRAINTS_FILE
|
||||
ONBUILD ARG EXTRA_DEPS
|
||||
ONBUILD ARG COMMON_REPO=https://git.openstack.org/openstack/monasca-common
|
||||
ONBUILD ARG COMMON_REPO
|
||||
ONBUILD ARG COMMON_VERSION
|
||||
ONBUILD ARG COMMON_GIT_COMMIT
|
||||
|
||||
# Build-time metadata as defined at
|
||||
# https://github.com/opencontainers/image-spec/blob/master/annotations.md
|
||||
@ -59,6 +61,9 @@ ONBUILD LABEL org.opencontainers.image.revision="$GIT_COMMIT"
|
||||
ONBUILD LABEL org.opencontainers.image.licenses="Apache-2.0"
|
||||
ONBUILD LABEL org.openstack.constraints_uri="$CONSTRAINTS_FILE?h=$CONSTRAINTS_BRANCH"
|
||||
ONBUILD LABEL org.openstack.monasca.python.extra_deps="$EXTRA_DEPS"
|
||||
ONBUILD LABEL org.openstack.monasca.common.source="$COMMON_REPO"
|
||||
ONBUILD LABEL org.openstack.monasca.common.version="$COMMON_VERSION"
|
||||
ONBUILD LABEL org.openstack.monasca.common.revision="$COMMON_GIT_COMMIT"
|
||||
|
||||
# Every child image need to provide starting and health check script.
|
||||
# If they're not provided build will fail. We want that for uniformity.
|
||||
@ -81,15 +86,30 @@ ONBUILD RUN \
|
||||
mkdir -p /app && \
|
||||
git -C /app init && \
|
||||
git -C /app remote add origin "$APP_REPO" && \
|
||||
echo "Cloning app in version: $REPO_VERSION" && \
|
||||
git -C /app fetch origin "$REPO_VERSION" && \
|
||||
git -C /app reset --hard FETCH_HEAD && \
|
||||
wget --output-document /app/upper-constraints.txt \
|
||||
"$CONSTRAINTS_FILE"?h="$CONSTRAINTS_BRANCH" && \
|
||||
# Download monasca-common
|
||||
mkdir -p /monasca-common && \
|
||||
git -C /monasca-common init && \
|
||||
git -C /monasca-common remote add origin "$COMMON_REPO" && \
|
||||
echo "Cloning monasca-common in version: $COMMON_VERSION" && \
|
||||
git -C /monasca-common fetch origin "$COMMON_VERSION" && \
|
||||
git -C /monasca-common reset --hard FETCH_HEAD && \
|
||||
# When creating image from master, stable branch or commit use
|
||||
# monasca-common from git repository.
|
||||
[ ! "$(git -C /app tag -l ${REPO_VERSION})" ] && \
|
||||
sed -i "s|monasca-common.*|-e git+$COMMON_REPO@$CONSTRAINTS_BRANCH#egg=monasca-common|" \
|
||||
# monasca-common from git repository in /monasca-common,
|
||||
# otherwise use the version from upper-constraints.txt
|
||||
[ ! "$(git -C /monasca-common tag -l ${COMMON_VERSION})" ] && \
|
||||
sed -i "s|monasca-common.*||" \
|
||||
/app/requirements.txt || true && \
|
||||
[ ! "$(git -C /monasca-common tag -l ${COMMON_VERSION})" ] && \
|
||||
sed -i "s|monasca-common.*||" \
|
||||
/app/upper-constraints.txt || true && \
|
||||
pip3 install \
|
||||
--editable /monasca-common \
|
||||
--constraint /app/upper-constraints.txt && \
|
||||
# Install packages needed by wait scripts and used for templating.
|
||||
pip3 install \
|
||||
pykafka \
|
||||
@ -105,20 +125,24 @@ ONBUILD RUN \
|
||||
printf "App: %s\\n" "$DOCKER_IMAGE" >> /VERSIONS && \
|
||||
printf "Repository: %s\\n" "$APP_REPO" >> /VERSIONS && \
|
||||
printf "Version: %s\\n" "$REPO_VERSION" >> /VERSIONS && \
|
||||
printf "Revision: %s\\n" "$GIT_COMMIT" >> /VERSIONS && \
|
||||
printf "Build date: %s\\n" "$CREATION_TIME" >> /VERSIONS && \
|
||||
printf "Revision: %s\\n" \
|
||||
"$(git -C /app rev-parse FETCH_HEAD)" >> /VERSIONS && \
|
||||
printf "Monasca-common version: %s\\n" \
|
||||
printf "Monasca-common version: %s\\n" "$COMMON_VERSION" \
|
||||
>> /VERSIONS && \
|
||||
printf "Monasca-common pip version: %s\\n" \
|
||||
"$(pip3 freeze 2>&1 | grep 'monasca-common')" >> /VERSIONS && \
|
||||
printf "Monasca-common revision: %s\\n" \
|
||||
"$COMMON_GIT_COMMIT" >> /VERSIONS && \
|
||||
printf "Constraints file: %s\\n" \
|
||||
"$CONSTRAINTS_FILE"?h="$CONSTRAINTS_BRANCH" >> /VERSIONS && \
|
||||
# Clean after instalation.
|
||||
apk del .build-deps && \
|
||||
# Pip is leaving monasca-common repo in /src so remove it.
|
||||
rm -rf \
|
||||
/app \
|
||||
/root/.cache/ \
|
||||
/src/monasca-common/java/ \
|
||||
/monasca-common/java/ \
|
||||
/tmp/* \
|
||||
/var/cache/apk/* \
|
||||
/var/log/* && \
|
||||
|
@ -5,13 +5,14 @@ ARG APP_REPO=https://git.openstack.org/openstack/monasca-api
|
||||
# Branch, tag or git hash to build from.
|
||||
ARG REPO_VERSION=master
|
||||
ARG CONSTRAINTS_BRANCH=master
|
||||
ARG COMMON_VERSION=master
|
||||
|
||||
# Extra Python3 dependencies.
|
||||
ARG EXTRA_DEPS="gunicorn influxdb python-memcached"
|
||||
|
||||
# Always start from `monasca-base` image and use specific tag of it.
|
||||
ARG BASE_TAG=1.0.0
|
||||
FROM monasca-base:$BASE_TAG
|
||||
FROM monasca/base:$BASE_TAG
|
||||
|
||||
# Environment variables used for our service or wait scripts.
|
||||
ENV \
|
||||
|
@ -19,22 +19,30 @@
|
||||
set -x # Print each script step.
|
||||
set -eo pipefail # Exit the script if any statement returns error.
|
||||
|
||||
# This script is used for building Docker image with proper labels.
|
||||
# This script is used for building Docker image with proper labels
|
||||
# and proper version of monasca-common.
|
||||
#
|
||||
# Example usage:
|
||||
# $ ./build_image.sh <repository_version> <upper_constains_branch>
|
||||
# $ ./build_image.sh <repository_version> <upper_constains_branch> <common_version>
|
||||
#
|
||||
# Everything after `./build_image.sh` is optional and by default configured
|
||||
# to get versions from `Dockerfile`.
|
||||
#
|
||||
# To build from master branch (default):
|
||||
# $ ./build_image.sh
|
||||
# $ ./build_image.sh
|
||||
# To build specific version run this script in the following way:
|
||||
# $ ./build_image.sh stable/queens
|
||||
# $ ./build_image.sh stable/queens
|
||||
# Building from specific commit:
|
||||
# $ ./build_image.sh cb7f226
|
||||
# $ ./build_image.sh cb7f226
|
||||
# When building from a tag monasca-common will be used in version available
|
||||
# in upper constraint file:
|
||||
# $ ./build_image.sh 2.5.0
|
||||
# $ ./build_image.sh 2.5.0
|
||||
# To build image from Gerrit patch sets that is targeting branch stable/queens:
|
||||
# $ ./build_image.sh refs/changes/51/558751/1 stable/queens
|
||||
# $ ./build_image.sh refs/changes/51/558751/1 stable/queens
|
||||
#
|
||||
# If you want to build image with custom monasca-common version you need
|
||||
# to provide it as in the following example:
|
||||
# $ ./build_image.sh master master refs/changes/19/595719/3
|
||||
|
||||
[ -z "$DOCKER_IMAGE" ] && \
|
||||
DOCKER_IMAGE=$(\grep DOCKER_IMAGE Dockerfile | cut -f2 -d"=")
|
||||
@ -50,19 +58,47 @@ REPO_VERSION_CLEAN=$(echo "$REPO_VERSION" | sed 's|/|-|g')
|
||||
GITHUB_REPO=$(echo "$APP_REPO" | sed 's/git.openstack.org/github.com/' | \
|
||||
sed 's/ssh:/https:/')
|
||||
|
||||
if [ -z "$CONSTRAINTS_FILE" ]; then
|
||||
CONSTRAINTS_FILE=$(\grep CONSTRAINTS_FILE Dockerfile | cut -f2 -d"=") || true
|
||||
: "${CONSTRAINTS_FILE:=http://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt}"
|
||||
fi
|
||||
|
||||
: "${CONSTRAINTS_BRANCH:=$2}"
|
||||
[ -z "$CONSTRAINTS_BRANCH" ] && \
|
||||
CONSTRAINTS_BRANCH=$(\grep CONSTRAINTS_BRANCH Dockerfile | cut -f2 -d"=")
|
||||
|
||||
# When using stable version of repository use same stable constraints file.
|
||||
case "$REPO_VERSION" in
|
||||
*stable*)
|
||||
CONSTRAINTS_BRANCH_CLEAN="$REPO_VERSION"
|
||||
# Get monasca-common version from stable upper constraints file.
|
||||
CONSTRAINTS_TMP_FILE=$(mktemp)
|
||||
wget --output-document "$CONSTRAINTS_TMP_FILE" \
|
||||
"$CONSTRAINTS_FILE"?h="$CONSTRAINTS_BRANCH_CLEAN"
|
||||
UPPER_COMMON=$(\grep 'monasca-common' "$CONSTRAINTS_TMP_FILE")
|
||||
# Get only version part from monasca-common.
|
||||
UPPER_COMMON_VERSION="${UPPER_COMMON##*===}"
|
||||
rm -rf "$CONSTRAINTS_TMP_FILE"
|
||||
;;
|
||||
*)
|
||||
CONSTRAINTS_BRANCH_CLEAN="$CONSTRAINTS_BRANCH"
|
||||
;;
|
||||
esac
|
||||
|
||||
# Monasca-common variables.
|
||||
if [ -z "$COMMON_REPO" ]; then
|
||||
COMMON_REPO=$(\grep COMMON_REPO Dockerfile | cut -f2 -d"=") || true
|
||||
: "${COMMON_REPO:=https://git.openstack.org/openstack/monasca-common}"
|
||||
fi
|
||||
: "${COMMON_VERSION:=$3}"
|
||||
if [ -z "$COMMON_VERSION" ]; then
|
||||
COMMON_VERSION=$(\grep COMMON_VERSION Dockerfile | cut -f2 -d"=") || true
|
||||
if [ "$UPPER_COMMON_VERSION" ]; then
|
||||
# Common from upper constraints file.
|
||||
COMMON_VERSION="$UPPER_COMMON_VERSION"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Clone project to temporary directory for getting proper commit number from
|
||||
# branches and tags. We need this for setting proper image labels.
|
||||
# Docker does not allow to get any data from inside of system when building
|
||||
@ -76,12 +112,23 @@ TMP_DIR=$(mktemp -d)
|
||||
git fetch origin "$REPO_VERSION"
|
||||
git reset --hard FETCH_HEAD
|
||||
)
|
||||
GIT_COMMIT=$(git -C "$TMP_DIR" rev-parse FETCH_HEAD)
|
||||
GIT_COMMIT=$(git -C "$TMP_DIR" rev-parse HEAD)
|
||||
[ -z "${GIT_COMMIT}" ] && echo "No git commit hash found" && exit 1
|
||||
rm -rf "$TMP_DIR"
|
||||
|
||||
# TODO(Dobroslaw): find a way to set label monasca-common with version
|
||||
# we will be using with app.
|
||||
# Do the same for monasca-common.
|
||||
COMMON_TMP_DIR=$(mktemp -d)
|
||||
(
|
||||
cd "$COMMON_TMP_DIR"
|
||||
# This many steps are needed to support gerrit patch sets.
|
||||
git init
|
||||
git remote add origin "$COMMON_REPO"
|
||||
git fetch origin "$COMMON_VERSION"
|
||||
git reset --hard FETCH_HEAD
|
||||
)
|
||||
COMMON_GIT_COMMIT=$(git -C "$COMMON_TMP_DIR" rev-parse HEAD)
|
||||
[ -z "${COMMON_GIT_COMMIT}" ] && echo "No git commit hash found" && exit 1
|
||||
rm -rf "$COMMON_TMP_DIR"
|
||||
|
||||
CREATION_TIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
# Docker tags don't like colons so use shorter version of ISO 8601 for them.
|
||||
@ -93,6 +140,10 @@ docker build --no-cache \
|
||||
--build-arg APP_REPO="$APP_REPO" \
|
||||
--build-arg REPO_VERSION="$REPO_VERSION" \
|
||||
--build-arg GIT_COMMIT="$GIT_COMMIT" \
|
||||
--build-arg CONSTRAINTS_FILE="$CONSTRAINTS_FILE" \
|
||||
--build-arg CONSTRAINTS_BRANCH="$CONSTRAINTS_BRANCH_CLEAN" \
|
||||
--build-arg COMMON_REPO="$COMMON_REPO" \
|
||||
--build-arg COMMON_VERSION="$COMMON_VERSION" \
|
||||
--build-arg COMMON_GIT_COMMIT="$COMMON_GIT_COMMIT" \
|
||||
--tag "$DOCKER_IMAGE":"$REPO_VERSION_CLEAN" \
|
||||
--tag "$DOCKER_IMAGE":"$REPO_VERSION_CLEAN"-"$CREATION_TIME_SHORT" .
|
||||
|
Loading…
x
Reference in New Issue
Block a user