في الآونة الأخيرة ، بالنسبة لـ QtProtobuf ، شعرت بالحيرة من خلال إعداد CI متسلط للتحقق من طلبات السحب الملقب ، وبالطبع لإدراج شارة عصرية في README للمشروع. الخيارات كانت GitHub Actions و Travis CI . بصراحة ، لم أقم بالبحث والمقارنة والتحليل وأردت البساطة والحل السريع لمهمة بسيطة للغاية. أولاً ، اكتشفت CI لـ GitHub Actions ، وقمت بإعداد التحقق من اختبار البنية والوحدة عبر حاوية الإرساء. ولكن نظرًا لعدد لا يحصى من القيود ، تحولت إجراءات جيثب إلى أنها غير مناسبة للتحقق من المشروع في ويندوز. اضطررت إلى اللجوء إلى Travis CI.
KDPV_not_found.png
في وقت كتابة هذا المقال في Travis CI ، كان هناك إخلاء من هذا القبيل:
بنيات Windows في مرحلة الوصول المبكر. يرجى التوجه إلى منتدى مجتمع Travis CI للحصول على المساعدة أو نشر الأفكار.
تسبب هذا في القلق ، لأنني في البداية حاولت تكوين كل شيء من خلال حاوية عامل الميناء وإدخاله في إجراءات GitHub ، لكن هذا المشروع فشل بسبب القيود المفروضة على حجم ونوع الحاويات ، إلخ. على جيثب.
لرجال الأعمال
للبدء ، تحتاج إلى تفويض Travis CI على GitHub ، وبعد ذلك سيظهر تطبيق Travis CI في إعدادات ملفك التعريفي. ملائمًا ، يمكنك تحديد مستودعات يمكن لـ Travis CI الوصول إليها:

والخطوة التالية هي تكوين مشغلات Travis CI. تم تنفيذ هذا الإجراء بالفعل من لجنة إدارة Travis CI نفسها ؛ في وقت كتابة هذا التقرير ، كانت المشغلات التالية متاحة:
- ادفع الإطلاق لأي غداء المشروع
- تشغيل عند إنشاء طلبات دمج
- توقيت الزناد (كرون)
من حيث المبدأ ، مجموعة لائقة لبناء CI.
بعد تحديد المشغلات لتشغيل الإنشاءات ، تحتاج إلى إنشاء .travis.yml ، مع وصف لإجراء الإنشاء ، وبناءً على المشغلات المتاحة ، ضع هذا الملف في المخزون. تم حيرة الوثائق المبعثرة وغير المنتظمة الخاصة بـ Travis CI نفسها فيما يتعلق بـ .travis.yml ، ولكن يمكنك معرفة ذلك إذا كنت ترغب في ذلك.
كانت المهمة الرئيسية التي وقفت لإعداد البيئة للتجميع ، لأن التجميع نفسه والتحقق من الأعمال CMake.
نحن تصف إجراء التجميع في .travis.yml
تحتاج أولاً إلى اختيار نظام تشغيل يعمل كجهاز ظاهري على خوادم Travis CI ولغة برمجة.
os: windows language: C++ ...
اللغة ، كما أفهمها ، تقوم بأتمتة بعض الخطوات إذا لم يتم تحديدها بشكل صريح ، لكن ربطها يمثل لغزا بالنسبة لي. اعتقدت أنه بدونه لن يكون هناك MSVC مثبت مسبقًا ، لكن خلال التجارب تبين أنه كان متاحًا أيضًا للغات أخرى.
الخطوة التالية هي تنزيل وتثبيت التبعيات اللازمة. بالنسبة إلى QtProtobuf ، هذه هي:
- كيو تي 5.12.3 أو أعلى
- cmake-3.1 أو أعلى
- الفراولة بيرل 5.28 أو أعلى
- GoLang 1.10 أو أعلى
- Yasm 1.3 أو أعلى
- برنامج Visual Studio مترجم 14.16.x
وهنا ساعد Travis CI إلى حد كبير. من بين الحزم المثبتة مسبقًا لم يكن Git و MSVC فقط ، ولكن أيضًا cmake ، wget و Chocolatey . في prisnip في وجود الشوكولاته ، يتم تسهيل التثبيت الإضافي للتبعيات إلى حد كبير. صحيح ، لا يزال لغزا بالنسبة لي لماذا Qt لم يتم تسليمها بعد إلى الشوكولاته.
للبدء ، قم بتنزيل أداة تثبيت Qt الكاملة من المستودع الرسمي:
... before_install: - wget -q https://download.qt.io/official_releases/qt/5.13/5.13.2/qt-opensource-windows-x86-5.13.2.exe ...
ملاحظة: عند التنزيل ، تقوم wget بتفريغ عدد كبير من السجلات مع تقدم التنزيل. لدى Travis CI ، مثل GitHub ، حدًا لحجم سجل الإنشاء ، لذلك يجب تجنب السجلات غير الضرورية. -q aka - الخيار تمامًا يخفي إخراج سجل wget.
نجعل تثبيت التبعيات اللازمة:
... install: - choco install golang - choco install yasm - ./qt-opensource-windows-x86-5.13.2.exe --script ./.ci/qt_installer_windows.qs ...
مع تثبيت GoLang و Yasm ، أعتقد أنه يجب ألا تكون هناك أسئلة. ولكن إطلاق المثبت كيو تي ، وسوف إيلاء المزيد من الاهتمام.
يدعم QtInstallerFramework أتمتة عملية التثبيت عن طريق كتابة البرامج النصية .
البرامج النصية الجاهزة لتثبيت إصدار معين من Qt هي مجرد googled ، وسأعطي فقط رابطًا لواحد موجود حاليًا وأولي اهتمامًا لاختيار مكونات التثبيت:
... Controller.prototype.ComponentSelectionPageCallback = function() { var widget = gui.currentPageWidget(); widget.deselectAll(); widget.selectComponent("qt.qt5.5132.win32_msvc2017"); gui.clickButton(buttons.NextButton); } ...
أنا هنا أوقف تشغيل جميع مكونات مربع الاختيار عن طريق الاتصال بـ widget.deselectAll();
وتشمل " qt.qt5.5132.win32_msvc2017 " اللازمة للبناء. هناك جانبان مهمان عند كتابة هذا الإجراء:
- selectComponent يعمل مثل المكون الرسومي ، وبالتالي يتم تحديد التبعيات والمكونات الفرعية وفقًا لنفس المنطق كما لو أننا اخترناها في الواجهة الرسومية. لهذا السبب لا داعي للقلق بشأن حل التبعيات.
- يمكن عرض أسماء المكونات في وضع التثبيت "الشفهي". للقيام بذلك ، قمت بإجراء
widget.selectAll();
في أحد التكرارات widget.selectAll();
وبدأ التثبيت باستخدام - ./qt-opensource-windows-x86-5.13.2.exe --verbose --script ./.ci/qt_installer_windows.qs
. في السجلات ، يمكنك بسهولة العثور على جميع المكونات التي تحتاجها وضبط التثبيت الخاص بها باستخدام widget.selectComponent / widget.deselectComponent.
والنقطة المهمة الأخيرة التي سأتناولها في هذا البرنامج التعليمي هي بيئة البناء. نظرًا لحقيقة أن تثبيت التبعيات والتجميع يتم داخل نفس الغلاف ، فبعد إعداد Go و Yasm في غلافنا ، لا يوجد PATH مسجل قبل الملفات القابلة للتنفيذ. لذلك ، يجب عليك تسجيل PATH ، GOROOT يدويًا قبل السجود:
script: ... - setx path "%path%;C:\Qt\5.13.2\msvc2017\bin;C:\Go\bin;C:\ProgramData\chocolatey\lib\yasm\tools" - set GOROOT="c:\Go" - set PATH="%PATH%;C:\Qt\5.13.2\msvc2017\bin;C:\Go\bin;C:\ProgramData\chocolatey\lib\yasm\tools" - cmake -DCMAKE_PREFIX_PATH="C:\Qt\5.13.2\msvc2017;C:\Go\bin;C:\ProgramData\chocolatey\lib\yasm\tools" .. ...
أريد أيضًا أن ألفت الانتباه إلى حقيقة أنه في CMAKE_PREFIX_PATH ، عن طريق القياس ، تحتاج إلى تحديد المسار إلى Go و Yasm لكي تعمل وظيفة find_program بشكل صحيح.
ربما في وقت لاحق سوف أذهب إلى وصف إنشاء حاوية عامل ميناء لبناء مع كيو تي على متن الطائرة.
جميع النصوص يمكن العثور عليها هنا.