diff --git a/.zuul.yaml b/.zuul.yaml index b095eb35..0633bad4 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -21,17 +21,20 @@ - airship-drydock-omni-test - airship-drydock-chart-build-gate - airship-drydock-chart-build-latest-htk - - airship-drydock-docker-build-gate + - airship-drydock-docker-build-gate-ubuntu_xenial + - airship-drydock-docker-build-gate-ubuntu_bionic gate: jobs: - airship-drydock-omni-test - airship-drydock-chart-build-gate - - airship-drydock-docker-build-gate + - airship-drydock-docker-build-gate-ubuntu_xenial + - airship-drydock-docker-build-gate-ubuntu_bionic post: jobs: - - airship-drydock-docker-publish + - airship-drydock-docker-publish-ubuntu_xenial + - airship-drydock-docker-publish-ubuntu_bionic - drydock-upload-git-mirror - nodeset: @@ -69,7 +72,7 @@ HTK_COMMIT: master - job: - name: airship-drydock-docker-build-gate + name: airship-drydock-docker-build-gate-ubuntu_xenial timeout: 1800 run: tools/gate/playbooks/docker-image-build.yaml nodeset: airship-drydock-single-node @@ -78,12 +81,29 @@ - '^charts/.*' vars: publish: false + distro: ubuntu_xenial tags: dynamic: patch_set: true - job: - name: airship-drydock-docker-publish + name: airship-drydock-docker-build-gate-ubuntu_bionic + timeout: 1800 + run: tools/gate/playbooks/docker-image-build.yaml + nodeset: airship-drydock-single-node + irrelevant-files: + - '^doc/.*' + - '^charts/.*' + vars: + publish: false + distro: ubuntu_bionic + tags: + dynamic: + patch_set: true + + +- job: + name: airship-drydock-docker-publish-ubuntu_xenial timeout: 1800 run: tools/gate/playbooks/docker-image-build.yaml nodeset: airship-drydock-single-node @@ -94,6 +114,27 @@ - '^charts/.*' vars: publish: true + distro: ubuntu_xenial + tags: + dynamic: + branch: true + commit: true + static: + - latest + +- job: + name: airship-drydock-docker-publish-ubuntu_bionic + timeout: 1800 + run: tools/gate/playbooks/docker-image-build.yaml + nodeset: airship-drydock-single-node + secrets: + - airship_drydock_quay_creds + irrelevant-files: + - '^doc/.*' + - '^charts/.*' + vars: + publish: true + distro: ubuntu_bionic tags: dynamic: branch: true diff --git a/Makefile b/Makefile index c4d5b08f..02714622 100644 --- a/Makefile +++ b/Makefile @@ -19,6 +19,7 @@ IMAGE_PREFIX ?= airshipit IMAGE_TAG ?= dev HELM := $(shell realpath $(BUILD_DIR))/helm UBUNTU_BASE_IMAGE ?= +DISTRO ?= ubuntu_bionic PROXY ?= http://proxy.foo.com:8000 NO_PROXY ?= localhost,127.0.0.1,.svc.cluster.local USE_PROXY ?= false @@ -26,7 +27,7 @@ PUSH_IMAGE ?= false # use this variable for image labels added in internal build process LABEL ?= org.airshipit.build=community COMMIT ?= $(shell git rev-parse HEAD) -IMAGE ?= ${DOCKER_REGISTRY}/${IMAGE_PREFIX}/${IMAGE_NAME}:${IMAGE_TAG} +IMAGE ?= ${DOCKER_REGISTRY}/${IMAGE_PREFIX}/${IMAGE_NAME}:${IMAGE_TAG}-${DISTRO} export diff --git a/images/drydock/Dockerfile.ubuntu_bionic b/images/drydock/Dockerfile.ubuntu_bionic new file mode 100644 index 00000000..e3b20882 --- /dev/null +++ b/images/drydock/Dockerfile.ubuntu_bionic @@ -0,0 +1,96 @@ +# Copyright 2017 AT&T Intellectual Property. All other rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +ARG FROM=ubuntu:18.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} bionic main restricted universe multiverse" > /etc/apt/sources.list; \ + echo "deb ${UBUNTU_REPO} bionic-security main restricted universe multiverse" >> /etc/apt/sources.list; \ + echo "deb ${UBUNTU_REPO} bionic-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} + +LABEL org.opencontainers.image.authors='airship-discuss@lists.airshipit.org, irc://#airshipit@freenode' \ + org.opencontainers.image.url='https://airshipit.org' \ + org.opencontainers.image.documentation='https://airship-drydock.readthedocs.org' \ + org.opencontainers.image.source='https://git.openstack.org/openstack/airship-drydock' \ + org.opencontainers.image.vendor='The Airship Authors' \ + org.opencontainers.image.licenses='Apache-2.0' + +ARG UBUNTU_REPO=http://archive.ubuntu.com/ubuntu +ARG TRUSTED_UBUNTU_REPO=no +ARG ALLOW_UNAUTHENTICATED=false +ARG PIP_TRUSTED_HOST=foo.com +ARG PIP_INDEX_URL=https://pypi.org/simple +ARG BUILD_DIR +ENV container docker +ENV PORT 9000 +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} bionic main restricted universe multiverse" > /etc/apt/sources.list; \ + echo "deb ${UBUNTU_REPO} bionic-security main restricted universe multiverse" >> /etc/apt/sources.list; \ + echo "deb ${UBUNTU_REPO} bionic-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 ./requirements-host.txt /tmp/drydock/ +COPY ./hostdeps.sh /tmp/drydock +WORKDIR /tmp/drydock +RUN ./hostdeps.sh; \ + rm -r /var/lib/apt/lists/* + +COPY ./python/requirements-lock.txt /tmp/drydock/ +RUN pip3 install \ + --no-cache-dir \ + -r /tmp/drydock/requirements-lock.txt + +COPY ./python /tmp/drydock/python +WORKDIR /tmp/drydock/python +RUN python3 setup.py install + +COPY ./alembic /tmp/drydock/alembic +COPY ./alembic.ini /tmp/drydock/alembic.ini +COPY ./entrypoint.sh /tmp/drydock/entrypoint.sh + +COPY --from=baclient_builder /tmp/drydock/baclient /tmp/drydock/python/drydock_provisioner/assets/baclient + + +EXPOSE $PORT + +WORKDIR /tmp/drydock + +ENTRYPOINT ["./entrypoint.sh"] +CMD ["server"] diff --git a/images/drydock/Dockerfile b/images/drydock/Dockerfile.ubuntu_xenial similarity index 100% rename from images/drydock/Dockerfile rename to images/drydock/Dockerfile.ubuntu_xenial diff --git a/tools/drydock_image_build.sh b/tools/drydock_image_build.sh index 0709841e..55656051 100755 --- a/tools/drydock_image_build.sh +++ b/tools/drydock_image_build.sh @@ -3,6 +3,7 @@ set -x UBUNTU_BASE_IMAGE=${UBUNTU_BASE_IMAGE:-""} UBUNTU_REPO=${UBUNTU_REPO:-""} +DISTRO=${DISTRO:-"ubuntu_bionic"} TRUSTED_UBUNTU_REPO=${TRUSTED_UBUNTU_REPO:-"no"} ALLOW_UNATHENTICATED=${ALLOW_UNAUTHENTICATED:-"false"} PIP_INDEX_URL=${PIP_INDEX_URL:-""} @@ -42,7 +43,7 @@ docker build --network host -t ${IMAGE} --label ${LABEL} \ --label org.opencontainers.image.revision=${COMMIT} \ --label org.opencontainers.image.created="$(date --rfc-3339=seconds --utc)" \ --label org.opencontainers.image.title=${IMAGE_NAME} \ - -f images/drydock/Dockerfile \ + -f "images/drydock/Dockerfile.${DISTRO}" \ --build-arg BUILD_DIR=${BUILD_DIR} \ ${PROXY_ARGS} \ ${ADDL_BUILD_ARGS} . \ No newline at end of file diff --git a/tools/drydock_image_run.sh b/tools/drydock_image_run.sh index a1136f82..b91534a8 100755 --- a/tools/drydock_image_run.sh +++ b/tools/drydock_image_run.sh @@ -1,7 +1,7 @@ #!/bin/bash set -x -IMAGE=${DOCKER_REGISTRY}/${IMAGE_PREFIX}/${IMAGE_NAME}:${IMAGE_TAG} +IMAGE=${DOCKER_REGISTRY}/${IMAGE_PREFIX}/${IMAGE_NAME}:${IMAGE_TAG}-${DISTRO} function start_db { if [[ ! -z $(docker ps | grep 'psql_integration') ]] diff --git a/tools/gate/playbooks/docker-image-build.yaml b/tools/gate/playbooks/docker-image-build.yaml index 30a8dc15..f1853305 100644 --- a/tools/gate/playbooks/docker-image-build.yaml +++ b/tools/gate/playbooks/docker-image-build.yaml @@ -18,6 +18,8 @@ block: - debug: var: publish + - debug: + var: distro - debug: var: tags - debug: @@ -58,6 +60,7 @@ chdir: "{{ zuul.project.src_dir }}" target: images params: + DISTRO: "{{ distro }}" IMAGE_TAG: "{{ item }}" with_items: "{{ image_tags.stdout_lines }}" @@ -82,6 +85,7 @@ params: DOCKER_REGISTRY: "quay.io" IMAGE_PREFIX: "airshipit" + DISTRO: "{{ distro }}" IMAGE_TAG: "{{ item }}" COMMIT: "{{ zuul.newrev | default('') }}" PUSH_IMAGE: "true"