[英]Jenkins build inside a docker container with generated reports
我是Jenkins和Docker的新手,即使經過一些研究,我也找不到解決這些問題的方法。
我想要 :
當我在本地使用Docker時,它正在工作。 我創建了一個Dockerfile,該文件創建了一個帶有所需libs和其中源代碼的docker映像,然后在創建容器並運行測試時調用一個腳本。 我可以看到它正在工作,因為我使用了cat並能夠在終端中查看生成的報告。
我的問題是:我如何訪問Jenkins容器內生成的報告,然后再使用插件讀取它們。
編輯:所以這是我正在嘗試做的一個示例,這樣您可以有一個更好的主意。
首先,我的Dockerfile示例:
# 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
我的compil.sh包含我的測試執行
# 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
這是我使用Cloudbees插件運行時的詹金斯日志:
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
因此,我的主要目標是為詹金斯找到一種訪問生成的報告的方法。 另外,有沒有辦法在構建時查看docker容器內部發生了什么? 例如,當我在本地嘗試時,我試圖在我的shell腳本中放一只cat
來查看報告,但是在Jenkins中,我找不到找到它的方法。
Docker插件或Docker Slaves插件都可以正常工作。
只需確保生成的報告采用Jenkins可以“理解”的xUnit格式,並添加一個構建后操作即可發布測試結果,指向正確的路徑,如下所示:
詹金斯會將生成的報告復制到容器外部。
如果覆蓋工具正在生成HTML報告,則可以使用HTML Publisher插件 ,就像上述發布步驟一樣。
Docker復制(docker cp)可以從容器文件系統中復制文件。 有關詳情,請參見此頁面 。 您可以在Jenkins中使用此命令在構建完成后從容器中檢索coverage和單元測試結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.