From 62eb77d19acf7afd50001e7f0ca990a10d9551ff Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Wed, 31 Jul 2024 18:58:48 -0400 Subject: [PATCH] Refactor build env logic to switch between testing and production Signed-off-by: Peter Zhu --- .github/workflows/docker-test.yml | 9 ++-- docker/Dockerfile | 25 +++++------ docker/Dockerfile-development | 75 ------------------------------- docker/docker-compose-tests.yml | 37 --------------- jenkins/release.JenkinsFile | 2 - 5 files changed, 16 insertions(+), 132 deletions(-) delete mode 100644 docker/Dockerfile-development delete mode 100644 docker/docker-compose-tests.yml diff --git a/.github/workflows/docker-test.yml b/.github/workflows/docker-test.yml index 31bb25674..039733521 100644 --- a/.github/workflows/docker-test.yml +++ b/.github/workflows/docker-test.yml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - architecture: ['linux/amd64', 'linux/arm64'] + platform: ['linux/amd64', 'linux/arm64'] steps: - name: Set up QEMU uses: docker/setup-qemu-action@v3 @@ -30,9 +30,12 @@ jobs: - uses: actions/checkout@v4 with: path: 'opensearch-benchmark-git' - - name: Docker Build and Test on ${{ matrix.architecture }} + - name: Docker Build ${{ matrix.platform }} run: | docker buildx version cp -a opensearch-benchmark-git/* ./ echo "Disable VERSION arg to enter docker build test mode" - docker buildx build --platform ${{ matrix.architecture }} --build-arg BUILD_DATE=`date -u +%Y-%m-%dT%H:%M:%SZ` -f "docker/Dockerfile" . + PLATFORM=${{ matrix.platform }} + PLATFORM=`echo $PLATFORM | tr '/' '-'` + docker buildx build --platform ${{ matrix.platform }} --build-arg BUILD_ENV=testing --build-arg BUILD_DATE=`date -u +%Y-%m-%dT%H:%M:%SZ` -f "docker/Dockerfile" -t "osb/osb-$PLATFORM" -o type=docker . + docker images | grep "osb/osb-$PLATFORM" diff --git a/docker/Dockerfile b/docker/Dockerfile index 26e9a5c4d..f10884f92 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,13 +1,15 @@ -############################################################################### -# Install OpenSearch Benchmark from PyPI to build a Docker image -############################################################################### +ARG VERSION +ARG BUILD_ENV=production -FROM python:3.11.2-slim -ARG VERSION=testing +FROM python:3.11.2-slim as build_env_testing +ONBUILD COPY opensearch-benchmark-git/ ./ -ENV BENCHMARK_RUNNING_IN_DOCKER=True +FROM python:3.11.2-slim as build_env_production +ONBUILD RUN echo Production Environment +FROM build_env_${BUILD_ENV} WORKDIR /opensearch-benchmark +ENV BENCHMARK_RUNNING_IN_DOCKER=True RUN apt-get -y update && \ apt-get install -y curl git gcc pbzip2 pigz && \ @@ -18,15 +20,8 @@ RUN groupadd --gid 1000 opensearch-benchmark && \ useradd -d /opensearch-benchmark -m -k /dev/null -g 1000 -N -u 1000 -l -s /bin/bash benchmark ENV PIP_ONLY_BINARY=h5py - -# Copy file for test purpose and will remove during prod publishing -COPY opensearch-benchmark-git/ ./opensearch-benchmark-git - -# Currently we always have the $VERSION arg substituted during prod publishing -# Default VERSION=testing to enter test mode based on user inputs. -RUN if [ "$VERSION" = "testing" ] ; then echo Testing; cp -a opensearch-benchmark-git/* ./; ls -l; python3 -m pip install -e . ; \ - else echo Production; rm -rf opensearch-benchmark-git; ls -l; python3 -m pip install opensearch-benchmark==$VERSION ; fi - +RUN if [ "$BUILD_ENV" = "testing" ] ; then echo Testing; ls -l; python3 -m pip install -e . ; \ + else echo Production; if [ -z "$VERSION" ] ; then python3 -m pip install opensearch-benchmark ; else python3 -m pip install opensearch-benchmark==$VERSION ; fi; fi RUN mkdir -p /opensearch-benchmark/.benchmark && \ chown -R 1000:0 /opensearch-benchmark/.benchmark diff --git a/docker/Dockerfile-development b/docker/Dockerfile-development deleted file mode 100644 index b2834bc8b..000000000 --- a/docker/Dockerfile-development +++ /dev/null @@ -1,75 +0,0 @@ -################################################################################ For Development Testing Only -# Build stage 0 `builder`: -# Install OpenSearch Benchmark from source inside a virtualenv -################################################################################ - -FROM python:3.11.2-slim as builder - -RUN apt-get -y update && \ - apt-get install -y curl git gcc && \ - apt-get -y upgrade && \ - rm -rf /var/lib/apt/lists/* - -WORKDIR /opensearch-benchmark/ -COPY ./setup.py /opensearch-benchmark/ -COPY ./setup.cfg /opensearch-benchmark/ -COPY ./version.txt /opensearch-benchmark/ -COPY ./README.md /opensearch-benchmark/ -COPY ./MANIFEST.in /opensearch-benchmark/ -COPY ./osbenchmark/ /opensearch-benchmark/osbenchmark/ -COPY ./scripts/ /opensearch-benchmark/scripts/ - -RUN python3 -m venv /opensearch-benchmark/venv -ENV PATH="/opensearch-benchmark/venv/bin:$PATH" - -WORKDIR /opensearch-benchmark -# Wipe away any lingering caches, copied over from the local machine -RUN find ./opensearch-benchmark -name '__pycache__' -o -name '*.pyc' | xargs rm -f -RUN python3 -m pip install --upgrade pip setuptools wheel -RUN python3 -m pip install /opensearch-benchmark - -################################################################################ -# Build stage 1 (the actual OpenSearch Benchmark image): -# Copy OpenSearch Benchmark from stage 0 and fix permissions to support randomized UIDs -# Define VOLUME for ~/.benchmark -################################################################################ - -FROM python:3.11.2-slim - -ENV BENCHMARK_RUNNING_IN_DOCKER True - -RUN apt-get -y update && \ - apt-get install -y curl git pbzip2 pigz && \ - apt-get -y upgrade && \ - rm -rf /var/lib/apt/lists/* - -RUN groupadd --gid 1000 opensearch-benchmark && \ - useradd -d /opensearch-benchmark -m -k /dev/null -g 1000 -N -u 1000 -l -s /bin/bash benchmark - -COPY --chown=1000:0 --from=builder /opensearch-benchmark/venv /opensearch-benchmark/venv - -WORKDIR /opensearch-benchmark - -RUN mkdir -p /opensearch-benchmark/.benchmark && \ - chown -R 1000:0 /opensearch-benchmark/.benchmark - -USER 1000 - -ENV PATH=/opensearch-benchmark/venv/bin:$PATH - -ARG VERSION -ARG BUILD_DATE - -LABEL org.label-schema.schema-version="1.0" \ - org.label-schema.vendor="OpenSearch-Project" \ - org.label-schema.name="opensearch-benchmark" \ - org.label-schema.url="https://opensearch.org/" \ - org.label-schema.version="$VERSION" \ - org.label-schema.license="Apache-2.0" \ - org.label-schema.description="A community driven, open source project to run performance tests for OpenSearch" \ - org.label-schema.build-date="$BUILD_DATE" \ - org.label-schema.vcs-url="https://github.com/opensearch-project/OpenSearch-Benchmark" - -VOLUME ["/opensearch-benchmark/.benchmark"] - -ENTRYPOINT [ "opensearch-benchmark" ] diff --git a/docker/docker-compose-tests.yml b/docker/docker-compose-tests.yml deleted file mode 100644 index df10c42ff..000000000 --- a/docker/docker-compose-tests.yml +++ /dev/null @@ -1,37 +0,0 @@ -version: '3' -services: - opensearch-node1: - image: opensearchproject/opensearch:1.1.0 - container_name: opensearch-node1 - environment: - - cluster.name=opensearch-cluster - - node.name=opensearch-node1 - - discovery.seed_hosts=opensearch-node1 - - cluster.initial_master_nodes=opensearch-node1 - - bootstrap.memory_lock=true - - "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" - ulimits: - memlock: - soft: -1 - hard: -1 - nofile: - soft: 65536 - hard: 65536 - volumes: - - opensearch-data1:/usr/share/opensearch/data - ports: - - 9200:9200 - - 9600:9600 - networks: - - opensearch-net - healthcheck: - test: curl -f http://localhost:9200 -u admin:admin --insecure - interval: 5s - timeout: 2s - retries: 10 -networks: - opensearch-net: - -volumes: - opensearch-data1: - driver: local diff --git a/jenkins/release.JenkinsFile b/jenkins/release.JenkinsFile index 672439ab2..1af82aded 100644 --- a/jenkins/release.JenkinsFile +++ b/jenkins/release.JenkinsFile @@ -18,8 +18,6 @@ standardReleasePipelineWithGenericTrigger( string(name: 'DOCKER_BUILD_GIT_REPOSITORY_REFERENCE', value: 'main'), string(name: 'DOCKER_BUILD_SCRIPT_WITH_COMMANDS', value: [ 'su $(id -un 1000) -c "cd docker/ci', - 'mkdir -p opensearch-benchmark-git', - 'echo Production > opensearch-benchmark-git/status.txt' 'git clone https://github.com/opensearch-project/opensearch-benchmark opensearch-benchmark', 'cp -a opensearch-benchmark/* ./"', 'cd docker/ci',