Gudanarwar IntelliJ IDEA akan Jenkins

IntelliJ IDEA a yau yana da mafi ci gaba a matsayin mai nazarin lambar Java, wanda a cikin iyawarsa ya bar baya da nisa daga irin waɗannan "tsohuwar soja" kamar. Tsarin dubawa и Spotbugs. Yawancin “dubawa” suna bincika lambar ta fuskoki daban-daban, daga salon coding zuwa kwaro na yau da kullun.

Koyaya, muddin sakamakon binciken yana nunawa a cikin mahallin gida na IDE na mai haɓakawa, ba su da amfani sosai ga tsarin haɓakawa. Bincike a tsaye dole ne a cika A matsayin matakin farko na gina bututun, ya kamata sakamakonsa ya bayyana ƙofofi masu inganci, kuma ginin ya gaza idan ba a wuce ingancin kofofin ba. An san cewa an haɗa TeamCity CI tare da IDEA. Amma ko da ba ka amfani da TeamCity, zaka iya gwada gudanar da binciken IDEA a cikin kowane uwar garken CI. Ina ba da shawarar ku ga yadda za a iya yin wannan ta amfani da IDEA Community Edition, Jenkins da Gargaɗi NG plugin.

Mataki 1. Gudanar da bincike a cikin akwati kuma sami rahoto

Da farko, ra'ayin gudanar da IDE ( aikace-aikacen tebur!) A cikin tsarin CI wanda ba shi da madaidaicin hoto na iya zama abin shakku da damuwa sosai. Abin farin ciki, masu haɓaka IDEA sun ba da ikon yin aiki tsara code и dubawa daga layin umarni. Bugu da ƙari, don gudanar da IDEA a cikin wannan yanayin, ba a buƙatar tsarin tsarin zane-zane kuma ana iya yin waɗannan ayyuka akan sabar tare da harsashi na rubutu.

Ana ƙaddamar da bincike ta amfani da rubutun bin/inspect.sh daga kundin adireshin shigarwa na IDEA. Abubuwan da ake buƙata sune:

  • cikakken hanyar zuwa aikin (ba a tallafa wa dangi),
  • hanyar zuwa fayil ɗin .xml tare da saitunan dubawa (yawanci yana cikin aikin a cikin .idea/inspectionProfiles/Project_Default.xml),
  • cikakken hanyar zuwa babban fayil ɗin da za a adana fayilolin .xml tare da rahotanni akan sakamakon bincike.

Bugu da kari, ana sa ran hakan

  • hanyar zuwa Java SDK za a saita a cikin IDE, in ba haka ba bincike ba zai yi aiki ba. Waɗannan saitunan suna ƙunshe a cikin fayil ɗin sanyi jdk.table.xml a cikin babban fayil ɗin daidaitawa na IDEA na duniya. Tsarin IDEA na duniya da kansa yana cikin kundin adireshin gida na mai amfani ta tsohuwa, amma wannan wurin za a iya bayyana a sarari cikin fayil idea.properties.
  • Aikin da aka bincika dole ne ya zama ingantaccen aikin IDEA, wanda dole ne ku aiwatar da wasu fayiloli waɗanda galibi ana yin watsi da su zuwa sarrafa sigar, wato:
    • .idea/inspectionProfiles/Project_Default.xml - saitunan masu nazari, a fili za a yi amfani da su yayin gudanar da bincike a cikin akwati,
    • .idea/modules.xml - in ba haka ba za mu sami kuskure 'Wannan aikin ya ƙunshi babu kayayyaki',
    • .idea/misc.xml - in ba haka ba za mu sami kuskuren 'Ba a daidaita JDK da kyau don wannan aikin',
    • *.iml-файлы - in ba haka ba za mu sami kuskure game da JDK da ba a tsara shi ba a cikin tsarin.

Kodayake waɗannan fayilolin yawanci ana haɗa su a ciki .gitignore, ba su ƙunshi kowane bayani na musamman ga mahallin wani mahalli na musamman - ba kamar misali, fayil ba workspace.xml, inda irin waɗannan bayanan ke ƙunshe, don haka babu buƙatar aikata su.

Mahimmin bayani shine a haɗa JDK tare da IDEA Community Edition a cikin akwati a cikin wani nau'i wanda aka shirya don "zuba" akan ayyukan da aka bincika. Bari mu zaɓi kwandon tushe mai dacewa, kuma wannan shine abin da Dockerfile ɗin mu zai kasance:

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

Amfani da zaɓi idea.config.path mun tilasta IDEA don neman tsarinta na duniya a cikin babban fayil /etc/idea, saboda babban fayil na gida mai amfani lokacin aiki a cikin CI abu ne da ba shi da tabbas kuma sau da yawa ba ya nan.

Wannan shine yadda fayil ɗin da aka kwafe zuwa kwandon yayi kama: jdk.table.xml, wanda ya ƙunshi hanyoyin zuwa OpenJDK da aka shigar a cikin akwati (wani fayil iri ɗaya daga kundin adireshi tare da saitunan IDEA ana iya ɗauka azaman tushe):

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>

Hoton da aka gama akwai akan Docker Hub.

Kafin ci gaba, bari mu bincika cewa mai nazarin IDEA yana gudana a cikin akwati:

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

Ya kamata binciken ya gudana cikin nasara, kuma yawancin fayilolin .xml tare da rahotannin nazari yakamata su bayyana a cikin babban fayil ɗin manufa/ra'ayin_inspections.

Yanzu babu wani shakka cewa ana iya gudanar da mai nazarin IDEA a cikin kowane yanayi na CI, kuma mun matsa zuwa mataki na biyu.

Mataki na 2. Nuna kuma bincika rahoton

Samun rahoton a cikin nau'in fayilolin .xml shine rabin yaƙi; yanzu kuna buƙatar sanya shi mai karantawa na ɗan adam. Haka kuma ya kamata a yi amfani da sakamakonsa a cikin ƙofofi masu inganci - dabaru don tantance ko canjin da aka yarda ya wuce ko ya gaza bisa ga ma'auni masu inganci.

Wannan zai taimake mu Jenkins Gargaɗi NG Plugin, wanda aka saki a watan Janairun 2019. Tare da zuwansa, yawancin plugins guda ɗaya don aiki tare da sakamakon bincike a tsaye a cikin Jenkins (CheckStyle, FindBugs, PMD, da sauransu) yanzu an yi musu alama a matsayin wanda ba a gama ba.

Plugin ya ƙunshi sassa biyu:

  • masu tattara saƙon nazari da yawa (cikakken jerin ya haɗa da duk masu nazarin da aka sani ga kimiyya daga AcuCobol zuwa ZPT Lint),
  • mai duba rahoto guda ga dukkansu.

Jerin abubuwan da Gargaɗi NG zai iya tantancewa sun haɗa da faɗakarwa daga mahaɗar Java da faɗakarwa daga rajistan ayyukan Maven: ko da yake ana ganin su koyaushe, ba kasafai ake tantance su ba. Hakanan an haɗa rahotannin IntelliJ IDEA a cikin jerin sanannun sifofin.

Tun da plugin ɗin sabo ne, da farko yana hulɗa da kyau tare da Jenkins Pipeline. Matakin ginawa tare da sa hannu zai yi kama da wannan (muna gaya wa plugin ɗin abin da tsarin rahoton da muka gane da abin da ya kamata a bincika fayilolin):

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')]
    )
}

Shafin rahoton yayi kama da haka:

Gudanarwar IntelliJ IDEA akan Jenkins

A saukake, wannan keɓancewa na duniya ne ga duk waɗanda aka gane masu nazari. Yana ƙunshe da zane mai mu'amala na rarraba abubuwan da aka samo ta nau'in da kuma jadawali na ƙarfin canje-canje a adadin abubuwan da aka samo. Kuna iya yin bincike mai sauri a cikin grid a kasan shafin. Iyakar abin da bai yi aiki daidai ba don binciken IDEA shine ikon bincika lambar kai tsaye a Jenkins (ko da yake ga sauran rahotanni, misali Checkstyle, wannan plugin ɗin na iya yin wannan da kyau). Yana kama da wannan kwaro ne a cikin binciken rahoton IDEA wanda ke buƙatar gyarawa.

Daga cikin fasalulluka na Gargadi NG shine ikon tattara sakamakon bincike daga tushe daban-daban a cikin rahoto guda ɗaya da Ƙofar Quality Gates, gami da “ratchet” don taron tattaunawa. Akwai wasu takaddun shirye-shirye na Quality Gates a nan - duk da haka, bai cika ba, kuma dole ne ku duba lambar tushe. A gefe guda, don cikakken iko akan abin da ke faruwa, ana iya aiwatar da “ratchet” da kansa (duba na raɗaɗi game da wannan batu).

ƙarshe

Kafin in fara shirya wannan abu, na yanke shawarar bincika: shin akwai wanda ya riga ya rubuta akan wannan batu akan Habré? Na samu kawai hira 2017 с Lanyinda yake cewa:

Kamar yadda na sani, babu haɗin kai tare da Jenkins ko maven plugin […] A ka'ida, kowane mai sha'awar zai iya yin abokai tare da IDEA Community Edition da Jenkins, da yawa za su amfana da wannan kawai.

To, bayan shekaru biyu muna da Gargaɗi NG Plugin, kuma a ƙarshe wannan abota ta sami nasara!

source: www.habr.com

Add a comment