የIntelliJ IDEA ምርመራዎችን በጄንኪንስ ያሂዱ

IntelliJ IDEA በአሁኑ ጊዜ እጅግ በጣም የላቀ የማይንቀሳቀስ የጃቫ ኮድ ተንታኝ አለው፣ ይህም እንደ “ዘማቾች” ያሉ ችሎታዎችን ይተዋል። የቼክስታይል и ስፖትባጎችበርካታ "ምርመራዎች" ኮዱን ከኮድ ቅጥ እስከ የተለመዱ ስህተቶች ድረስ ለተለያዩ ገጽታዎች ይፈትሻሉ።

ሆኖም ግን፣ የትንታኔ ውጤቶቹ በገንቢው አካባቢያዊ የIDE በይነገጽ ላይ ብቻ የሚታዩ ቢሆኑም፣ ለልማት ሂደቱ ብዙም ጥቅም የላቸውም። የማይለዋወጥ ትንተና መከናወን አለበት የግንባታ መስመር ውስጥ የመጀመሪያው እርምጃ እንደመሆኑ መጠን ውጤቶቹ የጥራት በሮችን መወሰን አለባቸው፣ እና የጥራት በሮች ካልተሳለፉ ግንባታው ሊበላሽ ይገባል። TeamCity CI ከIDEA ጋር የተዋሃደ መሆኑ ይታወቃል። ነገር ግን TeamCityን ባይጠቀሙም እንኳ በሌላ በማንኛውም የCI አገልጋይ ላይ የIDEA ፍተሻዎችን በቀላሉ ማካሄድ ይችላሉ። ይህ በIDEA Community Edition፣ Jenkins እና Warnings NG ተሰኪ በመጠቀም እንዴት ሊከናወን እንደሚችል እንዲመረምሩ ሀሳብ አቀርባለሁ።

ደረጃ 1. ትንታኔውን በኮንቴይነር ውስጥ ያሂዱ እና ሪፖርት ያግኙ

መጀመሪያ ላይ፣ ግራፊክ በይነገጽ በሌለው የCI ስርዓት ውስጥ IDE (የዴስክቶፕ መተግበሪያ!) የማስኬድ ሀሳብ አጠራጣሪ እና በጣም አስቸጋሪ ሊመስል ይችላል። እንደ እድል ሆኖ፣ የIDE ገንቢዎች የማስኬድ ችሎታን ሰጥተዋል። የኮድ ቅርጸት и ምርመራዎች ከትዕዛዝ መስመሩ። ከዚህም በላይ፣ በዚህ ሁነታ IDEAን ማስኬድ የግራፊክስ ንዑስ ስርዓት አያስፈልገውም፣ እና እነዚህ ተግባራት በጽሑፍ ላይ የተመሠረተ ቅርፊት ባላቸው አገልጋዮች ላይ ሊከናወኑ ይችላሉ።

ምርመራዎች የሚጀመሩት ስክሪፕትን በመጠቀም ነው። bin/inspect.sh ከIDEA የመጫኛ ማውጫ። የሚከተሉት መለኪያዎች ያስፈልጋሉ፡

  • ወደ ፕሮጀክቱ ሙሉ መንገድ (አንጻራዊ መንገዶች አይደገፉም)፣
  • ወደ .xml ፋይል የሚወስደውን ዱካ ከምርመራ ቅንብሮች ጋር (ብዙውን ጊዜ በ.idea/inspectionProfiles/Project_Default.xml ውስጥ በፕሮጀክቱ ውስጥ ይገኛል)፣
  • የትንታኔ ውጤቶች ሪፖርቶችን የያዙ የ.xml ፋይሎች የሚቀመጡበት ወደ አቃፊው የሚወስደው ሙሉ ዱካ።

በተጨማሪም፣ እንደሚጠበቅ

  • ወደ ጃቫ 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 ይኸውና፡

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, ይህም በመያዣው ውስጥ ወደተጫኑ የ 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_inspections ንዑስ አቃፊ ውስጥ መታየት አለባቸው።

የIDEA ተንታኙ በማንኛውም የCI አካባቢ ራሱን ችሎ ሊሠራ እንደሚችል ምንም ጥርጥር ስለሌለ፣ ወደ ሁለተኛው ደረጃ እንሸጋገራለን።

ደረጃ 2. ሪፖርቱን ያሳዩ እና ይተንትኑ

ሪፖርቱን እንደ .xml ፋይል ማግኘት ግማሽ ፍልሚያ ነው፤ አሁን በሰው ሊነበብ የሚችል መሆን አለበት። ውጤቶቹም በጥራት በሮች ላይ ጥቅም ላይ መዋል አለባቸው - ተቀባይነት ያለው ለውጥ የጥራት መስፈርቶችን ማለፍ አለመተላለፉን ለመወሰን የሚያገለግል አመክንዮ።

ይህ ይረዳናል የጄንኪንስ ማስጠንቀቂያዎች NG ፕለጊንበጃንዋሪ 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 ፍተሻዎች ብቸኛው ችግር በጄንኪንስ ውስጥ ኮድን በቀጥታ የማሰስ ችሎታ ነበር (ምንም እንኳን እንደ Checkstyle ላሉ ሌሎች ሪፖርቶች፣ ይህ ተሰኪ ይህንን በሚያምር ሁኔታ ያከናውናል)። ይህ በIDEA ሪፖርት ተንታኝ ውስጥ መስተካከል ያለበት ሳንካ ይመስላል።

የኤንጂ የማስጠንቀቂያዎች ችሎታዎች ግኝቶችን ከብዙ ምንጮች በአንድ ሪፖርት እና በጥራት ጌቶች ፕሮግራም ውስጥ የማሰባሰብ ችሎታን ያካትታሉ፣ ይህም የማጣቀሻ ስብሰባ "ራቼት"ን ያካትታል። ስለ ጥራት ጌቶች ፕሮግራም አንዳንድ ሰነዶች ይገኛሉ። እዚህ — ሆኖም ግን፣ የተሟላ አይደለም፣ እና የምንጭ ኮዱን መመልከት አለብዎት። በሌላ በኩል፣ ምን እየተከናወነ እንዳለ ሙሉ ቁጥጥር ለማግኘት፣ "ራቼቱን" እራስዎ መተግበር ይችላሉ (የእኔን ይመልከቱ) ቀዳሚ ልጥፍ በዚህ ርዕስ ላይ)።

መደምደሚያ

ይህንን ጽሑፍ ማዘጋጀት ከመጀመሬ በፊት ለመፈለግ ወሰንኩ፡ ስለዚህ ርዕስ በHabr ላይ አስቀድሞ የጻፈ ሰው አለ? ያገኘሁት ብቻ ነው የ2017 ቃለ ምልልስ с ዶይእሱ እንዲህ ይላል፡-

እኔ እስከማውቀው ድረስ፣ ከጄንኪንስ ወይም ከሜቨን ተሰኪ ጋር ምንም አይነት ውህደት የለም […] በመርህ ደረጃ፣ ማንኛውም አድናቂ የIDEA ማህበረሰብ እትም እና ጄንኪንስ አብረው እንዲሰሩ ሊያደርግ ይችላል፣ እና ብዙዎች ከዚህ ብቻ ተጠቃሚ ይሆናሉ።

እሺ፣ ከሁለት ዓመት በኋላ Warnings NG Plugin አለን፣ እናም ይህ ጓደኝነት በመጨረሻ ፍሬ አፍርቷል!

ምንጭ: hab.com

በDDoS ጥበቃ፣ VPS VDS አገልጋዮች ለጣቢያዎች አስተማማኝ ማስተናገጃ ይግዙ 🔥 አስተማማኝ የድር ጣቢያ ማስተናገጃ በዲዶኤስ ጥበቃ፣ በቪፒኤስ ቪዲኤስ አገልጋዮች ይግዙ | ProHoster