تحليل الالتزامات وسحب الطلبات في Travis CI و Buddy و AppVeyor باستخدام PVS-Studio

تحليل الالتزامات وسحب الطلبات في Travis CI و Buddy و AppVeyor باستخدام PVS-Studio
في محلل PVS-Studio للغات C و C ++ على Linux و macOS ، بدءًا من الإصدار 7.04 ، ظهرت فرصة اختبار للتحقق من قائمة الملفات المحددة. باستخدام الوضع الجديد ، يمكنك تكوين المحلل للتحقق من الالتزامات وسحب الطلبات. ستوضح لك هذه المقالة كيفية إعداد فحص قائمة ملفات مشروع GitHub في أنظمة CI (التكامل المستمر) الشائعة مثل Travis CI و Buddy و AppVeyor.

وضع فحص قائمة الملفات

استوديو PVS هي أداة لاكتشاف الأخطاء ونقاط الضعف المحتملة في التعليمات البرمجية المصدر للبرامج المكتوبة بلغة C و C ++ و C # و Java. يعمل على أنظمة 64 بت على Windows و Linux و macOS.

يحتوي إصدار PVS-Studio 7.04 لنظامي Linux و macOS على وضع للتحقق من قائمة الملفات المصدر. يعمل هذا مع المشاريع التي يسمح لك نظام بنائها بإنشاء ملف compile_commands.json. مطلوب للمحلل لاستخراج معلومات حول تجميع الملفات المحددة. إذا كان نظام الإنشاء لديك لا يدعم إنشاء ملف compile_commands.json ، فيمكنك محاولة إنشاء مثل هذا الملف باستخدام الأداة المساعدة دب.

أيضًا ، يمكن استخدام طريقة التحقق من قائمة الملفات مع تتبع تتبع عمليات تشغيل المحول البرمجي (تتبع محلل pvs-studio-analzer). للقيام بذلك ، ستحتاج أولاً إلى تنفيذ بناء كامل للمشروع وتتبعه حتى يجمع المحلل معلومات كاملة حول معلمات التجميع لجميع الملفات التي يتم فحصها.

ومع ذلك ، فإن هذا الخيار له عيب كبير - ستحتاج إما إلى إجراء تتبع بناء كامل للمشروع بأكمله في كل عملية إطلاق ، الأمر الذي يتعارض في حد ذاته مع فكرة التحقق السريع من الالتزام. أو ، إذا قمت بتخزين نتيجة التتبع نفسها مؤقتًا ، فقد يتضح أن عمليات التشغيل اللاحقة للمحلل غير مكتملة إذا تغيرت بنية تبعية الملف المصدر بعد التتبع (على سبيل المثال ، تمت إضافة # تضمين جديد إلى أحد الملفات المصدر).

لذلك ، لا نوصي باستخدام وضع فحص قائمة الملفات مع سجل التتبع للتحقق من الطلبات أو سحب الطلبات. إذا كان بإمكانك القيام ببناء تزايدي عند التحقق من الالتزام ، ففكر في استخدام الوضع تحليل تزايدي.

يتم حفظ قائمة الملفات المصدر للتحليل في ملف نصي وتمريرها إلى المحلل باستخدام المعلمة -S:

pvs-studio-analyzer analyze ... -f build/compile_commands.json -S check-list.txt

يحدد هذا الملف المسارات النسبية أو المطلقة للملفات ، ويجب أن يكون كل ملف جديد في سطر جديد. يجوز تحديد ليس فقط أسماء الملفات للتحليل ، ولكن أيضًا النص المختلف. سيرى المحلل اللغوي أن هذا ليس ملفًا وسيتجاهل السطر. يمكن أن يكون هذا مفيدًا للتعليق إذا تم تحديد الملفات يدويًا. ومع ذلك ، غالبًا ما يتم إنشاء قائمة الملفات أثناء تحليل CI ، على سبيل المثال الملفات من الالتزام أو طلب السحب.

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

plog-converter ... --indicate-warnings ... -o /path/to/report.tasks ...

باستخدام هذه العلامة ، سيعيد المحول رمزًا غير صفري إذا كانت هناك تحذيرات في تقرير المحلل. باستخدام رمز الإرجاع ، يمكنك حظر خطاف الإلتزام المسبق ، أو طلب الالتزام أو السحب ، وعرض تقرير المحلل الذي تم إنشاؤه على الشاشة ، أو مشاركته أو إرساله بالبريد.

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

المبادئ العامة لتحليل طلب السحب

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

ضع في اعتبارك مثالاً لشجرة الالتزام بفرعين:

تحليل الالتزامات وسحب الطلبات في Travis CI و Buddy و AppVeyor باستخدام PVS-Studio

دعونا نتظاهر بأن الالتزام A1 يحتوي على كمية كبيرة إلى حد ما من التعليمات البرمجية التي تم التحقق منها بالفعل. في وقت سابق بقليل قمنا بعمل فرع من الالتزام A1 وتغيير بعض الملفات.

بالطبع ، لاحظت ذلك بعد ذلك A1 كان هناك التزامان آخران ، ولكنهما كانا أيضًا عمليات اندماج لفروع أخرى ، لأننا لا نلتزم بها رئيسي. والآن حان الوقت متى الإصلاح مستعد. لذلك ، ظهر طلب سحب لعملية الدمج B3 и A3.

بالطبع ، سيكون من الممكن التحقق من نتيجة اندماجهم بالكامل ، لكن هذا سيكون طويلًا جدًا وغير مبرر ، حيث تم تغيير عدد قليل فقط من الملفات. لذلك ، من الأكثر كفاءة تحليل التغييرات التي تم تغييرها فقط.

للقيام بذلك ، نحصل على الفرق بين الفروع ، كوننا في رأس الفرع الذي نريد الاندماج منه في الرئيسي:

git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list

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

لذلك حصلنا على الفرق بين الفروع ، أو بالأحرى قائمة أسماء الملفات التي تم تغييرها. الآن نحن بحاجة إلى إعطاء الملف .pvs-pr.list (أعدنا توجيه الإخراج أعلاه إليه) إلى المحلل:

pvs-studio-analyzer analyze -j8 
                            -o PVS-Studio.log 
                            -S .pvs-pr.list

بعد التحليل ، نحتاج إلى تحويل ملف السجل (PVS-Studio.log) إلى تنسيق قابل للقراءة:

plog-converter -t errorfile PVS-Studio.log --cerr -w

سيقوم هذا الأمر بسرد الأخطاء في ستدير (تيار إخراج خطأ قياسي).

هنا فقط لا نحتاج فقط إلى عرض الأخطاء ، ولكن أيضًا لإبلاغ خدمتنا للتجميع والاختبار بوجود مشاكل. لهذا ، تم إضافة علم إلى المحول -W (- اشر-تحذيرات). إذا كان هناك تحذير محلل واحد على الأقل ، فسيتم إعادة رمز الأداة المساعدة بلوج المحول إلى 2 ، والذي بدوره سيُعلم خدمة CI بوجود أخطاء محتملة في ملفات طلب السحب.

ترافيس سي

يتم التكوين في شكل ملف .travis.yml. للراحة ، أنصحك بوضع كل شيء في نص برمجي منفصل مع الوظائف التي سيتم استدعاؤها من الملف .travis.yml (bash scriptname.sh function_name).

سنضيف الكود اللازم إلى البرنامج النصي في سحق، لذلك نحصل على المزيد من الوظائف. في قسم تثبيت دعنا نكتب ما يلي:

install:
  - bash .travis.sh travis_install

إذا كان لديك أي تعليمات ، يمكنك نقلها إلى البرنامج النصي عن طريق إزالة الواصلات.

لنفتح الملف .ترافيس.ش وأضف إعداد المحلل إلى الوظيفة travis_install ():

travis_install() {
  wget -q -O - https://files.viva64.com/etc/pubkey.txt 
    | sudo apt-key add -
  sudo wget -O /etc/apt/sources.list.d/viva64.list 
    https://files.viva64.com/etc/viva64.list
  
  sudo apt-get update -qq
  sudo apt-get install -qq pvs-studio 
}

الآن دعنا نضيف إلى القسم سيناريو تحليل التشغيل:

script:
  - bash .travis.sh travis_script

وفي نص باش:

travis_script() {
  pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY
  
  if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
    git diff --name-only origin/HEAD > .pvs-pr.list
    pvs-studio-analyzer analyze -j8 
                                -o PVS-Studio.log 
                                -S .pvs-pr.list 
                                --disableLicenseExpirationCheck
  else
    pvs-studio-analyzer analyze -j8 
                                -o PVS-Studio.log 
                                --disableLicenseExpirationCheck
  fi
  
  plog-converter -t errorfile PVS-Studio.log --cerr -w
}

يجب تشغيل هذا الرمز بعد إنشاء المشروع ، على سبيل المثال ، إذا كان لديك إصدار CMake:

travis_script() {
  CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
  cmake $CMAKE_ARGS CMakeLists.txt
  make -j8
}

سوف يتحول مثل هذا:

travis_script() {
  CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
  cmake $CMAKE_ARGS CMakeLists.txt
  make -j8
  
  pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY
  
  if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
    git diff --name-only origin/HEAD > .pvs-pr.list
    pvs-studio-analyzer analyze -j8 
                                -o PVS-Studio.log 
                                -S .pvs-pr.list 
                                --disableLicenseExpirationCheck
  else
    pvs-studio-analyzer analyze -j8 
                                -o PVS-Studio.log 
                                --disableLicenseExpirationCheck
  fi
  
  plog-converter -t errorfile PVS-Studio.log --cerr -w
}

ربما لاحظت بالفعل متغيرات البيئة المحددة. TRAVIS_PULL_REQUEST دولار и TRAVIS_BRANCH دولار. تعلن شركة Travis CI عن ذلك من تلقاء نفسها:

  • TRAVIS_PULL_REQUEST دولار يخزن رقم طلب السحب ، أو زائفإذا كان فرعًا عاديًا ؛
  • TRAVIS_REPO_SLUG دولار يخزن اسم مستودع المشروع.

خوارزمية هذه الوظيفة:

تحليل الالتزامات وسحب الطلبات في Travis CI و Buddy و AppVeyor باستخدام PVS-Studio
يستجيب Travis CI لرموز الإرجاع ، لذا فإن وجود التحذيرات سيخبر الخدمة بأن تضع علامة على الالتزام على أنه أخطاء عربات التي تجرها الدواب.

دعنا نلقي نظرة فاحصة على هذا السطر من التعليمات البرمجية:

git diff --name-only origin/HEAD > .pvs-pr.list

الحقيقة هي أن Travis CI يدمج الفروع تلقائيًا أثناء تحليل طلب السحب:

تحليل الالتزامات وسحب الطلبات في Travis CI و Buddy و AppVeyor باستخدام PVS-Studio
لذلك ، نحن نحلل A4وليس B3-> A3. بسبب هذه الميزة ، نحتاج إلى حساب الفرق من A3، وهو الجزء العلوي من الفرع من الأصل.

يبقى أحد التفاصيل المهمة - تخزين تبعيات ملفات الرأس في وحدات الترجمة المترجمة (* .c ، * .cc ، * .cpp ، إلخ). يحسب المحلل هذه التبعيات في البداية الأولى في وضع فحص قائمة الملفات ثم يحفظها في دليل .PVS-Studio. يسمح لك Travis CI بتخزين المجلدات مؤقتًا ، لذلك سنقوم بحفظ بيانات الدليل .PVS-Studio /:

cache:
  directories:
    - .PVS-Studio/

يجب إضافة هذا الرمز إلى الملف .travis.yml. يخزن هذا الدليل العديد من البيانات التي تم جمعها بعد التحليل ، والتي ستسرع بشكل كبير عمليات التشغيل اللاحقة لتحليل قائمة الملفات أو التحليل الإضافي. إذا لم يتم ذلك ، فسيقوم المحلل بالفعل بتحليل جميع الملفات في كل مرة.

رفيق

مثل ترافيس سي ، رفيق يوفر القدرة على إنشاء المشروعات المخزنة على GitHub واختبارها تلقائيًا. على عكس Travis CI ، تم تكوينه في واجهة الويب (يتوفر دعم bash) ، لذلك ليست هناك حاجة لتخزين ملفات التكوين في المشروع.

بادئ ذي بدء ، نحتاج إلى إضافة إجراء جديد إلى سطر الإنشاء:

تحليل الالتزامات وسحب الطلبات في Travis CI و Buddy و AppVeyor باستخدام PVS-Studio
حدد المترجم الذي تم استخدامه لبناء المشروع. لاحظ حاوية عامل الإرساء المثبتة في هذا النشاط. على سبيل المثال ، هناك حاوية خاصة لدول مجلس التعاون الخليجي:

تحليل الالتزامات وسحب الطلبات في Travis CI و Buddy و AppVeyor باستخدام PVS-Studio
لنقم الآن بتثبيت PVS-Studio والمرافق الضرورية:

تحليل الالتزامات وسحب الطلبات في Travis CI و Buddy و AppVeyor باستخدام PVS-Studio
أضف الأسطر التالية إلى المحرر:

apt-get update && apt-get -y install wget gnupg jq

wget -q -O - https://files.viva64.com/etc/pubkey.txt | apt-key add -
wget -O /etc/apt/sources.list.d/viva64.list 
  https://files.viva64.com/etc/viva64.list

apt-get update && apt-get -y install pvs-studio

الآن دعنا ننتقل إلى علامة التبويب Run (الرمز الأول) ونضيف الكود التالي إلى حقل المحرر المقابل:

pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY

if [ "$BUDDY_EXECUTION_PULL_REQUEST_NO" != '' ]; then
  PULL_REQUEST_ID="pulls/$BUDDY_EXECUTION_PULL_REQUEST_NO"
  MERGE_BASE=`wget -qO - 
    https://api.github.com/repos/${BUDDY_REPO_SLUG}/${PULL_REQUEST_ID} 
    | jq -r ".base.ref"`

  git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
  pvs-studio-analyzer analyze -j8 
                              -o PVS-Studio.log 
                              --disableLicenseExpirationCheck 
                              -S .pvs-pr.list
else
  pvs-studio-analyzer analyze -j8 
                              -o PVS-Studio.log 
                              --disableLicenseExpirationCheck
fi

plog-converter -t errorfile PVS-Studio.log --cerr -w

إذا كنت قد قرأت القسم الخاص بـ Travs-CI ، فهذا الرمز مألوف لك بالفعل ، ومع ذلك ، فهناك الآن خطوة جديدة:

تحليل الالتزامات وسحب الطلبات في Travis CI و Buddy و AppVeyor باستخدام PVS-Studio
الحقيقة هي أننا الآن لا نقوم بتحليل نتيجة الدمج ، ولكننا نقوم بتحليل رأس الفرع الذي تم تقديم طلب السحب منه:

تحليل الالتزامات وسحب الطلبات في Travis CI و Buddy و AppVeyor باستخدام PVS-Studio
لذلك نحن في التزام مشروط B3 ونحتاج إلى الحصول على الاختلاف من A3:

PULL_REQUEST_ID="pulls/$BUDDY_EXECUTION_PULL_REQUEST_NO"
  MERGE_BASE=`wget -qO - 
    https://api.github.com/repos/${BUDDY_REPO_SLUG}/${PULL_REQUEST_ID} 
    | jq -r ".base.ref"`
git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list

لتحديد A3 دعنا نستخدم GitHub API:

https://api.github.com/repos/${USERNAME}/${REPO}/pulls/${PULL_REQUEST_ID}

استخدمنا المتغيرات التالية التي قدمها Buddy:

  • BUDDY_EXECUTION_PULL_REQEUST_NO دولار - سحب رقم الطلب ؛
  • BUDDY_REPO_SLUG دولار - مزيج من اسم المستخدم والمستودع (على سبيل المثال max / test).

لنحفظ الآن التغييرات باستخدام الزر أدناه ، ونمكّن تحليل طلب السحب:

تحليل الالتزامات وسحب الطلبات في Travis CI و Buddy و AppVeyor باستخدام PVS-Studio
على عكس Travis CI ، لا نحتاج إلى التحديد .pvs-studio للتخزين المؤقت ، لأن Buddy يخزن تلقائيًا جميع الملفات لعمليات التشغيل اللاحقة. لذلك ، فإن آخر شيء بقي هو حفظ تسجيل الدخول وكلمة المرور لـ PVS-Studio في Buddy. بعد حفظ التغييرات ، سنعود إلى خط الأنابيب. نحتاج إلى الانتقال إلى إعداد المتغيرات وإضافة تسجيل الدخول والمفتاح لـ PVS-Studio:

تحليل الالتزامات وسحب الطلبات في Travis CI و Buddy و AppVeyor باستخدام PVS-Studio
بعد ذلك ، سيؤدي ظهور طلب سحب جديد أو التزام جديد إلى إجراء فحص. إذا كان الالتزام يحتوي على أخطاء ، فسيقوم Buddy بالإشارة إليه في صفحة طلب السحب.

AppVeyor

يعد إعداد AppVeyor مشابهًا لـ Buddy ، نظرًا لأن كل شيء يحدث في واجهة الويب ولا توجد حاجة لإضافة ملف * .yml إلى مستودع المشروع.

دعنا ننتقل إلى علامة التبويب الإعدادات في نظرة عامة على المشروع:

تحليل الالتزامات وسحب الطلبات في Travis CI و Buddy و AppVeyor باستخدام PVS-Studio
لنقم بالتمرير لأسفل هذه الصفحة وتمكين حفظ ذاكرة التخزين المؤقت لبناء طلبات السحب:

تحليل الالتزامات وسحب الطلبات في Travis CI و Buddy و AppVeyor باستخدام PVS-Studio
الآن دعنا ننتقل إلى علامة التبويب البيئة ، حيث نحدد الصورة المراد بناؤها ومتغيرات البيئة الضرورية:

تحليل الالتزامات وسحب الطلبات في Travis CI و Buddy و AppVeyor باستخدام PVS-Studio
إذا كنت قد قرأت الأقسام السابقة ، فأنت على دراية بهذين المتغيرين - PVS_KEY и PVS_USERNAME. إذا لم يكن الأمر كذلك ، دعني أذكرك بأنها ضرورية للتحقق من ترخيص محلل PVS-Studio. في المستقبل ، سنلتقي بهم مرة أخرى في نصوص باش.

في نفس الصفحة أدناه ، حدد مجلد التخزين المؤقت:

تحليل الالتزامات وسحب الطلبات في Travis CI و Buddy و AppVeyor باستخدام PVS-Studio
إذا لم نفعل ذلك ، فسنحلل المشروع بأكمله بدلاً من ملفين ، لكننا سنحصل على الإخراج بناءً على الملفات المحددة. لذلك ، من المهم إدخال اسم الدليل الصحيح.

حان الوقت الآن لاختبار البرنامج النصي. افتح علامة التبويب الاختبارات وحدد البرنامج النصي:

تحليل الالتزامات وسحب الطلبات في Travis CI و Buddy و AppVeyor باستخدام PVS-Studio
الصق الكود التالي في هذا النموذج:

sudo apt-get update && sudo apt-get -y install jq

wget -q -O - https://files.viva64.com/etc/pubkey.txt 
  | sudo apt-key add -
sudo wget -O /etc/apt/sources.list.d/viva64.list 
  https://files.viva64.com/etc/viva64.list

sudo apt-get update && sudo apt-get -y install pvs-studio

pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY

PWD=$(pwd -L)
if [ "$APPVEYOR_PULL_REQUEST_NUMBER" != '' ]; then
  PULL_REQUEST_ID="pulls/$APPVEYOR_PULL_REQUEST_NUMBER"
  MERGE_BASE=`wget -qO - 
    https://api.github.com/repos/${APPVEYOR_REPO_NAME}/${PULL_REQUEST_ID} 
    | jq -r ".base.ref"`

  git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
  pvs-studio-analyzer analyze -j8 
                              -o PVS-Studio.log 
                              --disableLicenseExpirationCheck 
                              --dump-files --dump-log pvs-dump.log 
                              -S .pvs-pr.list
else
  pvs-studio-analyzer analyze -j8 
                              -o PVS-Studio.log 
                              --disableLicenseExpirationCheck
fi

plog-converter -t errorfile PVS-Studio.log --cerr -w

دعنا نلقي نظرة على الجزء التالي من الكود:

PWD=$(pwd -L)
if [ "$APPVEYOR_PULL_REQUEST_NUMBER" != '' ]; then
  PULL_REQUEST_ID="pulls/$APPVEYOR_PULL_REQUEST_NUMBER"
  MERGE_BASE=`wget -qO - 
   https://api.github.com/repos/${APPVEYOR_REPO_NAME}/${PULL_REQUEST_ID} 
   | jq -r ".base.ref"`

  git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
  pvs-studio-analyzer analyze -j8 
                              -o PVS-Studio.log 
                              --disableLicenseExpirationCheck 
                              --dump-files --dump-log pvs-dump.log 
                              -S .pvs-pr.list
else
  pvs-studio-analyzer analyze -j8 
                              -o PVS-Studio.log 
                              --disableLicenseExpirationCheck
fi

يبدو التخصيص المحدد نوعًا ما لقيمة الأمر pwd لمتغير يجب أن يخزن هذه القيمة الافتراضية غريبًا للوهلة الأولى ، ومع ذلك ، سأشرح كل شيء في لحظة.

أثناء إعداد المحلل في AppVeyor ، واجهت سلوكًا غريبًا للغاية للمحلل. من ناحية ، كل شيء سار بشكل صحيح ، لكن التحليل لم يبدأ. لقد قضيت الكثير من الوقت في ملاحظة أننا في الدليل / home / appveyor / projects / testcalc / ، والمحلل متأكد من أننا في / opt / appveyor / build-agent /. ثم أدركت أن المتغير $ PWD هو كذبة إلى حد ما. لهذا السبب ، قمت بتحديث قيمته يدويًا قبل بدء التحليل.

ثم كل شيء كما كان من قبل:

تحليل الالتزامات وسحب الطلبات في Travis CI و Buddy و AppVeyor باستخدام PVS-Studio
الآن ضع في اعتبارك المقتطف التالي:

PULL_REQUEST_ID="pulls/$APPVEYOR_PULL_REQUEST_NUMBER"
MERGE_BASE=`wget -qO - 
  https://api.github.com/repos/${APPVEYOR_REPO_NAME}/${PULL_REQUEST_ID} 
  | jq -r ".base.ref"`

في ذلك ، نحصل على الفرق بين الفروع التي تم الإعلان عن طلب السحب عليها. لهذا نحتاج إلى متغيرات البيئة التالية:

  • $ APPVEYOR_PULL_REQUEST_NUMBER - سحب رقم الطلب ؛
  • $ APPVEYOR_REPO_NAME - اسم المستخدم ومستودع المشروع.

اختتام

بالطبع ، لم نأخذ في الاعتبار جميع خدمات الدمج المستمر الممكنة ، ومع ذلك ، فجميعها لها مواصفات عمل متشابهة جدًا. باستثناء التخزين المؤقت ، تصنع كل خدمة "دراجتها" الخاصة بها ، لذلك كل شيء مختلف دائمًا.

في مكان ما ، كما هو الحال في Travis-CI ، يعمل سطرين من التعليمات البرمجية والتخزين المؤقت بشكل لا تشوبه شائبة ؛ في مكان ما ، كما هو الحال في AppVeyor ، تحتاج فقط إلى تحديد المجلد في الإعدادات ؛ ولكن في مكان ما تحتاج إلى إنشاء مفاتيح فريدة ومحاولة إقناع النظام لمنحك الفرصة للكتابة فوق الجزء المخزن مؤقتًا. لذلك ، إذا كنت ترغب في إعداد تحليل طلب السحب على خدمة تكامل مستمرة لم تتم مناقشتها أعلاه ، فتأكد أولاً من أنك لن تواجه مشكلات في التخزين المؤقت.

شكرًا لكم على اهتمامكم. إذا لم ينجح شيء ما ، فلا تتردد في مراسلتنا على دعم. سوف ننصح ونساعد.

تحليل الالتزامات وسحب الطلبات في Travis CI و Buddy و AppVeyor باستخدام PVS-Studio

إذا كنت ترغب في مشاركة هذه المقالة مع جمهور يتحدث الإنجليزية ، فيرجى استخدام رابط الترجمة: Maxim Zvyagintsev. تحليل الالتزامات وسحب الطلبات في Travis CI و Buddy و AppVeyor باستخدام PVS-Studio.

المصدر: www.habr.com

إضافة تعليق