أتمتة إنشاء مشروع Qt على Windows في Travis CI

في الآونة الأخيرة ، بالنسبة لـ 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 بشكل صحيح.


ربما في وقت لاحق سوف أذهب إلى وصف إنشاء حاوية عامل ميناء لبناء مع كيو تي على متن الطائرة.


جميع النصوص يمكن العثور عليها هنا.

Source: https://habr.com/ru/post/ar485034/


All Articles