I am new to Jenkins and Docker and even after some researches, I do not find the way to do these things.
I want to :
- Execute pytest and python-coverage on my project inside a docker container.
- This should generate test and coverage reports
- Access the generated reports and read them with some Jenkins'plugin.
When I try locally with Docker, it is working. I created a Dockerfile which creates a docker image with the libs needed and the source code inside it, then a script is called when the container is created and run the tests. I can see that it is working because I used cat and was able to see the generated reports inside my terminal.
My problem here is : How can I have access to the reports generated inside the container in Jenkins and read them with plugins after.
EDIT : So here an example of what I am trying to do so you can have a better idea.
First, my Dockerfile example :
# starting from debian image
FROM debian
# install pytest and coverage to execute my tests
RUN apt-get update && apt-get install -y \
python-pytest \
python-coverage
# add source files to the image
ADD . /HelloPython/
WORKDIR /HelloPython/
# execute shell script which run tests
CMD sh ./compil.sh
My compil.sh contains my tests execution
# Run unit tests and generate JUnit reports in the reports directory
py.test --junitxml reports/test-results.xml test*.py
# Generate reports of the test code coverage
python-coverage run -m unittest discover
python-coverage xml -o reports/test-coverage.xml
And here my jenkins log when I run it with the Cloudbees plugin :
Démarré par l'utilisateur chris
Building in workspace /var/lib/jenkins/workspace/HelloPythonCover
Build Docker image from ./Dockerfile ...
$ docker build --file /var/lib/jenkins/workspace/HelloPythonCover/Dockerfile /var/lib/jenkins/workspace/HelloPythonCover
Sending build context to Docker daemon 8.704 kB
Step 1 : FROM debian
---> 1b088884749b
Step 2 : RUN apt-get update && apt-get install -y python-pytest python-coverage
---> Using cache
---> a5883bbc27e4
Step 3 : ADD . /HelloPython/
---> c03ecb80040c
Removing intermediate container d2cc8ea14c11
Step 4 : WORKDIR /HelloPython/
---> Running in dc3b08c6fa02
---> 20f41970849c
Removing intermediate container dc3b08c6fa02
Step 5 : CMD sh ./compil.sh
---> Running in 14ceca0e5975
---> 853cb296b94f
Removing intermediate container 14ceca0e5975
Successfully built 853cb296b94f
Docker container faaedb777e032e38586278ad776e1561a9f1c5a92536c06bca7e3af12b74a355 started to host the build
$ docker exec --tty faaedb777e032e38586278ad776e1561a9f1c5a92536c06bca7e3af12b74a355 env
[HelloPythonCover] $ docker exec --tty --user 116:125 faaedb777e032e38586278ad776e1561a9f1c5a92536c06bca7e3af12b74a355 env BUILD_DISPLAY_NAME=#29 BUILD_ID=29 BUILD_NUMBER=29 BUILD_TAG=jenkins-HelloPythonCover-29 BUILD_URL=http://localhost:8080/job/HelloPythonCover/29/ CLASSPATH= EXECUTOR_NUMBER=0 HOME=/root HOSTNAME=faaedb777e03 HUDSON_HOME=/var/lib/jenkins HUDSON_SERVER_COOKIE=bd683ee6091ff880 HUDSON_URL=http://localhost:8080/ JENKINS_SERVER_COOKIE=bd683ee6091ff880 JENKINS_URL=http://localhost:8080/ JOB_NAME=HelloPythonCover JOB_URL=http://localhost:8080/job/HelloPythonCover/ NODE_LABELS=master NODE_NAME=master PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin TERM=xterm WORKSPACE=/var/lib/jenkins/workspace/HelloPythonCover /bin/sh -xe /tmp/hudson6836918802627685893.sh
Stopping Docker container after build completion
Finished: SUCCESS
So my primary goal here is to find a way for jenkins to get access to the reports generated. Also, Is there a way to see what is going inside the docker container while building ? For example, I tried to put a cat
inside my shell script to see the reports while I tried locally, but in Jenkins I can not find a way to see it.