سؤال

هذا هو قليلا..عبثا السؤال ، ولكن BuildBot الإخراج ليس لطيفا أن ننظر إلى..

على سبيل المثال ، مقارنة..

..وغيرها ، BuildBot يبدو بدلا من ذلك..قديمة

أنا حاليا ألعب مع هدسون ، جافا مركزية (على الرغم من أن مع هذا دليل, لقد وجدت أنه من الأسهل أن الإعداد من BuildBot و إنتاج مزيد من المعلومات)

في الأساس:هل هناك أي التكامل المستمر نظم تهدف إلى الثعبان ، التي تنتج الكثير من لامعة الرسوم البيانية و يحب ؟


تحديث: منذ هذا الوقت جنكينز مشروع استبدال هدسون المجتمع الإصدار من حزمة.الكتاب الأصلي قد انتقلت إلى هذا المشروع أيضا.جنكينز هو الآن صفقة قياسية على Ubuntu/Debian, RedHat/Fedora/CentOS, وغيرها.التحديث التالي لا يزال أساسا الصحيح.نقطة البداية أن تفعل هذا مع جنكينز هو مختلف.

تحديث: بعد محاولة عدد قليل من البدائل ، أعتقد أنني سأبقى مع هدسون. سلامة كانت لطيفة وبسيطة ، ولكن محدودة جدا.أعتقد Buildbot هو أكثر ملاءمة وجود العديد من بناء العبيد بدلا من أن كل شيء يعمل على جهاز واحد مثل كنت تستخدم ذلك.

إعداد هدسون عن الثعبان المشروع بسيطة جدا:

  • تحميل هدسون من http://hudson-ci.org/
  • تشغيله مع java -jar hudson.war
  • فتح واجهة على شبكة الإنترنت على العنوان الافتراضي http://localhost:8080
  • انتقل إلى إدارة هدسون, الإضافات, انقر فوق "تحديث" أو ما شابه
  • تثبيت بوابة المساعد (لقد كان تعيين git المسار في هدسون العالمية تفضيلات)
  • إنشاء مشروع جديد ، أدخل مستودع SCM الاقتراع فترات وهلم جرا
  • تثبيت nosetests عبر easy_install إذا لم تكن بالفعل
  • في خطوة بناء ، إضافة nosetests --with-xunit --verbose
  • تحقق من "نشر JUnit نتيجة اختبار تقرير" ومجموعة "تقرير اختبار XMLs" إلى **/nosetests.xml

هذا هو كل ما هو مطلوب.يمكنك إعداد إعلامات البريد الإلكتروني ، الإضافات تستحق نظرة.بضع أنا حاليا باستخدام بايثون المشاريع:

  • SLOCCount المساعد عد الأسطر من التعليمات البرمجية (الرسم البياني ذلك!) - تحتاج إلى تثبيت sloccount بشكل منفصل
  • انتهاكات تحليل PyLint الإخراج (يمكنك إعداد تحذير عتبات الرسم البياني عدد من الانتهاكات على كل بناء)
  • Cobertura يمكن تحليل coverage.py الإخراج.Nosetest يمكن جمع التغطية أثناء تشغيل الاختبارات الخاصة بك باستخدام nosetests --with-coverage (هذا يكتب الإخراج إلى **/coverage.xml)
هل كانت مفيدة؟

المحلول

قد ترغب في التحقق الأنف و على Xunit إخراج البرنامج المساعد.هل يمكن أن يكون تشغيل وحدة الاختبارات و تغطية الشيكات مع هذا الأمر:

nosetests --with-xunit --enable-cover

التي سوف تكون مفيدة إذا كنت تريد أن تذهب جنكينز الطريق ، أو إذا كنت ترغب في استخدام آخر CI الخادم التي لديها دعم JUnit اختبار التقارير.

وبالمثل يمكنك التقاط الإخراج من pylint باستخدام انتهاكات المساعد جنكينز

نصائح أخرى

لا أعرف ما إذا كان سيفعل : عض مصنوع من الرجال الذين يكتبون تراك و هو متكامل مع البند. أباتشي غامب هو CI أداة تستخدم من قبل أباتشي.هو مكتوب في بيثون.

لقد كان نجاحا كبيرا مع TeamCity كما لدينا CI الخادم باستخدام الأنف كما لدينا اختبار عداء. Teamcity المساعد nosetests يعطيك العد تمرير/تفشل للقراءة عرض فشل اختبار( التي يمكن أن تكون بالبريد الإلكتروني).حتى يمكنك رؤية تفاصيل الاختبار فشل في حين كنت كومة تشغيل.

إذا بالطبع يدعم أشياء مثل التي تعمل على آلات متعددة و هو أبسط من ذلك بكثير لإعداد والحفاظ عليها من buildbot.

Buildbot شلال صفحة يمكن أن يكون إلى حد كبير prettified.وهنا مثال http://build.chromium.org/buildbot/waterfall/waterfall

Atlassian الخيزران هو أيضا بالتأكيد تستحق التدقيق بها.كامل Atlassian جناح (جيرة, التقاء, فيش, الخ) حلو جدا.

أعتقد أن هذا الموضوع قديم جدا ولكن هنا هو بلدي يأخذ على ذلك مع هدسون:

قررت أن أذهب مع بيب واقامة الريبو (مؤلمة للحصول على العمل ولكن لطيفة تبحث eggbasket) ، هدسون تحميل السيارات مع النجاح في الاختبارات.هنا هو بلدي الخام السيناريو جاهز للاستخدام مع هدسون التكوين تنفيذ البرنامج النصي مثل:/var/lib/hudson/venv/main/bin/hudson_script.py -w $مساحة العمل -p بلدي.حزمة -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 __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 و تبعيات كل مجموعة ثم يمكنك التحقق من صندوق وتشغيل هذه الاشياء على ذلك.

آمل أن يساعد هذا شخص ما.

------تحديث---------

لقد تم إضافة epydoc التي تناسبها بشكل جيد حقا مع هدسون.فقط إضافة جافادوك إلى التكوين الخاص بك مع html مجلد

نلاحظ أن النقطة لا يدعم -E العلم بشكل صحيح في هذه الأيام, حتى يكون لديك لإنشاء venv بشكل منفصل

آخر واحد : مشرقة الباندا هو استضافت أداة بيثون

إذا كنت تفكر في استضافتها CI الحل ، والقيام مفتوحة المصدر ، يجب أن ننظر إلى ترافيس CI وكذلك - وقد لطيفة جدا التكامل مع جيثب.في حين أنها بدأت روبي أداة لديهم وأضاف بيثون منذ فترة.

إشارة خيار آخر.يمكنك معرفة المزيد حول هذا الموضوع ومشاهدة الفيديو أيضا هنا.

وأود أن تنظر CircleCi - تم دعم بايثون و جميلة جدا الإخراج.

التواصل هو binstar الآن قادرة على تحريك يبني من جيثب يمكن تجميع لينكس ، ماك و ويندوز ( 32 / 64 ).الشيء أنيق هو أنه يسمح لك بشكل وثيق الزوجين توزيع التكامل المستمر.هذا هو عبور t و تنقيط أنا من التكامل.الموقع سير العمل وأدوات مصقول حقا AFAIK conda هو أقوى pythonic طريقة توزيع معقدة وحدات بيثون ، حيث تحتاج إلى التفاف و توزيع C/C++/Fotran المكتبات.

وقد استخدمنا للعض قليلا جدا.أنها جميلة و يدمج بشكل جيد مع تراك, ولكن الألم في بعقب لتخصيص إذا كان لديك أي غير قياسي سير العمل.أيضا يوجد العديد من الإضافات كما أن هناك أكثر الأدوات شعبية.حاليا نحن تقييم هدسون كبديل.

تحقق rultor.com.كما هذه المادة ويوضح أنه يستخدم الميناء لكل بناء.وذلك بفضل التي يمكنك تكوين ما تريد داخل الميناء الصورة ، بما في ذلك الثعبان.

قليلا تنويه لقد كان في الواقع إلى بناء حل مثل هذا العميل الذي أراد تلقائيا اختبار و نشر أي رمز على بوابة دفع زائد إدارة إصدار التذاكر عبر بوابة الملاحظات.هذا يؤدي أيضا إلى العمل على ويهدف المشروع.

واحد يمكن بسهولة الإعداد فقط العارية عقدة نظام بناء المستخدم و إدارة بناء من خلال make(1), expect(1), crontab(1)/systemd.unit(5), ، incrontab(1).واحد حتى يمكن أن تذهب خطوة أبعد من ذلك استخدام ansible والكرفس الموزعة يبني مع وجعل النسيج/nfs الملف المخزن.

على الرغم من أنني لا أتوقع أي شخص غير Graybeard UNIX الرجل أو مبدأ مستوى مهندس/مهندس أن تذهب في الواقع إلى هذا الحد.فقط يجعل فكرة جميلة و إمكانية تجربة التعلم منذ بناء الخادم ليس أكثر من وسيلة تعسفا تنفيذ كتابتها المهام بطريقة آلية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top