[ 
https://issues.apache.org/jira/browse/AVRO-1537?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14251528#comment-14251528
 ] 

Niels Basjes commented on AVRO-1537:
------------------------------------

Hi [~tomwhite], 
I verified on my system but running the scipt for the first time takes 'ages' 
and running it the second time I see the command prompt within two seconds.
So if you get very different results I suspect a problem on your system.

I agree that the 'safetest' name is a poor choice. Perhaps simply having the 
{{./build.sh shell}} is good enough for the first version?

I also noticed that all files in the avro directory become owned by {{root}} 
because that is the default user inside docker.
So after exiting the docker environment I could not longer do a {{mvn clean}} 
because the generated files (.class, .jar, etc) are all stored in directories 
owned by the root user.

In an attempt to solve this I came up with this.
I effectively create an additional layer that simply recreates the current user 
(same username, userid, groupid) in the docker environment.

{code}
function runindocker {
    docker build -t ${DOCKER_IMAGE_NAME} ${SOURCEDIR}/docker
    docker build -t ${DOCKER_IMAGE_NAME}_${USER} - << UserSpecificDocker
    FROM ${DOCKER_IMAGE_NAME}
    RUN groupadd -g $(id -g) ${USER}
    RUN useradd  -g $(id -g) -u $(id -u) -k /root -m ${USER}
    ENV HOME /home/${USER}
UserSpecificDocker
    # By mapping the .m2 directory you can do an mvn install from within the 
container and use the result on your normal system.
    # And this also is a significant speedup in subsequent builds because the 
dependencies are downloaded only once.
    docker run --rm=true -t -i -v ${SOURCEDIR}:/home/${USER}/avro -w 
/home/${USER}/avro -v ${HOME}/.m2:/home/${USER}/.m2 -u ${USER} 
${DOCKER_IMAGE_NAME}_${USER} $1 $2 $3 $4 $5 $6
}
{code}

> Make it easier to set up a multi-language build environment
> -----------------------------------------------------------
>
>                 Key: AVRO-1537
>                 URL: https://issues.apache.org/jira/browse/AVRO-1537
>             Project: Avro
>          Issue Type: Improvement
>            Reporter: Martin Kleppmann
>            Assignee: Tom White
>         Attachments: AVRO-1537.patch, AVRO-1537.patch, AVRO-1537.patch
>
>
> It's currently quite tedious to set up an environment in which the Avro test 
> suites for all supported languages can be run, and in which release 
> candidates can be built. This is especially so when we need to test against 
> several different versions of a programming language or VM (e.g. 
> JDK6/JDK7/JDK8, Ruby 1.8.7/1.9.3/2.0/2.1).
> Our shared Hudson server isn't an ideal solution, because it only runs tests 
> on changes that are already committed, and maintenance of the server can't 
> easily be shared across the community.
> I think a Docker image might be a good solution, since it could be set up by 
> one person, shared with all Avro developers, and maintained by the community 
> on an ongoing basis. But other VM solutions (Vagrant, for example?) might 
> work just as well. Suggestions welcome.
> Related resources:
> * Using AWS (setting up an EC2 instance for Avro build and release): 
> https://cwiki.apache.org/confluence/display/AVRO/How+To+Release#HowToRelease-UsingAWSforAvroBuildandRelease
> * Testing multiple versions of Ruby in CI: AVRO-1515



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to