Skip to content
Snippets Groups Projects
Commit 0685e561 authored by Santiago Ospina De Los Ríos's avatar Santiago Ospina De Los Ríos
Browse files

Simplify deployment of docker image and deb pacakges

parent fe41800a
No related branches found
No related tags found
1 merge request!49Resolve "Finish installation and usage instruction on the documentation"
Pipeline #33637 passed
......@@ -17,6 +17,8 @@ stages:
DUNECONTROL: dunecontrol
BASE_IMAGE_VERSION: v0.4.0-git
DUNE_COPASI_SD_EXECUTABLE: 'ON'
CPACK_GENERATORS: 'DEB'
CPACK_PACKAGE_DIRECTORY: $CI_PROJECT_DIR/packages
.docker_variables: &docker_variables
DOCKER_BUILDKIT: 1
......@@ -81,6 +83,10 @@ stages:
- ./.ci/install /duneci/dune.opts
- ./.ci/test /duneci/dune.opts
<<: *default_tags
artifacts:
paths:
- packages
expire_in: 1h
.deploy: &deploy
image: ${DOCKER_IMAGE}
......@@ -92,27 +98,11 @@ stages:
- DOCKER_DEPLOY_IMAGE=$CI_REGISTRY/copasi/dune-copasi/dune-copasi:${DOCKER_TAG}
# set directory to get packages from the image
- mkdir -p $CI_PROJECT_DIR/packages
# build dockerfile from repositroy
# build final production image using packages from artifacts
- docker build
--build-arg BASE_IMAGE=${BASE_IMAGE}
--build-arg TOOLCHAIN=${TOOLCHAIN}
--target build-env
--cache-from ${DEPENDENCIES_IMAGE}
-t build-image .
# run image and get its id
- DOCKER_ID=$(eval docker run -t -d --entrypoint bash build-image)
# move runtime files in packages folder into a local artifact folder
- mkdir -p -m o+w $CI_PROJECT_DIR/packages
- PACKAGE=$(docker exec ${DOCKER_ID} sh -c "ls /duneci/packages/dune-copasi-*-Runtime.deb")
- docker cp ${DOCKER_ID}:${PACKAGE} ${CI_PROJECT_DIR}/packages
- docker stop ${DOCKER_ID}
# build final production image
- docker build
--build-arg BASE_IMAGE=${BASE_IMAGE}
--build-arg TOOLCHAIN=${TOOLCHAIN}
--target production-env
--cache-from build-image
-t ${DOCKER_DEPLOY_IMAGE} .
--build-arg PRODUCTION_BASE_IMAGE=${BASE_IMAGE}
--file docker/deploy.dockerfile
--tag ${DOCKER_DEPLOY_IMAGE} .
# push images into registry
- docker push ${DOCKER_DEPLOY_IMAGE}
# set alternative and simpler names
......@@ -132,10 +122,6 @@ stages:
- if: '$CI_COMMIT_TAG'
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
- if: '$CI_COMMIT_BRANCH == "latest"'
artifacts:
paths:
- packages
expire_in: never
<<: *dind_docker_tags
# debian gcc
......@@ -158,7 +144,7 @@ deploy:debian_gcc:
<<: *debian_gcc
<<: *deploy
dependencies:
- setup:debian_gcc
- build:debian_gcc
# # ubuntu gcc
# setup:ubuntu_gcc:
......@@ -180,7 +166,7 @@ deploy:debian_gcc:
# <<: *ubuntu_gcc
# <<: *deploy
# dependencies:
# - setup:ubuntu_gcc
# - build:ubuntu_gcc
# debian clang
setup:debian_clang:
......@@ -202,7 +188,7 @@ deploy:debian_clang:
<<: *debian_clang
<<: *deploy
dependencies:
- setup:debian_clang
- build:debian_clang
# # ubuntu clang
# setup:ubuntu_clang:
......@@ -219,4 +205,4 @@ deploy:debian_clang:
# <<: *ubuntu_clang
# <<: *deploy
# dependencies:
# - setup:ubuntu_clang
# - build:ubuntu_clang
ARG BASE_IMAGE=debian:10
ARG SETUP_BASE_IMAGE=registry.dune-project.org/docker/ci/${BASE_IMAGE}
ARG BUILD_BASE_IMAGE=setup-env
ARG PRODUCTION_BASE_IMAGE=${BASE_IMAGE}
# setup of dune dependencies
FROM ${SETUP_BASE_IMAGE} AS setup-env
ARG TOOLCHAIN=clang-6-17
ENV PATH=/duneci/install/bin:$PATH
ENV TERM=xterm-256color
ENV CMAKE_INSTALL_PREFIX=/duneci/install
ENV SETUP_DUNE_TESTTOOLS=ON
ENV DUNE_VENDOR_FMT=ON
COPY --chown=duneci ./dune-copasi.opts /duneci/cmake-flags/
COPY --chown=duneci ./.ci /duneci/modules/dune-copasi/.ci
RUN ln -s /duneci/toolchains/${TOOLCHAIN} /duneci/toolchain \
&& export PATH=/duneci/install/bin:$PATH
WORKDIR /duneci/modules
RUN mkdir -p /duneci/modules/dune-copasi/.ci
RUN ./dune-copasi/.ci/setup_dune /duneci/dune.opts
# build and install dune-copasi from the setup-env
FROM ${BUILD_BASE_IMAGE} AS build-env
ENV DUNE_COPASI_SD_EXECUTABLE='ON'
ENV CPACK_GENERATORS=DEB
ENV CPACK_PACKAGE_DIRECTORY=/duneci/packages
WORKDIR /duneci/modules
# move source files into the image
COPY --chown=duneci ./ /duneci/modules/dune-copasi
# run installer
RUN ./dune-copasi/.ci/install /duneci/dune.opts
# tests installer
RUN ./dune-copasi/.ci/test /duneci/dune.opts
# move results to a -lighter- production image
FROM ${PRODUCTION_BASE_IMAGE} AS production-env
LABEL maintainer="santiago.ospina@iwr.uni-heidelberg.de"
# get package from build-env and install it
COPY --from=build-env /duneci/packages/dune-copasi*Runtime.deb /packages/
WORKDIR /packages/
RUN rm -f /etc/apt/apt.conf.d/docker-gzip-indexes \
&& rm -rf /var/lib/apt/lists/*
RUN export DEBIAN_FRONTEND=noninteractive; \
apt-get update && apt-get dist-upgrade --no-install-recommends --yes \
&& apt-get install --no-install-recommends --yes ./dune-copasi-*-Runtime.deb \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
RUN rm -rf /packages
# disable sudo user
RUN adduser --disabled-password --home /dunecopasi --uid 50000 dunecopasi
USER dunecopasi
WORKDIR /dunecopasi
# run help and expect no error signal
RUN dune-copasi-md --help
RUN dune-copasi-sd --help
# set default mout point to be /dunecopasi (same as workdir!)
VOLUME ["/dunecopasi"]
# run dune-copasi-md by default when running the image
ENTRYPOINT ["dune-copasi-md"]
docker/dune-copasi.dockerfile
\ No newline at end of file
ARG PRODUCTION_BASE_IMAGE=${BASE_IMAGE}
# move results to a -lighter- production image
FROM ${PRODUCTION_BASE_IMAGE} AS production-env
LABEL maintainer="santiago.ospina@iwr.uni-heidelberg.de"
# get package from host 'packages' directory and install it
COPY ./packages /packages/
WORKDIR /packages/
RUN rm -f /etc/apt/apt.conf.d/docker-gzip-indexes \
&& rm -rf /var/lib/apt/lists/*
RUN export DEBIAN_FRONTEND=noninteractive; \
apt-get update && apt-get dist-upgrade --no-install-recommends --yes \
&& apt-get install --no-install-recommends --yes ./dune-copasi-*-Runtime.deb \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
RUN rm -rf /packages
# disable sudo user
RUN adduser --disabled-password --home /dunecopasi --uid 50000 dunecopasi
USER dunecopasi
WORKDIR /dunecopasi
# run help and expect no error signal
RUN dune-copasi-md --help
RUN dune-copasi-sd --help
# set default mout point to be /dunecopasi (same as workdir!)
VOLUME ["/dunecopasi"]
# run dune-copasi-md by default when running the image
ENTRYPOINT ["dune-copasi-md"]
ARG BASE_IMAGE=debian:10
ARG SETUP_BASE_IMAGE=registry.dune-project.org/docker/ci/${BASE_IMAGE}
ARG BUILD_BASE_IMAGE=setup-env
ARG PRODUCTION_BASE_IMAGE=${BASE_IMAGE}
# setup of dune dependencies
FROM ${SETUP_BASE_IMAGE} AS setup-env
ARG TOOLCHAIN=clang-6-17
ENV PATH=/duneci/install/bin:$PATH
ENV TERM=xterm-256color
ENV CMAKE_INSTALL_PREFIX=/duneci/install
ENV SETUP_DUNE_TESTTOOLS=ON
ENV DUNE_VENDOR_FMT=ON
COPY --chown=duneci ./dune-copasi.opts /duneci/cmake-flags/
COPY --chown=duneci ./.ci /duneci/modules/dune-copasi/.ci
RUN ln -s /duneci/toolchains/${TOOLCHAIN} /duneci/toolchain \
&& export PATH=/duneci/install/bin:$PATH
WORKDIR /duneci/modules
RUN mkdir -p /duneci/modules/dune-copasi/.ci
RUN ./dune-copasi/.ci/setup_dune /duneci/dune.opts
# build and install dune-copasi from the setup-env
FROM ${BUILD_BASE_IMAGE} AS build-env
ENV DUNE_COPASI_SD_EXECUTABLE='ON'
ENV CPACK_GENERATORS=DEB
ENV CPACK_PACKAGE_DIRECTORY=/duneci/packages
WORKDIR /duneci/modules
# move source files into the image
COPY --chown=duneci ./ /duneci/modules/dune-copasi
# run installer
RUN ./dune-copasi/.ci/install /duneci/dune.opts
# tests installer
RUN ./dune-copasi/.ci/test /duneci/dune.opts
# move results to a -lighter- production image
FROM ${PRODUCTION_BASE_IMAGE} AS production-env
LABEL maintainer="santiago.ospina@iwr.uni-heidelberg.de"
# get package from build-env and install it
COPY --from=build-env /duneci/packages/dune-copasi*Runtime.deb /packages/
WORKDIR /packages/
RUN rm -f /etc/apt/apt.conf.d/docker-gzip-indexes \
&& rm -rf /var/lib/apt/lists/*
RUN export DEBIAN_FRONTEND=noninteractive; \
apt-get update && apt-get dist-upgrade --no-install-recommends --yes \
&& apt-get install --no-install-recommends --yes ./dune-copasi-*-Runtime.deb \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
RUN rm -rf /packages
# disable sudo user
RUN adduser --disabled-password --home /dunecopasi --uid 50000 dunecopasi
USER dunecopasi
WORKDIR /dunecopasi
# run help and expect no error signal
RUN dune-copasi-md --help
RUN dune-copasi-sd --help
# set default mout point to be /dunecopasi (same as workdir!)
VOLUME ["/dunecopasi"]
# run dune-copasi-md by default when running the image
ENTRYPOINT ["dune-copasi-md"]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment