جینکنز پر IntelliJ IDEA معائنہ چلائیں۔

IntelliJ IDEA کے پاس آج جدید ترین جامد جاوا کوڈ تجزیہ کار ہے، جس نے اپنی صلاحیتوں کے لحاظ سے ایسے "سابق فوجیوں" کو بہت پیچھے چھوڑ دیا ہے۔ چیک اسٹائل и سپاٹ بگ. اس کے متعدد "معائنے" کوڈ کو مختلف پہلوؤں سے چیک کرتے ہیں، کوڈنگ کے انداز سے لے کر خصوصیت کے کیڑے تک۔

تاہم، جب تک تجزیہ کے نتائج صرف ڈویلپر کے مقامی IDE میں دکھائے جاتے ہیں، ترقی کے عمل میں ان کا کوئی فائدہ نہیں ہوتا۔ جامد تجزیہ انجام دیا جانا چاہئے تعمیراتی پائپ لائن کے پہلے مرحلے کے طور پر، اس کے نتائج کو کوالٹی گیٹس کا تعین کرنا چاہیے، اور اگر کوالٹی گیٹس ناکام ہو جائیں تو تعمیر کو ناکام ہونا چاہیے۔ TeamCity CI IDEA کے ساتھ مربوط ہونے کے لیے جانا جاتا ہے۔ لیکن یہاں تک کہ اگر آپ TeamCity استعمال نہیں کر رہے ہیں، تب بھی آپ کسی دوسرے CI سرور پر IDEA معائنہ چلانے کی کوشش کر سکتے ہیں۔ میں یہ دیکھنے کی تجویز پیش کرتا ہوں کہ IDEA کمیونٹی ایڈیشن، جینکنز اور وارننگز این جی پلگ ان کا استعمال کرتے ہوئے یہ کیسے کیا جا سکتا ہے۔

مرحلہ 1۔ تجزیہ کو ایک کنٹینر میں چلائیں اور رپورٹ حاصل کریں۔

سب سے پہلے، CI سسٹم کے اندر ایک IDE (ڈیسک ٹاپ ایپلی کیشن!) چلانے کا خیال جس میں گرافیکل انٹرفیس نہیں ہے مشکوک اور بہت پریشان کن معلوم ہو سکتا ہے۔ خوش قسمتی سے، IDEA ڈویلپرز نے چلانے کی صلاحیت فراہم کی ہے۔ کوڈ فارمیٹنگ и معائنہ کمانڈ لائن سے. مزید یہ کہ، اس موڈ میں IDEA کو چلانے کے لیے، گرافیکل سب سسٹم کی ضرورت نہیں ہے، اور یہ کام ٹیکسٹ شیل کے ساتھ سرورز پر کیے جا سکتے ہیں۔

اسکرپٹ کا استعمال کرتے ہوئے معائنہ شروع کیا جاتا ہے۔ bin/inspect.sh IDEA انسٹالیشن ڈائرکٹری سے۔ مطلوبہ پیرامیٹرز ہیں:

  • پروجیکٹ کا مکمل راستہ (رشتہ داروں کی حمایت نہیں کی جاتی ہے)،
  • معائنہ کی ترتیبات کے ساتھ .xml فائل کا راستہ (عام طور پر .idea/inspectionProfiles/Project_Default.xml میں پروجیکٹ کے اندر واقع ہوتا ہے)،
  • فولڈر کا مکمل راستہ جہاں تجزیہ کے نتائج کی رپورٹ کے ساتھ .xML فائلیں محفوظ کی جائیں گی۔

اس کے علاوہ، یہ توقع ہے کہ

  • Java SDK کا راستہ IDE میں ترتیب دیا جائے گا، ورنہ تجزیہ کام نہیں کرے گا۔ یہ ترتیبات کنفیگریشن فائل میں موجود ہیں۔ jdk.table.xml IDEA گلوبل کنفیگریشن فولڈر میں۔ پہلے سے طے شدہ عالمی IDEA کنفیگریشن خود صارف کی ہوم ڈائریکٹری میں ہے، لیکن یہ مقام واضح طور پر مقرر کیا جا سکتا ہے فائل میں idea.properties.
  • تجزیہ شدہ پروجیکٹ ایک درست IDEA پروجیکٹ ہونا چاہیے، جس کے لیے عام طور پر نظر انداز کیے جانے والے کچھ فائلوں کو ورژن کنٹرول کے لیے پابند ہونا پڑے گا، یعنی:
    • .idea/inspectionProfiles/Project_Default.xml - تجزیہ کار کی ترتیبات، ظاہر ہے کہ وہ کنٹینر میں معائنہ شروع کرتے وقت استعمال ہوں گے،
    • .idea/modules.xml - بصورت دیگر ہمیں خرابی ملتی ہے 'اس پروجیکٹ میں کوئی ماڈیول نہیں ہے'،
    • .idea/misc.xml - بصورت دیگر ہمیں یہ غلطی ملتی ہے کہ 'JDK اس پروجیکٹ کے لیے مناسب طریقے سے ترتیب نہیں دیا گیا ہے'،
    • *.iml-файлы - بصورت دیگر ہمیں ماڈیول میں غیر تشکیل شدہ JDK کے بارے میں ایک غلطی ملے گی۔

اگرچہ یہ فائلیں عام طور پر شامل ہوتی ہیں۔ .gitignore، ان میں کسی خاص ڈویلپر کے ماحول سے متعلق کوئی خاص معلومات نہیں ہوتی ہیں - اس کے برعکس، مثال کے طور پر، ایک فائل workspace.xml، جہاں ایسی معلومات، صرف، موجود ہے، اور اس لیے اس کا ارتکاب کرنا ضروری نہیں ہے۔

خود ہی، باہر نکلنے کا راستہ خود تجویز کرتا ہے کہ JDK کو IDEA Community Edition کے ساتھ ایک کنٹینر میں ایک فارم میں پیک کیا جائے جو تجزیہ شدہ پروجیکٹس پر "سیٹ" ہونے کے لیے تیار ہے۔ آئیے ایک مناسب بیس کنٹینر کا انتخاب کریں، اور یہ ہے Dockerfile جو ہمیں ملتی ہے:

ڈاکر فائل

FROM openkbs/ubuntu-bionic-jdk-mvn-py3

ARG INTELLIJ_VERSION="ideaIC-2019.1.1"

ARG INTELLIJ_IDE_TAR=${INTELLIJ_VERSION}.tar.gz

ENV IDEA_PROJECT_DIR="/var/project"

WORKDIR /opt

COPY jdk.table.xml /etc/idea/config/options/

RUN wget https://download-cf.jetbrains.com/idea/${INTELLIJ_IDE_TAR} && 
    tar xzf ${INTELLIJ_IDE_TAR} && 
    tar tzf ${INTELLIJ_IDE_TAR} | head -1 | sed -e 's//.*//' | xargs -I{} ln -s {} idea && 
    rm ${INTELLIJ_IDE_TAR} && 
    echo idea.config.path=/etc/idea/config >> idea/bin/idea.properties && 
    chmod -R 777 /etc/idea

CMD idea/bin/inspect.sh ${IDEA_PROJECT_DIR} ${IDEA_PROJECT_DIR}/.idea/inspectionProfiles/Project_Default.xml ${IDEA_PROJECT_DIR}/target/idea_inspections -v2

اختیار کا استعمال کرتے ہوئے idea.config.path ہم نے IDEA کو فولڈر میں اس کی عالمی کنفیگریشن کی تلاش کی۔ /etc/ideaچونکہ CI میں کام کے حالات میں صارف کا ہوم فولڈر ایک غیر معینہ چیز ہے اور اکثر مکمل طور پر غائب ہوتا ہے۔

کنٹینر میں کاپی کی گئی فائل اس طرح دکھائی دیتی ہے۔ jdk.table.xml، جس میں کنٹینر کے اندر نصب اوپن جے ڈی کے کے راستے شامل ہیں (یہ آپ کی اپنی IDEA سیٹنگ ڈائرکٹری سے ملتی جلتی فائل پر مبنی ہوسکتا ہے):

jdk.table.xml

<application>
 <component name="ProjectJdkTable">
   <jdk version="2">
     <name value="1.8" />
     <type value="JavaSDK" />
     <version value="1.8" />
     <homePath value="/usr/java" />
     <roots>
       <annotationsPath>
         <root type="composite">
           <root url="jar://$APPLICATION_HOME_DIR$/lib/jdkAnnotations.jar!/" type="simple" />
         </root>
       </annotationsPath>
       <classPath>
         <root type="composite">
           <root url="jar:///usr/java/jre/lib/charsets.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/deploy.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/ext/access-bridge-64.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/ext/cldrdata.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/ext/dnsns.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/ext/jaccess.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/ext/jfxrt.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/ext/localedata.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/ext/nashorn.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/ext/sunec.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/ext/sunjce_provider.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/ext/sunmscapi.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/ext/sunpkcs11.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/ext/zipfs.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/javaws.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/jce.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/jfr.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/jfxswt.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/jsse.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/management-agent.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/plugin.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/resources.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/rt.jar!/" type="simple" />
         </root>
       </classPath>
     </roots>
     <additional />
   </jdk>
 </component>
</application>

مکمل تصویر Docker Hub پر دستیاب ہے۔.

آگے بڑھنے سے پہلے، آئیے کنٹینر میں IDEA پارسر کو چلانے کی جانچ کرتے ہیں:

docker run --rm -v <путь/к/вашему/проекту>:/var/project inponomarev/intellij-idea-analyzer

تجزیہ کو کامیابی سے کام کرنا چاہیے، اور تجزیہ کار رپورٹس کے ساتھ متعدد .xml فائلیں ٹارگٹ/آئیڈیا_انسپیکشن سب فولڈر میں ظاہر ہونی چاہئیں۔

اب اس میں کوئی شک نہیں ہے کہ IDEA تجزیہ کار کو کسی بھی CI ماحول میں آف لائن چلایا جا سکتا ہے، اور ہم دوسرے مرحلے کی طرف بڑھتے ہیں۔

مرحلہ 2۔ رپورٹ کو ڈسپلے اور تجزیہ کریں۔

ایکس ایم ایل فائلوں کی شکل میں رپورٹ حاصل کرنا آدھی جنگ ہے، اب اسے انسانوں کے پڑھنے کے قابل بنانے کی ضرورت ہے۔ اور اس کے نتائج کو کوالٹی گیٹس میں بھی استعمال کیا جانا چاہیے - اس بات کا تعین کرنے کی منطق کہ آیا قبول شدہ تبدیلی معیار کے معیار کے مطابق گزرتی ہے یا نہیں گزرتی ہے۔

یہ ہماری مدد کرے گا۔ جینکنز وارننگز این جی پلگ انجو جنوری 2019 میں جاری کیا گیا تھا۔ اس کے تعارف کے ساتھ، جینکنز (CheckStyle، FindBugs، PMD، وغیرہ) میں جامد تجزیہ کے نتائج کے ساتھ کام کرنے کے لیے بہت سے الگ الگ پلگ انز کو اب متروک کے طور پر نشان زد کر دیا گیا ہے۔

پلگ ان دو حصوں پر مشتمل ہے:

  • متعدد تجزیہ کار پیغام جمع کرنے والے (مکمل فہرست AcuCobol سے ZPT Lint تک سائنس کے لیے جانے والے تمام تجزیہ کار شامل ہیں)
  • ان سب کے لیے ایک واحد رپورٹ ناظر۔

ان چیزوں کی فہرست جن کو وارننگز NG پارس کر سکتا ہے اس میں جاوا کمپائلر وارننگز اور Maven ایگزیکیوشن لاگز سے وارننگز شامل ہیں: اگرچہ وہ مسلسل نظر میں ہیں، لیکن ان کا شاذ و نادر ہی جان بوجھ کر تجزیہ کیا جاتا ہے۔ IntelliJ IDEA رپورٹس بھی تسلیم شدہ فارمیٹس کی فہرست میں شامل ہیں۔

چونکہ پلگ ان نیا ہے، یہ ابتدائی طور پر جینکنز پائپ لائن کے ساتھ اچھی طرح سے تعامل کرتا ہے۔ اس کی شرکت کے ساتھ تعمیراتی مرحلہ اس طرح نظر آئے گا (ہم صرف پلگ ان کو بتاتے ہیں کہ ہم کس رپورٹ فارمیٹ کو پہچانتے ہیں اور کن فائلوں کو اسکین کیا جانا چاہئے):

stage ('Static analysis'){
    sh 'rm -rf target/idea_inspections'
    docker.image('inponomarev/intellij-idea-analyzer').inside {
       sh '/opt/idea/bin/inspect.sh $WORKSPACE $WORKSPACE/.idea/inspectionProfiles/Project_Default.xml $WORKSPACE/target/idea_inspections -v2'
    }
    recordIssues(
       tools: [ideaInspection(pattern: 'target/idea_inspections/*.xml')]
    )
}

رپورٹ انٹرفیس اس طرح لگتا ہے:

جینکنز پر IntelliJ IDEA معائنہ چلائیں۔

یہ آسان ہے کہ یہ انٹرفیس تمام قابل شناخت تجزیہ کاروں کے لیے عالمگیر ہے۔ یہ زمرہ کے لحاظ سے تلاش کی تقسیم کا ایک انٹرایکٹو چارٹ اور تلاش کی تعداد میں تبدیلیوں کی حرکیات کا گراف پر مشتمل ہے۔ صفحہ کے نیچے گرڈ میں، آپ فوری تلاش کر سکتے ہیں۔ واحد چیز جس نے IDEA کے معائنے کے لیے صحیح طریقے سے کام نہیں کیا وہ جینکنز میں کوڈ کو براہ راست براؤز کرنے کی صلاحیت تھی (حالانکہ دیگر رپورٹس، جیسے چیک اسٹائل کے لیے، یہ پلگ ان اسے خوبصورتی سے کر سکتا ہے)۔ ایسا لگتا ہے کہ IDEA رپورٹ پارسر میں ایک بگ ہے جسے ٹھیک کرنے کی ضرورت ہے۔

وارننگز NG کی خصوصیات میں سے ایک رپورٹ اور پروگرام کوالٹی گیٹس میں مختلف ذرائع سے حاصل کردہ نتائج کو جمع کرنے کی صلاحیت ہے، جس میں ریفرنس اسمبلی کے لیے ایک ریچیٹ بھی شامل ہے۔ کچھ کوالٹی گیٹس پروگرامنگ دستاویزات دستیاب ہیں۔ یہاں - تاہم، یہ مکمل نہیں ہے، اور آپ کو ماخذ کو دیکھنا ہوگا۔ دوسری طرف، جو کچھ ہو رہا ہے اس پر مکمل کنٹرول کے لیے، "شامل" کو آزادانہ طور پر لاگو کیا جا سکتا ہے (دیکھیں میرا پچھلی پوسٹ اس تھیم کے بارے میں)۔

حاصل يہ ہوا

اس مواد کو تیار کرنا شروع کرنے سے پہلے، میں نے یہ دیکھنے کا فیصلہ کیا: کیا کسی نے پہلے ہی اس موضوع پر Habré پر لکھا ہے؟ میں نے صرف پایا انٹرویو 2017 с لینیجہاں یہ کہتا ہے:

جہاں تک میں جانتا ہوں، جینکنز یا ماون پلگ ان کے ساتھ کوئی انضمام نہیں ہے [...] اصولی طور پر، کوئی بھی پرجوش IDEA کمیونٹی ایڈیشن اور جینکنز کو دوست بنا سکتا ہے، بہت سے لوگ صرف اس سے فائدہ اٹھائیں گے۔

ٹھیک ہے، دو سال بعد ہمارے پاس وارننگز این جی پلگ ان ہے، اور آخر کار یہ دوستی سچ ہو گئی!

ماخذ: www.habr.com

نیا تبصرہ شامل کریں