簡體   English   中英

Jenkins使用生成的報告在Docker容器中構建

[英]Jenkins build inside a docker container with generated reports

我是Jenkins和Docker的新手,即使經過一些研究,我也找不到解決這些問題的方法。

我想要 :

  • 在Docker容器中的項目上執行pytest和python-coverage。
  • 這應該生成測試和覆蓋率報告
  • 訪問生成的報告並使用一些Jenkins的插件閱讀它們。

當我在本地使用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格式,並添加一個構建后操作即可發布測試結果,指向正確的路徑,如下所示:

發布JUnit測試

詹金斯會將生成的報告復制到容器外部。

如果覆蓋工具正在生成HTML報告,則可以使用HTML Publisher插件 ,就像上述發布步驟一樣。

Docker復制(docker cp)可以從容器文件系統中復制文件。 有關詳情,請參見此頁面 您可以在Jenkins中使用此命令在構建完成后從容器中檢索coverage和單元測試結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM