From 640701166e7d9e5bdaad385d75f9f725ed3b72ba Mon Sep 17 00:00:00 2001 From: Salim Date: Tue, 28 Nov 2017 17:32:25 -0800 Subject: [PATCH 1/2] feature: ZENKO-482 Eve CI This integrates the mongo ft_tests suite into the Eve CI using kube workers that can be the template for future workers and porting the remaining tests over. --- eve/main.yml | 102 +++++++++++ eve/workers/build/Dockerfile | 57 ++++++ .../build/buildbot_worker_packages.list | 13 ++ eve/workers/build/credentials.bash | 41 +++++ eve/workers/build/gems.list | 4 + eve/workers/build/pip_packages.list | 3 + eve/workers/build/s3_packages.list | 11 ++ eve/workers/pod.yaml | 163 ++++++++++++++++++ wait_for_local_port.bash | 2 +- 9 files changed, 395 insertions(+), 1 deletion(-) create mode 100644 eve/main.yml create mode 100644 eve/workers/build/Dockerfile create mode 100644 eve/workers/build/buildbot_worker_packages.list create mode 100644 eve/workers/build/credentials.bash create mode 100644 eve/workers/build/gems.list create mode 100644 eve/workers/build/pip_packages.list create mode 100644 eve/workers/build/s3_packages.list create mode 100644 eve/workers/pod.yaml diff --git a/eve/main.yml b/eve/main.yml new file mode 100644 index 0000000000..43dda09764 --- /dev/null +++ b/eve/main.yml @@ -0,0 +1,102 @@ +--- +version: 0.2 + +branches: + feature/*, improvement/*, bugfix/*, w/*, q/*, hotfix/*: + stage: pre-merge + development/*: + stage: post-merge + +models: + - Git: &clone + name: Pull repo + repourl: '%(prop:git_reference)s' + shallow: True + retryFetch: True + haltOnFailure: True + # Machine Setup + - ShellCommandWthSecrets: &credentials + name: Setup Credentials + command: bash eve/workers/build/credentials.bash + haltOnFailure: True + - ShellCommandWithSecrets: &npm-install + name: install modules + command: npm install + haltOnFailure: True +stages: + pre-merge: + worker: + type: local + steps: + - SetProperty: + property: artifacts_name + value: "scality-s3-%(prop:buildnumber)s" + haltOnFailure: True + + - TriggerStages: + name: Launch all workers + stage_names: + - linting-coverage + - mongo-ft-tests + waitForFinish: True + haltOnFailure: True + + linting-coverage: + worker: + type: docker + path: eve/workers/build + volumes: &default_volumes + - '/home/eve/workspace' + steps: + - Git: *clone + - ShellCommand: *npm-install + - ShellCommand: + name: Linting + command: | + npm run --silent lint -- --max-warnings 0 + npm run --silent lint_md + flake8 $(git ls-files "*.py") + yamllint $(git ls-files "*.yml") + - ShellCommand: + name: Unit Coverage + command: | + mkdir -p $CIRCLE_TEST_REPORTS/unit + npm run unit_coverage + npm run unit_coverage_legacy_location + haltOnFailure: True + env: + CIRCLE_TEST_REPORTS: /tmp + + mongo-ft-tests: + worker: + type: kube_pod + path: eve/workers/pod.yaml + images: + aggressor: eve/workers/build + s3: "." + vars: &mongo-vars + S3BACKEND: "mem" + S3DATA: "" + MPU_TESTING: "yes" + S3METADATA: mongodb + CI_PROXY: "false" + steps: + - Git: *clone + - ShellCommandWithSecrets: *credentials + - ShellCommand: *npm-install + - ShellCommandWithSecrets: + command: | + . /root/.aws/exports &> /dev/null + bash wait_for_local_port.bash 8000 40 + npm run ft_test + env: + <<: *mongo-vars + + post-merge: + worker: + type: local + steps: + - Git: *clone + - ShellCommand: + name: Nightly Build + command: docker build -t zenko/cloudserver:nightly . diff --git a/eve/workers/build/Dockerfile b/eve/workers/build/Dockerfile new file mode 100644 index 0000000000..4983547e70 --- /dev/null +++ b/eve/workers/build/Dockerfile @@ -0,0 +1,57 @@ +FROM buildpack-deps:stretch-curl + +# +# Install packages needed by the buildchain +# +ENV LANG C.UTF-8 +COPY ./s3_packages.list ./buildbot_worker_packages.list /tmp/ +RUN curl -sS http://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ + && echo "deb http://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ + && apt-get update \ + && cat /tmp/*packages.list | xargs apt-get install -y \ + && git clone https://github.com/tj/n.git \ + && make -C ./n \ + && n 6 latest \ + && pip install pip==9.0.1 \ + && rm -rf ./n \ + && rm -rf /var/lib/apt/lists/* \ + && rm -f /tmp/packages.list + +# +# Add user eve +# + +RUN adduser -u 1042 --home /home/eve --disabled-password --gecos "" eve \ + && adduser eve sudo \ + && sed -ri 's/(%sudo.*)ALL$/\1NOPASSWD:ALL/' /etc/sudoers +# +# Install Dependencies +# + +# Install RVM and gems +ENV RUBY_VERSION="2.4.1" +COPY ./gems.list /tmp/ +RUN cat /tmp/gems.list | xargs gem install +#RUN gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 \ +# && curl -sSL https://get.rvm.io | bash -s stable --ruby=$RUBY_VERSION \ +# && usermod -a -G rvm eve +#RUN /bin/bash -l -c "\ +# source /usr/local/rvm/scripts/rvm \ +# && cat /tmp/gems.list | xargs gem install \ +# && rm /tmp/gems.list" + +# Install Pip packages +COPY ./pip_packages.list /tmp/ +RUN cat /tmp/pip_packages.list | xargs pip install \ + && rm -f /tmp/pip_packages.list \ + && mkdir /home/eve/.aws \ + && chown eve /home/eve/.aws + +# +# Run buildbot-worker on startup +# + +ARG BUILDBOT_VERSION +RUN pip install buildbot-worker==$BUILDBOT_VERSION + +CMD ["/bin/bash", "-l", "-c", "buildbot-worker create-worker . $BUILDMASTER:$BUILDMASTER_PORT $WORKERNAME $WORKERPASS && buildbot-worker start --nodaemon"] diff --git a/eve/workers/build/buildbot_worker_packages.list b/eve/workers/build/buildbot_worker_packages.list new file mode 100644 index 0000000000..96e652f3c6 --- /dev/null +++ b/eve/workers/build/buildbot_worker_packages.list @@ -0,0 +1,13 @@ +ca-certificates +git +gnupg +libffi-dev +libssl-dev +python-pip +python2.7 +python2.7-dev +software-properties-common +sudo +tcl +wget +procps diff --git a/eve/workers/build/credentials.bash b/eve/workers/build/credentials.bash new file mode 100644 index 0000000000..eeeb670575 --- /dev/null +++ b/eve/workers/build/credentials.bash @@ -0,0 +1,41 @@ +#!/bin/bash -x +set -x #echo on +set -e #exit at the first error + +mkdir -p ~/.aws +cat >>/root/.aws/exports < /dev/null +cat >>/root/.aws/credentials < Date: Tue, 12 Jun 2018 15:08:50 -0700 Subject: [PATCH 2/2] feature: Speed up Docker rebuild using cache Allows faster CI and dev builds of the Docker image through the use of cached layers. --- Dockerfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index a29384ba66..651379e82b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ MAINTAINER Giorgio Regni WORKDIR /usr/src/app # Keep the .git directory in order to properly report version -COPY . /usr/src/app +COPY ./package.json . RUN apt-get update \ && apt-get install -y jq python git build-essential --no-install-recommends \ @@ -15,6 +15,8 @@ RUN apt-get update \ && rm -rf ~/.node-gyp \ && rm -rf /tmp/npm-* +COPY ./ ./ + VOLUME ["/usr/src/app/localData","/usr/src/app/localMetadata"] ENTRYPOINT ["/usr/src/app/docker-entrypoint.sh"]