"جميلة" التكامل المستمر بايثون
-
03-07-2019 - |
سؤال
هذا هو قليلا..عبثا السؤال ، ولكن 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 الرجل أو مبدأ مستوى مهندس/مهندس أن تذهب في الواقع إلى هذا الحد.فقط يجعل فكرة جميلة و إمكانية تجربة التعلم منذ بناء الخادم ليس أكثر من وسيلة تعسفا تنفيذ كتابتها المهام بطريقة آلية.