Greetings,
I'm trying to setup a pipeline where a container is built, run, and 
appropriate tests run in the container, all during the job. The challenge 
I'm hitting is that jenkins seems to be overriding my WORKDIR and USER that 
I specify in my Dockerfile. My Dockerfile looks like this:
FROM nodesource/nsolid:alpine

# Create `app` group and user since the base nodesource image
# doesn't currently.
RUN addgroup -g 1000 app \
    && adduser -G app -u 1000 -h /app -D app

USER app
WORKDIR /app
ENV NODE_ENV=development
COPY package.json /app/package.json
COPY . /app
RUN npm install

In my pipeline I'm doing this:
testci_env = docker.build(testci_imageTag, '-f docker/Dockerfile.test .')
           testci_env.inside("--net=${network}") {
             try {
               sh 'npm run test-ci'
             } catch(err) {
               currentBuild.result = 'FAILED'
             }
           }  //end testci_env.inside


In Jenkins output I'm seeing that it's building the image as I would 
expect, but then it's overriding the WORKDIR and USER settings I've 
specified in my Dockerfile when it runs 'docker run' to create a container:

docker run -t -d -u 233:233 
--net=tmp_hrs_jenkins-sandbox-hrs_build_image_test1-66 -w 
/home/jenkins/workspace/sandbox/hrs_build_image_test1 --volumes-from 
c51d585c10d38a36ce98726508144026399c6d1b4cca590c87a3dd19cb73893d -e ******** -e 
******** -e ******** -e ******** -e ******** -e ******** -e ******** -e 
******** -e ******** -e ******** -e ******** -e ******** -e ******** -e 
******** -e ******** -e ******** -e ******** -e ******** -e ******** -e 
******** -e ******** -e ******** -e ******** -e ******** --entrypoint cat 
tmp_hrs_testci_d5f106f-66


The issue as I see it is jenkins overriding a lot of my Dockerfile settings:
*my WORKDIR in Dockerfile will be overridden by jenkins during runtime
*The COPY directive in the Dockerfile isn't going to put my application 
files where Jenkins will later override the WORKDIR to point to
*jenkins is going to override the user to 'jenkins'

The result of course is my application tests can't run properly because the 
env isn't as specified in the Dockerfile.

I have tried passing in the relevant arguments -w and -u on the .inside 
line, just like I'm doing with the --net arg, but jenkins simply appends 
them to what it already thinks it should be doing, so I end up with my -w 
as well as jenkins -w, etc, which of course isn't helping.

It's possible I'm not approaching this in the way the docker functionality 
inside jenkins pipelines was intended to be used. How are folks working 
around the issues I'm hitting?

I've had a hard time finding detailed documentation that covers the 
docker.build and .inside methods in detail, as well as best practices for 
using them.

Regards,
Daniel

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to jenkinsci-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-users/2019dfca-c00e-4690-add0-3360f9a9618b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to