ජෙන්කින්ස් පිළිබඳ IntelliJ IDEA පරීක්ෂණ ක්‍රියාත්මක කිරීම

IntelliJ IDEA සතුව අද වන විට වඩාත්ම දියුණු ස්ථිතික ජාවා කේත විශ්ලේෂකය ඇත, එය එහි හැකියාවන් අනුව එවැනි “ප්‍රවීණයන්” පසුපසින් තබයි. පිරික්සුම් විලාසය и Spotbugs. එහි බොහෝ “පරීක්ෂා කිරීම්” කේතීකරණ විලාසයේ සිට සාමාන්‍ය දෝෂ දක්වා විවිධ පැතිවලින් කේතය පරීක්ෂා කරයි.

කෙසේ වෙතත්, විශ්ලේෂණ ප්‍රතිඵල සංවර්ධකයාගේ IDE හි දේශීය අතුරුමුහුණත තුළ පමණක් ප්‍රදර්ශනය වන තාක්, ඒවා සංවර්ධන ක්‍රියාවලියට එතරම් ප්‍රයෝජනයක් නොවේ. ස්ථිතික විශ්ලේෂණය ඉටු කළ යුතුය ගොඩනැගීමේ නල මාර්ගයේ පළමු පියවර ලෙස, එහි ප්රතිඵල ගුණාත්මක ගේට්ටු නිර්වචනය කළ යුතු අතර, ගුණාත්මක ගේට්ටු සම්මත නොකළහොත් ගොඩනැගීම අසාර්ථක විය යුතුය. TeamCity CI IDEA සමඟ ඒකාබද්ධ වී ඇති බව දන්නා කරුණකි. නමුත් ඔබ TeamCity භාවිතා නොකළත්, ඔබට පහසුවෙන් වෙනත් ඕනෑම CI සේවාදායකයක් තුළ IDEA පරීක්ෂණ ධාවනය කිරීමට උත්සාහ කළ හැක. IDEA Community Edition, Jenkins සහ Warnings NG ප්ලගිනය භාවිතයෙන් මෙය සිදු කරන්නේ කෙසේදැයි බැලීමට මම යෝජනා කරමි.

පියවර 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, එවැනි තොරතුරු අඩංගු වන අතර, එබැවින් එය සිදු කිරීමට අවශ්ය නොවේ.

පැහැදිලි විසඳුම නම්, විශ්ලේෂණ කළ ව්‍යාපෘතිවල “වළවල්” කිරීමට සූදානම් වන පෝරමයක IDEA ප්‍රජා සංස්කරණය සමඟ JDK ඇසුරුම් කිරීමයි. අපි සුදුසු මූලික බහාලුමක් තෝරා ගනිමු, අපගේ ඩොකර් ගොනුව මෙය වනු ඇත:

ඩොකර්ෆයිල්

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, කන්ටේනරය තුළ ස්ථාපනය කර ඇති OpenJDK සඳහා මාර්ග අඩංගු වේ (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. වාර්තාව පෙන්වන්න සහ විශ්ලේෂණය කරන්න

වාර්තාව .xml ගොනු ආකාරයෙන් ලබා ගැනීම සටනෙන් අඩක් වේ; දැන් ඔබට එය මිනිසුන්ට කියවිය හැකි බවට පත් කළ යුතුය. තවද එහි ප්‍රතිඵල ගුණාත්මක ද්වාරවල භාවිතා කළ යුතුය - පිළිගත් වෙනස තත්ත්ව නිර්ණායක අනුව සමත්ද අසාර්ථකද යන්න තීරණය කිරීමේ තර්කය.

මෙය අපට උපකාර වනු ඇත ජෙන්කින්ස් අනතුරු ඇඟවීම් NG ප්ලගිනය, එය 2019 ජනවාරි මාසයේදී නිකුත් කරන ලදී. එහි පැමිණීමත් සමඟ, ස්ථිතික විශ්ලේෂණ සමඟ වැඩ කිරීම සඳහා බොහෝ තනි ප්ලගින ජෙන්කින්ස් (CheckStyle, FindBugs, PMD, ආදිය) ප්‍රතිඵලයක් ලෙස දැන් යල් පැන ගිය ඒවා ලෙස සලකුණු කර ඇත.

ප්ලගිනය කොටස් දෙකකින් සමන්විත වේ:

  • බොහෝ විශ්ලේෂක පණිවිඩ එකතු කරන්නන් (සම්පූර්ණ ලැයිස්තුව AcuCobol සිට ZPT Lint දක්වා විද්‍යාව දන්නා සියලුම විශ්ලේෂක ඇතුළත් වේ)
  • ඔවුන් සියල්ලන්ටම තනි වාර්තා බලන්නෙක්.

අනතුරු ඇඟවීම් NG හට විශ්ලේෂණය කළ හැකි දේවල් ලැයිස්තුවට Java සම්පාදකයෙන් අනතුරු ඇඟවීම් සහ Maven ක්‍රියාත්මක කිරීමේ ලඝු-සටහන් වලින් අනතුරු ඇඟවීම් ඇතුළත් වේ: ඒවා නිරන්තරයෙන් දෘශ්‍යමාන වුවද, ඒවා කලාතුරකින් විශේෂිතව විශ්ලේෂණය කෙරේ. IntelliJ IDEA වාර්තා ද පිළිගත් ආකෘති ලැයිස්තුවට ඇතුළත් වේ.

ප්ලගිනය අලුත් බැවින්, එය මුලින් Jenkins Pipeline සමඟ හොඳින් අන්තර්ක්‍රියා කරයි. එහි සහභාගීත්වය සහිත ගොඩනැගීමේ පියවර මේ ආකාරයෙන් පෙනෙනු ඇත (අපි සරලව ප්ලගිනයට පවසන්නේ අප හඳුනා ගන්නා වාර්තා ආකෘතිය සහ කුමන ගොනු පරිලෝකනය කළ යුතුද යන්නයි):

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 පරීක්‍ෂණ සඳහා නිවැරදිව ක්‍රියා නොකළ එකම දෙය වූයේ Jenkins හි කේත කෙලින්ම බ්‍රවුස් කිරීමේ හැකියාවයි (වෙනත් වාර්තා සඳහා, උදාහරණයක් ලෙස Checkstyle, මෙම ප්ලගිනයට මෙය අලංකාර ලෙස කළ හැකිය). මෙය නිවැරදි කළ යුතු IDEA වාර්තා විග්‍රහයේ ඇති දෝෂයක් බව පෙනේ.

අනතුරු ඇඟවීම් NG හි විශේෂාංග අතර එක් වාර්තාවක විවිධ ප්‍රභවයන්ගෙන් සොයාගැනීම් එකතු කිරීමේ හැකියාව සහ විමර්ශන එකලස් කිරීම සඳහා "රැට්චෙට්" ඇතුළුව ගුණාත්මක ගේට්ස් වැඩසටහන්ගත කිරීමේ හැකියාව වේ. සමහර Quality Gates වැඩසටහන් ලේඛන තිබේ මෙහි - කෙසේ වෙතත්, එය සම්පූර්ණ නැති අතර, ඔබ මූලාශ්‍ර කේතය දෙස බැලිය යුතුය. අනෙක් අතට, සිදුවන්නේ කුමක්ද යන්න පිළිබඳ සම්පූර්ණ පාලනය සඳහා, "රැට්චෙට්" ස්වාධීනව ක්රියාත්මක කළ හැකිය (මගේ බලන්න පෙර පෝස්ට් මෙම තේමාව ගැන).

නිගමනය

මෙම ද්රව්ය සකස් කිරීමට පටන් ගැනීමට පෙර, මම සෙවීමට තීරණය කළෙමි: Habré හි මෙම මාතෘකාව පිළිබඳව දැනටමත් ලියා තිබේද? මට විතරයි හම්බුනේ සම්මුඛ පරීක්ෂණය 2017 с ලනිඑහිදී ඔහු පවසන්නේ:

මා දන්නා පරිදි, Jenkins හෝ maven ප්ලගිනයක් සමඟ ඒකාබද්ධ කිරීමක් නොමැත […] ප්‍රතිපත්තිමය වශයෙන්, ඕනෑම උද්යෝගිමත් අයෙකුට IDEA Community Edition සහ Jenkins සමඟ මිත්‍ර විය හැකිය, බොහෝ දෙනෙකුට මෙයින් ප්‍රයෝජන ලැබෙනු ඇත.

හොඳයි, වසර දෙකකට පසුව අපට අනතුරු ඇඟවීම් NG ප්ලගිනය ඇත, අවසානයේ මෙම මිත්‍රත්වය මල්ඵල ගැන්වී ඇත!

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න