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

IntelliJ IDEA ዛሬ በጣም የላቀ የማይንቀሳቀስ የጃቫ ኮድ ተንታኝ አለው፣ እሱም ከችሎታው አንፃር፣ ከእንደዚህ አይነት "አርበኞች" በጣም ወደኋላ ትቶአል። የፍተሻ ስልት и Spotbugs. በውስጡ በርካታ "ፍተሻዎች" ኮዱን በተለያዩ ገፅታዎች, ከኮድ አጻጻፍ ስልት እስከ ባህሪያዊ ስህተቶች ይፈትሹ.

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

ደረጃ 1. ትንታኔውን በእቃ መያዣ ውስጥ ያካሂዱ እና ሪፖርት ያግኙ

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

ፍተሻ የሚጀመረው ስክሪፕት በመጠቀም ነው። bin/inspect.sh ከ IDEA መጫኛ ማውጫ. የሚፈለጉት መለኪያዎች፡-

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

በተጨማሪም, ይጠበቃል

  • ወደ ጃቫ ኤስዲኬ የሚወስደው መንገድ በ 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 ፋይሎች ከ analyzer ሪፖርቶች ጋር በዒላማ/የሃሳብ_inspections ንዑስ አቃፊ ውስጥ መታየት አለባቸው።

አሁን የ IDEA analyzer በማንኛውም የሲአይኤ አከባቢ ከመስመር ውጭ ሊሰራ እንደሚችል ምንም ጥርጥር የለውም, እና ወደ ሁለተኛው ደረጃ እንሄዳለን.

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

በ.xml ፋይሎች መልክ ሪፖርት ማግኘት ውጊያው ግማሽ ነው፣ አሁን በሰው ሊነበብ የሚችል እንዲሆን ማድረግ ያስፈልጋል። እና ደግሞ ውጤቶቹ በጥራት በሮች ውስጥ ጥቅም ላይ መዋል አለባቸው - ተቀባይነት ያለው ለውጥ በጥራት መመዘኛዎች መሠረት ማለፍ ወይም አለማለፉን ለመወሰን አመክንዮ።

ይህ ይረዳናል የጄንኪንስ ማስጠንቀቂያዎች NG ተሰኪበጥር 2019 የተለቀቀው ። በመግቢያው፣ በጄንኪንስ (CheckStyle፣ FindBugs፣ PMD፣ ወዘተ) ውስጥ ከስታቲስቲክስ ትንተና ውጤቶች ጋር ለመስራት ብዙ የተለያዩ ተሰኪዎች አሁን ጊዜ ያለፈባቸው ተብለው ምልክት ተደርጎባቸዋል።

ተሰኪው ሁለት ክፍሎችን ያቀፈ ነው-

  • ብዙ ተንታኝ መልእክት ሰብሳቢዎች (የተሟላ ዝርዝር። ከ AcuCobol እስከ ZPT Lint በሳይንስ የሚታወቁትን ሁሉንም ተንታኞች ያካትታል)
  • ለሁሉም አንድ ነጠላ ሪፖርት ተመልካች.

ማስጠንቀቂያዎች NG ሊተነተንባቸው የሚችላቸው ነገሮች ዝርዝር የጃቫ ማጠናከሪያ ማስጠንቀቂያዎችን እና ከማቨን ማስፈጸሚያ ምዝግብ ማስታወሻዎችን ያካትታል፡ ምንም እንኳን በቋሚነት የሚታዩ ቢሆኑም ሆን ተብሎ የሚተነተነው አልፎ አልፎ ነው። 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 ሪፖርት ተንታኝ ውስጥ መስተካከል ያለበት ስህተት ይመስላል።

ከማስጠንቀቂያዎች NG ባህሪያት መካከል ከተለያዩ ምንጮች የተገኙ ግኝቶችን በአንድ ዘገባ እና ፕሮግራም ጥራት ጌትስ ውስጥ ማጠቃለል መቻል፣ ለማጣቀሻ ስብሰባ ራትቼትን ጨምሮ። አንዳንድ የጥራት ጌትስ ፕሮግራሚንግ ሰነዶች አሉ። እዚህ - ሆኖም ግን, አልተጠናቀቀም, እና ምንጩን መመልከት አለብዎት. በሌላ በኩል፣ እየሆነ ያለውን ነገር ሙሉ በሙሉ ለመቆጣጠር፣ “አይጥ” በተናጥል ሊተገበር ይችላል (የእኔን ይመልከቱ predydyuschyy ፖስት ስለዚህ ጭብጥ)።

መደምደሚያ

ይህንን ጽሑፍ ለማዘጋጀት ከመጀመሬ በፊት ለማየት ወሰንኩ፡ በዚህ ርዕስ ላይ አስቀድሞ ስለ Habré የጻፈው አለ? ያገኘሁት ብቻ ነው። ቃለ መጠይቅ 2017 с ላኒየት ነው የሚለው።

እኔ እስከማውቀው ድረስ ከጄንኪንስ ወይም ከማቨን ፕለጊን ጋር ምንም አይነት ውህደት የለም [...] በመርህ ደረጃ ማንኛውም ቀናተኛ የ IDEA Community Edition እና የጄንኪንስ ጓደኞችን ሊያደርግ ይችላል, ብዙዎቹ ከዚህ ብቻ ይጠቀማሉ.

ደህና፣ ከሁለት አመት በኋላ የማስጠንቀቂያ NG Plugin አለን፣ እና በመጨረሻም ይህ ጓደኝነት እውን ሆነ!

ምንጭ: hab.com

አስተያየት ያክሉ