Elek, Marton created HDDS-1516:
----------------------------------
Summary: Move ozone-build container definition from dev-support
and publish dedicated image
Key: HDDS-1516
URL: https://issues.apache.org/jira/browse/HDDS-1516
Project: Hadoop Distributed Data Store
Issue Type: Improvement
Components: build
Reporter: Elek, Marton
hadoop-ozone/dev-support/docker/Dockerfile directory contains a docker
container definition to provide a generic build environment for ozone builds.
This container (or more preciously the improved version of this container) is
used to run all the build commands inside the container on Jenkins.
As of now it's uploaded as elek/ozone-build and works well (all github PR check
builds are executed in this container).
I propose to move it to the hadoop-docker-ozone repo and publish an
apache/ozone-buildenv docker image from it.
Note: there are two interesting tricks in the Dockerfile:
1.) a lot of users are created (from id=1 to id=4000)
Reason: the kerberized unit tests require real user. Jenkins uses the same uid
inside the container as outside based on the number ( eg. -u 1000 flat) even if
there is no real user created. And we can't predict what is the uid for the
build process (in my jenkins it's 1000(elek) in builds.apache.org it's
something between 400 and 500 (as I remember)).
./start-build-env.sh follows an approach to create a docker image on-demand
(with only the required user). While it works well, I realized that the image
creation is not cached very well on the jenkins and it may take >10 minutes for
each build.
2.) The other question is the used maven repository. We prefer to separated the
local maven repositories for parallel builds to avoid any conflict (If one
build the the mvn install the other build may use that jar from the local maven
repository). Docker can guarantee a strong separation but it also means that we
need to download about 1GB files for each build (which is also very time
consuming).
Earlier we started to use an approach to cache all the 3rd party jar files in
the docker image itself.
As a result we will have a huge buildenv image (1-2G) but the image download is
faster. Docker image can be downloaded as a few huge files and we don't need to
download thousands of jar files one-by-one. The huge docker image also can be
cached on the build machine without any risk.
With this approach we reduced the 10-20 minutes of the build time to 2-3
minutes.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]