Update image build script to run in a docker
Updated Makefile to run the build baclient package for go on the host instead of as a docker container, to allow the Makefile be called from another container. Reason being, in a docker-in-docker, volume mapping requires knowledge of host filesystem path instead of the docker daemon filesystem path. Corrected proxy configuration in the scripts to use the USE_PROXY, PROXY and NO_PROXY environment variables. Updated Dockerfile to add multi-stage build, to avoid including the golang-go package in the docker image. Stage one creates the baclient Go library, and stage two creates the drydock image, and copies the baclient from stage one image. Change-Id: I29a30e870da8f44279dcd62bb1173165fa939d43
This commit is contained in:
parent
3b4738efd1
commit
54675558fd
10
Makefile
10
Makefile
|
@ -27,7 +27,6 @@ PUSH_IMAGE ?= false
|
||||||
LABEL ?= org.airshipit.build=community
|
LABEL ?= org.airshipit.build=community
|
||||||
COMMIT ?= $(shell git rev-parse HEAD)
|
COMMIT ?= $(shell git rev-parse HEAD)
|
||||||
IMAGE ?= ${DOCKER_REGISTRY}/${IMAGE_PREFIX}/${IMAGE_NAME}:${IMAGE_TAG}
|
IMAGE ?= ${DOCKER_REGISTRY}/${IMAGE_PREFIX}/${IMAGE_NAME}:${IMAGE_TAG}
|
||||||
GO_BUILDER ?= docker.io/golang:1.10-stretch
|
|
||||||
|
|
||||||
export
|
export
|
||||||
|
|
||||||
|
@ -91,7 +90,7 @@ helm-install:
|
||||||
|
|
||||||
# Make targets intended for use by the primary targets above.
|
# Make targets intended for use by the primary targets above.
|
||||||
|
|
||||||
build_drydock: external_dep build_baclient
|
build_drydock: external_dep
|
||||||
export; tools/drydock_image_build.sh
|
export; tools/drydock_image_build.sh
|
||||||
ifeq ($(PUSH_IMAGE), true)
|
ifeq ($(PUSH_IMAGE), true)
|
||||||
docker push $(IMAGE)
|
docker push $(IMAGE)
|
||||||
|
@ -99,11 +98,12 @@ endif
|
||||||
|
|
||||||
# Make target for building bootaction signal client
|
# Make target for building bootaction signal client
|
||||||
build_baclient: external_dep
|
build_baclient: external_dep
|
||||||
docker run -tv $(shell realpath go):/work -v $(shell realpath $(BUILD_DIR)):/build -e GOPATH=/work $(GO_BUILDER) go build -o /build/baclient baclient
|
sudo ./tools/baclient_build.sh $(shell realpath go) $(shell realpath ${BUILD_DIR})
|
||||||
|
touch ./baclient_built
|
||||||
|
|
||||||
# Make target for testing bootaction signal client
|
# Make target for testing bootaction signal client
|
||||||
test_baclient: external_dep
|
test_baclient: external_dep build_baclient
|
||||||
docker run -tv $(shell realpath go):/work -e GOPATH=/work $(GO_BUILDER) go test -v baclient
|
GOPATH=$(shell realpath go) go test -v baclient
|
||||||
|
|
||||||
docs: clean drydock_docs
|
docs: clean drydock_docs
|
||||||
|
|
||||||
|
|
|
@ -6,8 +6,8 @@ set -x
|
||||||
|
|
||||||
if [[ ! -z $(uname -a | grep Ubuntu) ]]
|
if [[ ! -z $(uname -a | grep Ubuntu) ]]
|
||||||
then
|
then
|
||||||
apt update
|
apt-get update
|
||||||
installed_pkgs=$(apt list --installed | cut -d'/' -f1)
|
installed_pkgs=$(dpkg --get-selections | awk '!/deinstall/ { gsub(/:.*/,"",$1); print $1 }')
|
||||||
set -a added_pkgs
|
set -a added_pkgs
|
||||||
for reqfile in $(ls requirements-host*.txt)
|
for reqfile in $(ls requirements-host*.txt)
|
||||||
do
|
do
|
||||||
|
@ -33,7 +33,7 @@ then
|
||||||
done
|
done
|
||||||
if [[ ${#added_pkgs[@]} -gt 0 ]]
|
if [[ ${#added_pkgs[@]} -gt 0 ]]
|
||||||
then
|
then
|
||||||
DEBIAN_FRONTEND=noninteractive apt \
|
DEBIAN_FRONTEND=noninteractive apt-get \
|
||||||
-o Dpkg::Options::="--force-confdef" \
|
-o Dpkg::Options::="--force-confdef" \
|
||||||
-o Dpkg::Options::="--force-confold" \
|
-o Dpkg::Options::="--force-confold" \
|
||||||
install -y --no-install-recommends "${added_pkgs[@]}"
|
install -y --no-install-recommends "${added_pkgs[@]}"
|
||||||
|
|
|
@ -13,6 +13,31 @@
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
ARG FROM=ubuntu:16.04
|
ARG FROM=ubuntu:16.04
|
||||||
|
FROM ${FROM} AS baclient_builder
|
||||||
|
|
||||||
|
ARG UBUNTU_REPO=http://archive.ubuntu.com/ubuntu
|
||||||
|
ARG TRUSTED_UBUNTU_REPO=no
|
||||||
|
ARG ALLOW_UNAUTHENTICATED=false
|
||||||
|
ARG BUILD_DIR
|
||||||
|
ENV container docker
|
||||||
|
ENV LC_ALL C.UTF-8
|
||||||
|
ENV LANG C.UTF-8
|
||||||
|
|
||||||
|
# Copy direct dependency requirements only to build a dependency layer
|
||||||
|
RUN echo "deb ${UBUNTU_REPO} xenial main restricted universe multiverse" > /etc/apt/sources.list; \
|
||||||
|
echo "deb ${UBUNTU_REPO} xenial-security main restricted universe multiverse" >> /etc/apt/sources.list; \
|
||||||
|
echo "deb ${UBUNTU_REPO} xenial-updates main restricted universe multiverse" >> /etc/apt/sources.list; \
|
||||||
|
cat /etc/apt/sources.list; \
|
||||||
|
echo "APT::Get::AllowUnauthenticated ${ALLOW_UNAUTHENTICATED};" >> /etc/apt/apt.conf.d/00-local-mirrors;
|
||||||
|
|
||||||
|
|
||||||
|
COPY ./tools/baclient_build.sh /tmp/drydock/
|
||||||
|
COPY ./go /tmp/drydock/go
|
||||||
|
WORKDIR /tmp/drydock
|
||||||
|
RUN ./baclient_build.sh /tmp/drydock/go /tmp/drydock/baclient; \
|
||||||
|
rm -r /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
|
||||||
FROM ${FROM}
|
FROM ${FROM}
|
||||||
|
|
||||||
LABEL org.opencontainers.image.authors='airship-discuss@lists.airshipit.org, irc://#airshipit@freenode' \
|
LABEL org.opencontainers.image.authors='airship-discuss@lists.airshipit.org, irc://#airshipit@freenode' \
|
||||||
|
@ -60,7 +85,7 @@ COPY ./alembic /tmp/drydock/alembic
|
||||||
COPY ./alembic.ini /tmp/drydock/alembic.ini
|
COPY ./alembic.ini /tmp/drydock/alembic.ini
|
||||||
COPY ./entrypoint.sh /tmp/drydock/entrypoint.sh
|
COPY ./entrypoint.sh /tmp/drydock/entrypoint.sh
|
||||||
|
|
||||||
COPY ${BUILD_DIR}/baclient /tmp/drydock/python/drydock_provisioner/assets/baclient
|
COPY --from=baclient_builder /tmp/drydock/baclient /tmp/drydock/python/drydock_provisioner/assets/baclient
|
||||||
|
|
||||||
|
|
||||||
EXPOSE $PORT
|
EXPOSE $PORT
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Install golang-go package, and build the baclient library
|
||||||
|
set -x
|
||||||
|
|
||||||
|
if $(uname -a | grep -q Ubuntu); then
|
||||||
|
GOPATH=$1
|
||||||
|
BUILD_DIR=$2
|
||||||
|
if [[ ! -f ./baclient_built ]]; then
|
||||||
|
apt-get update
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt-get \
|
||||||
|
-o Dpkg::Options::="--force-confdef" \
|
||||||
|
-o Dpkg::Options::="--force-confold" \
|
||||||
|
install -y --no-install-recommends golang-go
|
||||||
|
GOPATH=${GOPATH} go build -o ${BUILD_DIR}/baclient baclient
|
||||||
|
else
|
||||||
|
echo "Baclient library is already built. No action."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Only support testing on Ubuntu hosts at this time."
|
||||||
|
fi
|
||||||
|
|
|
@ -28,16 +28,21 @@ then
|
||||||
ADDL_BUILD_ARGS="${ADDL_BUILD_ARGS} --build-arg PIP_TRUSTED_HOST=${PIP_TRUSTED_HOST}"
|
ADDL_BUILD_ARGS="${ADDL_BUILD_ARGS} --build-arg PIP_TRUSTED_HOST=${PIP_TRUSTED_HOST}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
PROXY_ARGS=""
|
||||||
|
if [[ "${USE_PROXY}" == true ]]; then
|
||||||
|
PROXY_ARGS="--build-arg http_proxy=${PROXY} \
|
||||||
|
--build-arg https_proxy=${PROXY} \
|
||||||
|
--build-arg HTTP_PROXY=${PROXY} \
|
||||||
|
--build-arg HTTPS_PROXY=${PROXY} \
|
||||||
|
--build-arg no_proxy=${NO_PROXY} \
|
||||||
|
--build-arg NO_PROXY=${NO_PROXY}"
|
||||||
|
fi
|
||||||
|
|
||||||
docker build --network host -t ${IMAGE} --label ${LABEL} \
|
docker build --network host -t ${IMAGE} --label ${LABEL} \
|
||||||
--label org.opencontainers.image.revision=${COMMIT} \
|
--label org.opencontainers.image.revision=${COMMIT} \
|
||||||
--label org.opencontainers.image.created="$(date --rfc-3339=seconds --utc)" \
|
--label org.opencontainers.image.created="$(date --rfc-3339=seconds --utc)" \
|
||||||
--label org.opencontainers.image.title=${IMAGE_NAME} \
|
--label org.opencontainers.image.title=${IMAGE_NAME} \
|
||||||
-f images/drydock/Dockerfile \
|
-f images/drydock/Dockerfile \
|
||||||
${ADDL_BUILD_ARGS} \
|
|
||||||
--build-arg BUILD_DIR=${BUILD_DIR} \
|
--build-arg BUILD_DIR=${BUILD_DIR} \
|
||||||
--build-arg http_proxy=${http_proxy} \
|
${PROXY_ARGS} \
|
||||||
--build-arg https_proxy=${https_proxy} \
|
${ADDL_BUILD_ARGS} .
|
||||||
--build-arg HTTP_PROXY=${HTTP_PROXY} \
|
|
||||||
--build-arg HTTPS_PROXY=${HTTPS_PROXY} \
|
|
||||||
--build-arg no_proxy=${no_proxy} \
|
|
||||||
--build-arg NO_PROXY=${NO_PROXY} .
|
|
Loading…
Reference in New Issue