2016-07-20 9 views
0

私はジェンキンスとドッカーには新しく、いくつかの調査をしてもこれらのことを行う方法は見つけられません。ジェンキンスは、生成されたレポートを含むドッカーコンテナ内に構築します

私がしたい:

  • は、ドッキングウィンドウコンテナ内部の私のプロジェクトにpytestとのpython-カバレッジを実行します。
  • これは、テストレポートとカバレッジレポートを生成する必要があります。
  • 生成されたレポートにアクセスして、いくつかのJenkinsプラグインでそれらを読み取ります。

私はDockerでローカルに試してみるとうまくいきます。私はDockerfileを作成し、必要なlibsとソースコードを含むドッカー画像を作成し、コンテナが作成されテストを実行するときにスクリプトが呼び出されます。私は猫を使っていて、私の端末の中で生成されたレポートを見ることができたので、それが動作しているのがわかります。

私の問題は次のとおりです。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は、私はCloudBeesのプラグインでそれを実行したときに私のテストの実行

# 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 

そして、ここに私のジェンキンスさんは、ログイン含まれています

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 

ここで私の主な目標は、ジェンキンが生成されたレポートにアクセスする方法を見つけることです。また、ビルド中にドッカーコンテナ内に何が入っているのかを確認する方法はありますか?たとえば、ローカルで試してみたときに、私のシェルスクリプトの中にcatを入れてレポートを見ようとしましたが、Jenkinsでは見る方法が見つかりませんでした。

+0

あなたが使用しているメカニズムを構築していますか?あなたのビルドファイルに記載されているログの場所を確認できましたか? – DevD

+0

私の説明は間違っています、私はそれを編集します。実際には、単体テストとコードカバレッジに関するレポートを生成するために、ソースコードにpytestとpython-coverageを実行しています。 – Whin3

+0

共有ボリュームをお勧めします。 –

答えて

1

Docker PluginまたはDocker Slaves Pluginのいずれかが正常に動作するはずです。

だけで生成されたレポートは、ジェンキンスさんは「理解」とテストを公開するビルド後のアクションを追加することができ、それはこのようなものです正しい道を指し示す結果というのxUnit形式であることを確認してください:

Publish JUnit Test

Jenkinsは、生成されたレポートをコンテナの外にコピーします。

カバレッジツールでHTMLレポートを生成している場合は、上記の公開手順のようにHTML Publisher Pluginを使用できます。

+0

生成されたレポートはJUnit形式であり、大丈夫です。しかし、私はドッカープラグインを試しましたが、ビルドの始めに "py.test --junitxml reports/test-results.xml test * .py"でテストを実行しようとしましたが、ファイル。私はドッカーのイメージで自分の情報源の有無にかかわらず試しましたが、それは両方のために働いていません。 – Whin3

+0

あなたのテストや少なくともテストレポーターに問題がある可能性があります。テストでレポートが生成されていることを確認するには、定義したターゲットパス内のファイルをリストしたシェルスクリプトを実行してください。デバッグのためのポストアクションセクションの直前にビルドステップとして実行してください。 –

+0

テストが正常に動作しているようです。コンテナに入れずに地元やジェンキンで実行すると、すべてがうまくいっています。私は問題は、私はコンテナの内部に何かにアクセスしていないということです。私がしなければならない「唯一の」ことは、コンテナ内のファイルにアクセスすることであり、現時点でそれを行う方法は見つけられませんでした。 – Whin3

0

ドッカーコピー(ドッカーcp)は、コンテナファイルシステムからファイルをコピーできます。詳細については、this pageを参照してください。 Jenkinsでこのコマンドを使用すると、ビルドが完了した後、コンテナからカバレッジおよびユニットテストの結果を取得できます。

関連する問題