From f0bba5bbdb8e07674c36f8312dc806a26252a8e8 Mon Sep 17 00:00:00 2001 From: Matthias Bisping Date: Tue, 3 Jan 2023 10:51:20 +0100 Subject: [PATCH] Copy paste and adjust build code from rule-engine repo That build code is more recent and the current build code fails. --- Dockerfile | 80 ++++++--- .../main/resources/scripts/docker-build.sh | 154 ++++++++++++++---- 2 files changed, 180 insertions(+), 54 deletions(-) diff --git a/Dockerfile b/Dockerfile index 281d6b2..882f538 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,30 +1,64 @@ -FROM python:3.8 +# FROM python:3.8 +# +# ARG YOUR_ENV +# +# WORKDIR /app/service +# +# COPY ./src ./src +# COPY ./cv_analysis ./cv_analysis +# COPY pyproject.toml . +# COPY poetry.lock . +# +# ENV YOUR_ENV=${YOUR_ENV} \ +# PYTHONFAULTHANDLER=1 \ +# PYTHONUNBUFFERED=1 \ +# PYTHONHASHSEED=random \ +# PIP_NO_CACHE_DIR=off \ +# PIP_DISABLE_PIP_VERSION_CHECK=on \ +# PIP_DEFAULT_TIMEOUT=100 \ +# POETRY_VERSION=1.2.2 +# +# # System deps: +# RUN curl -sSL https://install.python-poetry.org | POETRY_HOME=/etc/poetry python3 - +# ENV PATH="$PATH:/etc/poetry/bin/" +# RUN poetry --version +# +# # Project initialization: +# RUN poetry config virtualenvs.create false +# RUN poetry install --no-interaction --no-ansi +# +# CMD ["python3", "-u", "src/serve.py"] -ARG YOUR_ENV -WORKDIR /app/service -COPY ./src ./src -COPY ./cv_analysis ./cv_analysis -COPY pyproject.toml . -COPY poetry.lock . +FROM python:3.8 as builder +ARG SSH_KEY +ENV PYTHONUNBUFFERED=true +WORKDIR /app -ENV YOUR_ENV=${YOUR_ENV} \ - PYTHONFAULTHANDLER=1 \ - PYTHONUNBUFFERED=1 \ - PYTHONHASHSEED=random \ - PIP_NO_CACHE_DIR=off \ - PIP_DISABLE_PIP_VERSION_CHECK=on \ - PIP_DEFAULT_TIMEOUT=100 \ - POETRY_VERSION=1.2.2 +ENV POETRY_HOME=/opt/poetry +ENV POETRY_VIRTUALENVS_IN_PROJECT=true +ENV PATH="$POETRY_HOME/bin:$PATH" -# System deps: -RUN curl -sSL https://install.python-poetry.org | POETRY_HOME=/etc/poetry python3 - -ENV PATH="$PATH:/etc/poetry/bin/" -RUN poetry --version +RUN mkdir /root/.ssh/ && \ + chmod 700 /root/.ssh/ && \ + echo "${SSH_KEY}" > /root/.ssh/id_rsa && \ + chmod 600 /root/.ssh/id_rsa && \ + ssh-keyscan -p 2222 git.iqser.com >> /root/.ssh/known_hosts -# Project initialization: -RUN poetry config virtualenvs.create false -RUN poetry install --no-interaction --no-ansi +RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | python -CMD ["python3", "-u", "src/serve.py"] \ No newline at end of file +COPY pyproject.toml poetry.lock ./src ./ +COPY cv_analysis ./cv_analysis +RUN /opt/poetry/bin/poetry install --no-interaction --no-root --only main + +FROM python:3.8-bullseye as prod +ENV PYTHONUNBUFFERED=true +WORKDIR /app +ENV PATH="/app/.venv/bin:$PATH" +COPY --from=builder /app /app + +COPY ./src ./ +USER 1001 + +CMD ["python3", "-u", "src/serve.py"] diff --git a/bamboo-specs/src/main/resources/scripts/docker-build.sh b/bamboo-specs/src/main/resources/scripts/docker-build.sh index 9b6757f..6362c2d 100755 --- a/bamboo-specs/src/main/resources/scripts/docker-build.sh +++ b/bamboo-specs/src/main/resources/scripts/docker-build.sh @@ -1,53 +1,145 @@ +##!/bin/bash +#set -e +# +#SERVICE_NAME=$1 +# +#if [[ "$bamboo_planRepository_branchName" == "master" ]] +#then +# branchVersion=$(cat version.yaml | grep -Eo "version: .*" | sed -s 's|version: \(.*\)\..*\..*|\1|g') +# latestVersion=$( semver $(git tag -l "${branchVersion}.*" ) | tail -n1 ) +# newVersion="$(semver $latestVersion -p -i minor)" +# echo "new release on master with version $newVersion" +#elif [[ "$bamboo_planRepository_branchName" == release* ]] +#then +# branchVersion=$(echo $bamboo_planRepository_branchName | sed -s 's|release\/\([0-9]\+\.[0-9]\+\)\.x|\1|') +# latestVersion=$( semver $(git tag -l "${branchVersion}.*" ) | tail -n1 ) +# newVersion="$(semver $latestVersion -p -i patch)" +# echo "new release on $bamboo_planRepository_branchName with version $newVersion" +#elif [[ "${bamboo_version_tag}" != "dev" ]] +#then +# newVersion="${bamboo_version_tag}" +# echo "new special version bild with $newVersion" +#else +# newVersion="${bamboo_planRepository_1_branch}_${bamboo_buildNumber}" +# echo "gitTag=${newVersion}" > git.tag +# echo "dev build with tag ${newVersion}" +# python3 -m venv build_venv +# source build_venv/bin/activate +# python3 -m pip install --upgrade pip +# +# pip install dvc +# pip install 'dvc[ssh]' +# dvc pull +# +# echo "index-url = https://${bamboo_nexus_user}:${bamboo_nexus_password}@nexus.iqser.com/repository/python-combind/simple" >> pip.conf +# echo "${bamboo_nexus_password}" | docker login --username "${bamboo_nexus_user}" --password-stdin nexus.iqser.com:5001 +# docker build -f Dockerfile . +# exit 0 +#fi +# +#echo "gitTag=${newVersion}" > git.tag +# +#python3 -m venv build_venv +#source build_venv/bin/activate +#python3 -m pip install --upgrade pip +# +#pip install dvc +#pip install 'dvc[ssh]' +#dvc pull +# +#echo "index-url = https://${bamboo_nexus_user}:${bamboo_nexus_password}@nexus.iqser.com/repository/python-combind/simple" >> pip.conf +#docker build -f Dockerfile -t nexus.iqser.com:5001/red/$SERVICE_NAME:${newVersion} . +#echo "${bamboo_nexus_password}" | docker login --username "${bamboo_nexus_user}" --password-stdin nexus.iqser.com:5001 +#docker push nexus.iqser.com:5001/red/$SERVICE_NAME:${newVersion} + + #!/bin/bash set -e SERVICE_NAME=$1 +project_name="sil" +HOST="nexus.iqser.com" +PORT="5001" + +mkdir -p ~/.ssh +echo "${bamboo_agent_ssh}" | base64 -d >> ~/.ssh/id_rsa + +python3 -m venv build_venv +source build_venv/bin/activate +python3 -m pip install --upgrade pip +pip install poetry + + +# update version in poetry to latest version in git if it is lower +check_poetry_version () { + currentVersion=$(poetry version -s) + tagCount=$(git rev-list --tags --max-count=1 | wc -l) + + if [[ $tagCount -gt 0 ]] + then + latestVersion=$(git rev-list --tags --max-count=1 | git describe --tags) + echo "latest version tag in git: ${latestVersion}" + echo "current version in project: ${currentVersion}" + + if [[ "$currentVersion" < "$latestVersion" ]] + then + echo "project version is behind" + echo "setting latest git tag as current version" + poetry version "$latestVersion" + updateVersion=0 + elif [[ "$currentVersion" == "$latestVersion" ]] + then + echo "project version matches" + echo "keeping the project version" + updateVersion=0 + else + echo "project version is higher" + echo "keeping the project version, be aware that a version might have been skipped" + updateVersion=1 + fi + else + updateVersion=1 + fi + + return $updateVersion +} + if [[ "$bamboo_planRepository_branchName" == "master" ]] then - branchVersion=$(cat version.yaml | grep -Eo "version: .*" | sed -s 's|version: \(.*\)\..*\..*|\1|g') - latestVersion=$( semver $(git tag -l "${branchVersion}.*" ) | tail -n1 ) - newVersion="$(semver $latestVersion -p -i minor)" - echo "new release on master with version $newVersion" + if check_poetry_version + then + poetry version minor + fi + newVersion="$(poetry version -s)" + echo "new release on master with version: $newVersion" elif [[ "$bamboo_planRepository_branchName" == release* ]] then - branchVersion=$(echo $bamboo_planRepository_branchName | sed -s 's|release\/\([0-9]\+\.[0-9]\+\)\.x|\1|') - latestVersion=$( semver $(git tag -l "${branchVersion}.*" ) | tail -n1 ) - newVersion="$(semver $latestVersion -p -i patch)" + if check_poetry_version + then + poetry version patch + fi + newVersion="$(poetry version -s)" + echo "new release on $bamboo_planRepository_branchName with version $newVersion" elif [[ "${bamboo_version_tag}" != "dev" ]] then newVersion="${bamboo_version_tag}" - echo "new special version bild with $newVersion" + echo "new special version build with: $newVersion" else newVersion="${bamboo_planRepository_1_branch}_${bamboo_buildNumber}" echo "gitTag=${newVersion}" > git.tag - echo "dev build with tag ${newVersion}" - python3 -m venv build_venv - source build_venv/bin/activate - python3 -m pip install --upgrade pip + echo "dev build with tag: ${newVersion}" - pip install dvc - pip install 'dvc[ssh]' - dvc pull - - echo "index-url = https://${bamboo_nexus_user}:${bamboo_nexus_password}@nexus.iqser.com/repository/python-combind/simple" >> pip.conf - echo "${bamboo_nexus_password}" | docker login --username "${bamboo_nexus_user}" --password-stdin nexus.iqser.com:5001 - docker build -f Dockerfile . + echo "index-url = https://${bamboo_nexus_user}:${bamboo_nexus_password}@${HOST}/repository/python-combind/simple" >> pip.conf + echo "${bamboo_nexus_password}" | docker login --username "${bamboo_nexus_user}" --password-stdin ${HOST}:${PORT} + docker build --build-arg SSH_KEY="$(cat ~/.ssh/id_rsa)" -f Dockerfile . exit 0 fi echo "gitTag=${newVersion}" > git.tag -python3 -m venv build_venv -source build_venv/bin/activate -python3 -m pip install --upgrade pip - -pip install dvc -pip install 'dvc[ssh]' -dvc pull - -echo "index-url = https://${bamboo_nexus_user}:${bamboo_nexus_password}@nexus.iqser.com/repository/python-combind/simple" >> pip.conf -docker build -f Dockerfile -t nexus.iqser.com:5001/red/$SERVICE_NAME:${newVersion} . -echo "${bamboo_nexus_password}" | docker login --username "${bamboo_nexus_user}" --password-stdin nexus.iqser.com:5001 -docker push nexus.iqser.com:5001/red/$SERVICE_NAME:${newVersion} +echo "index-url = https://${bamboo_nexus_user}:${bamboo_nexus_password}@${HOST}/repository/python-combind/simple" >> pip.conf +echo "${bamboo_nexus_password}" | docker login --username "${bamboo_nexus_user}" --password-stdin ${HOST}:${PORT} +docker build --build-arg SSH_KEY="$(cat ~/.ssh/id_rsa)" -f Dockerfile -t ${HOST}:${PORT}/${project_name}/$SERVICE_NAME:${newVersion} --build-arg VERSION_TAG=${newVersion} . +docker push ${HOST}:${PORT}/${project_name}/$SERVICE_NAME:${newVersion}