Skip to content

Building and Running Tests in Docker

Chanseok Oh edited this page Sep 6, 2018 · 11 revisions

For example,

FROM ubuntu:18.04
  
RUN apt-get update && \
    apt-get install -y vim openjdk-8-jdk maven python git curl libswt-gtk-3-java xvfb ratpoison && \
    cd && \
    curl https://dl.google.com/dl/cloudsdk/channels/rapid/google-cloud-sdk.tar.gz | \
        tar -zxf - && \
    google-cloud-sdk/bin/gcloud components install app-engine-java --quiet

ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64
ENV DISPLAY :99

CMD cd && \
    git clone https://github.com/GoogleCloudPlatform/google-cloud-eclipse.git && \
    ( Xvfb :99 & ) && \
    sleep 3 && \
    ( ratpoison & ) && \
    ( cd google-cloud-eclipse && \
      mvn -V -B -N io.takari:maven:wrapper -Dmaven=3.5.0 && \
      ./mvnw -V -B --fail-at-end -Ptravis verify ) && \
    tar -zcf m2-cache-new.tar.gz .m2

Build an image:

$ docker build -t ct4e-build-ubuntu .

Run in a container:

$ docker run ct4e-build-ubuntu

Miscellaneous

The Dockerfile above can be used to collect JARs that Maven downloads into the local .m2 cache repository while building and testing CT4E. We can then use the generated cache file to speed up Kokoro Windows builds, which is what we currently do: https://github.com/GoogleCloudPlatform/google-cloud-eclipse/pull/3248/files

The scripts below may help uploading the .m2 cache file generated by the Dockerfile.

#!/bin/sh

set -o errexit
set -o xtrace

function build_in_container() {
  [ ! -e m2-cache-new.tar.gz ]

  docker run --name ct4e-build ct4e-build-ubuntu | tee ct4e-build.log

  readonly CONTAINER=$( docker ps -lq )
  [ -n "${CONTAINER}" ]
  docker cp "${CONTAINER}":/root/m2-cache-new.tar.gz .
  docker container rm "${CONTAINER}"
}

function upload_m2_cache() {
  [ -e m2-cache-new.tar.gz ]

  gunzip m2-cache-new.tar.gz
  gsutil cp m2-cache-new.tar gs://ct4e-m2-repositories-for-kokoro/m2-cache.tar
}

build_in_container
#upload_m2_cache

Clone this wiki locally