116

これは少し無駄な質問ですが、BuildBotの出力は特に見栄えがよくありません。

たとえば、と比較して。

..その他、BuildBotはかなり古風に見えます..

私は現在ハドソンで遊んでいますが、それは非常にJava中心です(このガイドでは、BuildBotよりもセットアップが簡単で、より多くの情報を生成しました)

基本的に:Pythonを対象とした継続的インテグレーションシステムはありますか?それはたくさんの光沢のあるグラフなどを生成しますか?


更新:今回から、JenkinsプロジェクトがパッケージのコミュニティバージョンとしてHudsonに取って代わりました。元の作者もこのプロジェクトに移動しました。Jenkinsは、Ubuntu / Debian、RedHat / Fedora/CentOSなどの標準パッケージになりました。次の更新は基本的に正しいです。Jenkinsでこれを行うための開始点は異なります。

更新:いくつかの代替案を試した後、私はハドソンに固執すると思います。誠実さは素晴らしくシンプルでしたが、かなり制限されていました。Buildbotは、私が使用していたようにすべてを1台のマシンで実行するよりも、多数のビルドスレーブを使用する方が適していると思います

Pythonプロジェクト用にHudsonを設定するのは非常に簡単でした。

  • http://hudson-ci.org/からHudsonをダウンロードします
  • で実行するjava -jar hudson.war
  • のデフォルトアドレスでWebインターフェイスを開きますhttp://localhost:8080
  • ハドソン、プラグインの管理に移動し、[更新]などをクリックします
  • Gitプラグインをインストールします(gitHudsonグローバルプリファレンスでパスを設定する必要がありました)
  • 新しいプロジェクトを作成し、リポジトリ、SCMポーリング間隔などを入力します
  • まだインストールしていない場合は、nosetests経由でインストールしますeasy_install
  • ビルドステップで、追加しますnosetests --with-xunit --verbose
  • 「JUnitテスト結果レポートの公開」にチェックを入れ、「テストレポートXML」をに設定します。**/nosetests.xml

必要なのはそれだけです。電子メール通知を設定でき、プラグインは一見の価値があります。私が現在Pythonプロジェクトに使用しているものは次のとおりです。

  • コードの行をカウントする(そしてグラフ化する)SLOCCountプラグイン-sloccountを個別にインストールする必要があります
  • PyLint出力を解析するための違反(警告しきい値を設定し、各ビルドでの違反の数をグラフ化できます)
  • Coberturaはcoverage.py出力を解析できます。Nosetestは、テストの実行中にカバレッジを収集できますnosetests --with-coverage(これにより出力がに書き込まれます**/coverage.xml
4

14 に答える 14

41

NoseXunit output pluginをチェックしてみてください。次のコマンドを使用して、単体テストとカバレッジ チェックを実行できます。

nosetests --with-xunit --enable-cover

これは、Jenkins ルートを使用する場合、または JUnit テスト レポートをサポートする別の CI サーバーを使用する場合に役立ちます。

同様に、Jenkins の違反プラグインを使用して、pylint の出力をキャプチャできます。

于 2009-03-20T20:13:24.927 に答える
10

うまくいくかどうかわからない: Bittenは Trac を書いている人たちによって作られ、Trac と統合されています。Apache Gumpは、Apache が使用する CI ツールです。Pythonで書かれています。

于 2008-10-22T13:46:55.140 に答える
9

TeamCityを CI サーバーとして使用し、nose をテスト ランナーとして使用する ことで、大きな成功を収めました。ノーズテスト用の Teamcity プラグインを使用すると、成功/失敗のカウント、失敗したテストの読み取り可能な表示 (電子メールで送信可能) を提供します。スタックの実行中に、テストの失敗の詳細を確認することもできます。

もちろん、複数のマシンでの実行などをサポートしており、buildbot よりもセットアップと保守がはるかに簡単です。

于 2008-10-23T01:30:17.593 に答える
8

Buildbotのウォーターフォールページはかなりきれいにすることができます。これが良い例ですhttp://build.chromium.org/buildbot/waterfall/waterfall

于 2010-01-08T09:16:55.063 に答える
6

このスレッドはかなり古いと思いますが、ハドソンとの私の見解は次のとおりです。

私は pip を使用してレポをセットアップすることにしました (作業を開始するのは面倒ですが、見栄えの良いエッグバスケット)。テストが成功すると、hudson が自動アップロードします。/var/lib/hudson/venv/main/bin/hudson_script.py -w $WORKSPACE -p my.package -v $BUILD_NUMBER, just put in **/coverage.xml、pylint.txt、nosetests.xml 構成ビット:

#!/var/lib/hudson/venv/main/bin/python
import os
import re
import subprocess
import logging
import optparse

logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s %(levelname)s %(message)s')

#venvDir = "/var/lib/hudson/venv/main/bin/"

UPLOAD_REPO = "http://ldndev01:3442"

def call_command(command, cwd, ignore_error_code=False):
    try:
        logging.info("Running: %s" % command)
        status = subprocess.call(command, cwd=cwd, shell=True)
        if not ignore_error_code and status != 0:
            raise Exception("Last command failed")

        return status

    except:
        logging.exception("Could not run command %s" % command)
        raise

def main():
    usage = "usage: %prog [options]"
    parser = optparse.OptionParser(usage)
    parser.add_option("-w", "--workspace", dest="workspace",
                      help="workspace folder for the job")
    parser.add_option("-p", "--package", dest="package",
                      help="the package name i.e., back_office.reconciler")
    parser.add_option("-v", "--build_number", dest="build_number",
                      help="the build number, which will get put at the end of the package version")
    options, args = parser.parse_args()

    if not options.workspace or not options.package:
        raise Exception("Need both args, do --help for info")

    venvDir = options.package + "_venv/"

    #find out if venv is there
    if not os.path.exists(venvDir):
        #make it
        call_command("virtualenv %s --no-site-packages" % venvDir,
                     options.workspace)

    #install the venv/make sure its there plus install the local package
    call_command("%sbin/pip install -e ./ --extra-index %s" % (venvDir, UPLOAD_REPO),
                 options.workspace)

    #make sure pylint, nose and coverage are installed
    call_command("%sbin/pip install nose pylint coverage epydoc" % venvDir,
                 options.workspace)

    #make sure we have an __init__.py
    #this shouldn't be needed if the packages are set up correctly
    #modules = options.package.split(".")
    #if len(modules) > 1: 
    #    call_command("touch '%s/__init__.py'" % modules[0], 
    #                 options.workspace)
    #do the nosetests
    test_status = call_command("%sbin/nosetests %s --with-xunit --with-coverage --cover-package %s --cover-erase" % (venvDir,
                                                                                     options.package.replace(".", "/"),
                                                                                     options.package),
                 options.workspace, True)
    #produce coverage report -i for ignore weird missing file errors
    call_command("%sbin/coverage xml -i" % venvDir,
                 options.workspace)
    #move it so that the code coverage plugin can find it
    call_command("mv coverage.xml %s" % (options.package.replace(".", "/")),
                 options.workspace)
    #run pylint
    call_command("%sbin/pylint --rcfile ~/pylint.rc -f parseable %s > pylint.txt" % (venvDir, 
                                                                                     options.package),
                 options.workspace, True)

    #remove old dists so we only have the newest at the end
    call_command("rm -rfv %s" % (options.workspace + "/dist"),
                 options.workspace)

    #if the build passes upload the result to the egg_basket
    if test_status == 0:
        logging.info("Success - uploading egg")
        upload_bit = "upload -r %s/upload" % UPLOAD_REPO
    else:
        logging.info("Failure - not uploading egg")
        upload_bit = ""

    #create egg
    call_command("%sbin/python setup.py egg_info --tag-build=.0.%s --tag-svn-revision --tag-date sdist %s" % (venvDir,
                                                                                                              options.build_number,
                                                                                                              upload_bit),
                 options.workspace)

    call_command("%sbin/epydoc --html --graph all %s" % (venvDir, options.package),
                 options.workspace)

    logging.info("Complete")

if __name__ == "__main__":
    main()

ものを展開することになると、次のようなことができます:

pip -E /location/of/my/venv/ install my_package==X.Y.Z --extra-index http://my_repo

そして、人々は以下を使用して何かを開発できます:

pip -E /location/of/my/venv/ install -e ./ --extra-index http://my_repo

これは、パッケージごとに setup.py と依存関係がすべて設定されたリポジトリ構造があることを前提としており、トランクをチェックアウトして、その上でこのものを実行するだけです。

これが誰かを助けることを願っています。

- - - アップデート - - - - -

hudson に非常にうまく適合する epydoc を追加しました。htmlフォルダーを使用して構成にjavadocを追加するだけです

最近の pip は -E フラグを適切にサポートしていないため、venv を個別に作成する必要があることに注意してください。

于 2011-02-25T15:25:37.993 に答える
6

Atlassian のBambooもチェックする価値があります。Atlassian スイート全体 (JIRA、Confluence、FishEye など) は非常に優れています。

于 2011-06-28T18:08:12.157 に答える
3

ホストされた CI ソリューションを検討していて、オープン ソースを実行している場合は、Travis CIも検討する必要があります。これは、GitHub との非常に優れた統合を備えています。Ruby ツールとして開始されましたが、しばらく前にPython のサポートが追加されました。

于 2012-04-28T12:43:00.743 に答える
3

もう 1 つ: Shining Pandaは、Python 用のホストされたツールです。

于 2011-12-20T08:28:42.910 に答える
2

信号は別のオプションです。あなたはそれについてもっと知ることができ、ビデオもここで見ることができます.

于 2010-03-29T04:05:02.383 に答える
2

私はCircleCiを検討します- 優れた Python サポートと非常にきれいな出力を備えています。

于 2012-11-08T16:41:53.427 に答える
1

continuum のbinstarは、github からビルドをトリガーできるようになり、Linux、OSX、および Windows 用にコンパイルできるようになりました (32 / 64 )。優れた点は、ディストリビューションと継続的インテグレーションを密接に結合できることです。それは、統合の t を交差し、I を点付けすることです。サイト、ワークフロー、およびツールは非常に洗練されており、私の知る限り、conda は、C/C++/Fotran ライブラリをラップして配布する必要がある複雑な Python モジュールを配布するための最も堅牢で Pythonic な方法です。

于 2014-11-25T19:01:39.773 に答える
0

私たちは噛まれたものをかなり使いました。きれいで、Trac とうまく統合できますが、非標準のワークフローがある場合、カスタマイズするのは大変です。また、人気のあるツールほど多くのプラグインはありません。現在、代替品としてハドソンを評価中です。

于 2010-02-06T15:03:28.260 に答える
0

rultor.comを確認してください。この記事で説明しているように、すべてのビルドに Docker を使用しています。そのおかげで、Python を含め、Docker イメージ内で好きなものを構成できます。

于 2014-08-03T17:27:27.363 に答える