これはちょっとした無駄な質問ですが、BuildBotの出力は特に見た目が良いわけではありません。
たとえば、..と比較.
..その他、 BuildBot むしろ見えます。
私は現在、Hudsonで遊んでいますが、非常にJava中心です(ただし、 このガイド の場合、BuildBotよりもセットアップが簡単であり、より多くの情報が生成されます)
基本的には、Python向けの継続的インテグレーションシステムがあり、光沢のあるグラフなどを大量に生成しますか?
更新:この時以来、JenkinsプロジェクトはHudsonをパッケージのコミュニティバージョンとして置き換えました。元の作者もこのプロジェクトに移動しました。 JenkinsはUbuntu/Debian、RedHat/Fedora/CentOSなどの標準パッケージになりました。次の更新は依然として本質的に正しいです。 Jenkins でこれを行う開始点は異なります。
Update:いくつかの代替案を試した後、私はハドソンに固執すると思います。 Integrity は素晴らしくシンプルでしたが、かなり制限されていました。 Buildbot は、私が使用していたようにすべてを単一のマシンで実行するのではなく、多数のビルドスレーブを持つのに適しています。
PythonプロジェクトのHudsonの設定は非常に簡単でした:
Java -jar hudson.war
で実行しますhttp://localhost:8080
のデフォルトアドレスでWebインターフェースを開きますgit
パスを設定する必要がありました)easy_install
経由でnosetests
をインストールしますnosetests --with-xunit --verbose
を追加します**/nosetests.xml
に設定します必要なのはそれだけです。メール通知を設定できます。 プラグイン は一見の価値があります。現在、Pythonプロジェクトに使用しているもの:
nosetests --with-coverage
を使用してテストの実行中にカバレッジを収集できます(これにより、出力が**/coverage.xml
に書き込まれます)Nose および Xunit出力プラグイン をチェックアウトすることをお勧めします。単体テストを実行して、このコマンドでカバレッジチェックを実行できます。
nosetests --with-xunit --enable-cover
Jenkinsルートを利用する場合、またはJUnitテストレポートをサポートする別のCIサーバーを使用する場合に役立ちます。
同様に、 Jenkinsの違反プラグイン を使用して、pylintの出力をキャプチャできます
Bitten は、Tracを作成し、Tracと統合されている人によって作成されます。 Apache Gump は、Apacheが使用するCIツールです。 Pythonで書かれています。
CIサーバーとして TeamCity を使用し、テストランナーとしてnoseを使用して大成功を収めました。 nosetestsのTeamcityプラグイン は、失敗したテスト(電子メールで送信可能)のカウント/成功、読み取り可能な表示を提供します。スタックの実行中にテストの失敗の詳細を確認することもできます。
もちろん、複数のマシンでの実行などをサポートし、ビルドボットよりもセットアップと保守がはるかに簡単な場合。
Buildbotのウォーターフォールページはかなりきれいにすることができます。これがいい例です http://build.chromium.org/buildbot/waterfall/waterfall
このスレッドはかなり古いと思いますが、ハドソンとの私の見解は次のとおりです。
Pipを使用してレポ(作業に苦労しますが、見栄えの良い卵のバスケット)を設定することにしました。ハドソンはテストが成功すると自動アップロードします。ここに、次のようなhudson config実行スクリプトで使用するための大まかな準備スクリプトを示します。/var/lib/hudson/venv/main/bin/hudson_script.py -w $ WORKSPACE -p my.package -v $ BUILD_NUMBER構成ビットの**/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 __== "__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と依存関係がすべて設定されたパッケージごとのリポジトリ構造を持っていることを前提としているので、トランクをチェックアウトして実行するだけです。
これが誰かの助けになることを願っています。
- - - 更新 - - - - -
ハドソンと非常にうまく適合するepydocを追加しました。 htmlフォルダを使用してjavadocを設定に追加するだけです
最近、pipは-Eフラグを適切にサポートしていないため、venvを個別に作成する必要があります。
アトラシアンの Bamboo もチェックする価値があります。 Atlassianスイート全体(JIRA、Confluence、FishEyeなど)は非常に甘いです。
別のもの: Shining Panda はpythonのホストされたツールです
ホスト型CIソリューションを検討していて、オープンソースを使用している場合は、 Travis CI も検討する必要があります。GitHubとの統合が非常に優れています。 Rubyツールとして開始されましたが、彼らは added Python support 少し前に持っています。
信号は別のオプションです。あなたはそれについてもっと知り、ビデオも見ることができます こちら 。
CircleCi -素晴らしいPythonサポートがあり、非常にきれいな出力があります。
continuumの binstar はgithubからビルドをトリガーでき、linux、osx、windows(32/64)用にコンパイルできます。すてきなことは、配布と継続的インテグレーションを密接に結合できることです。それはtを超え、Iを統合する点です。サイト、ワークフロー、およびツールは非常に洗練されており、AFAIK condaは複雑なpythonモジュールを配布するための最も堅牢でPython的な方法であり、ラップand C/C++/Fotranライブラリを配布します。
rultor.com を確認してください。 この記事 で説明しているように、ビルドごとにDockerを使用します。そのおかげで、Pythonなど、Dockerイメージ内で好きなように構成できます。
少しの免責事項、私は実際にgit Pushでanyコードを自動的にテストおよびデプロイする方法が必要なクライアントのためにこのようなソリューションを構築する必要がありましたさらに、git notesを介して発行チケットを管理します。これは AIMSプロジェクト での私の仕事にもつながります。
ビルドユーザーがいるベアノードシステムを簡単にセットアップし、make(1)
、expect(1)
、crontab(1)
/systemd.unit(5)
でビルドを管理できます。 、およびincrontab(1)
。さらに一歩進んで、grisfs/nfsファイルストアを使用した分散ビルドにansibleとceleryを使用することもできます。
とはいえ、Graybeard UNIXの人やPrincipleレベルのエンジニア/アーキテクト以外の人が実際にここまで行くとは思わないでしょう。ビルドサーバーは、スクリプト化されたタスクを自動化された方法で勝手に実行する方法にすぎないため、素晴らしいアイデアと潜在的な学習体験を実現します。
かみ傷をかなり使用しました。それはきれいで、Tracとうまく統合できますが、非標準のワークフローがある場合はカスタマイズするのが面倒です。また、より一般的なツール用のプラグインほど多くはありません。現在、ハドソンを代替品として評価しています。