Isebenzisa ukuhlolwa kwe-IntelliJ IDEA ku-Jenkins

I-IntelliJ IDEA namuhla inesihlaziyi sekhodi ye-Java esithuthuke kakhulu, esishiya ngemuva kakhulu “omakadebona” abanjengabo. Isitayela sokuhlola и Ama-Spotbugs. "Ukuhlola" kwayo okuningi kuhlola ikhodi ezicini ezihlukahlukene, kusukela kusitayela sokubhala amakhodi kuye kweziphazamisi ezivamile.

Kodwa-ke, inqobo nje uma imiphumela yokuhlaziya iboniswa kuphela kusixhumi esibonakalayo sendawo se-IDE yonjiniyela, ayisebenzisi kangako inqubo yokuthuthukisa. Ukuhlaziya okumile kufanele kugcwaliseke Njengesinyathelo sokuqala sepayipi lokwakha, imiphumela yalo kufanele ichaze amasango ekhwalithi, futhi ukwakhiwa kufanele kuhluleke uma amasango ekhwalithi engadluliswanga. Kuyaziwa ukuthi iTeamCity CI ihlanganiswe ne-IDEA. Kodwa noma ungasebenzisi i-TeamCity, ungazama kalula ukuhlola i-IDEA kunoma iyiphi enye iseva ye-CI. Ngiphakamisa ukuthi ubone ukuthi lokhu kungenziwa kanjani kusetshenziswa i-IDEA Community Edition, Jenkins kanye ne-plugin ye-Warnings NG.

Isinyathelo 1. Qalisa ukuhlaziya esitsheni bese uthola umbiko

Ekuqaleni, umqondo wokusebenzisa i-IDE (uhlelo lokusebenza lwedeskithophu!) ngaphakathi kwesistimu ye-CI engenakho ukuboniswa kwesithombe ungase ubonakale ungabaza futhi unzima kakhulu. Ngenhlanhla, abathuthukisi be-IDEA banikeze amandla okuqalisa ukufometha ikhodi и ukuhlolwa kusukela kulayini womyalo. Ngaphezu kwalokho, ukuze usebenzise i-IDEA kule modi, i-subsystem yezithombe ayidingeki futhi le misebenzi ingenziwa kumaseva anegobolondo lombhalo.

Ukuhlola kwethulwa kusetshenziswa iskripthi bin/inspect.sh kusukela kunkomba yokufaka ye-IDEA. Amapharamitha adingekayo yilawa:

  • indlela ephelele yephrojekthi (izihlobo azisekelwa),
  • indlela eya kufayela elithi .xml elinezilungiselelo zokuhlola (ngokuvamile elitholakala ngaphakathi kwephrojekthi kokuthi .idea/inspectionProfiles/Project_Default.xml),
  • indlela egcwele eya kufolda lapho amafayela e-.xml anemibiko yemiphumela yokuhlaziya azogcinwa khona.

Ngaphezu kwalokho, kulindeleke ukuthi

  • indlela eya ku-Java SDK izolungiswa ku-IDE, ngaphandle kwalokho ukuhlaziya ngeke kusebenze. Lezi zilungiselelo ziqukethwe kufayela lokumisa jdk.table.xml kufolda yokucushwa kwe-IDEA global. I-IDEA global configuration ngokwayo itholakala kuhla lwemibhalo lwasekhaya lomsebenzisi ngokuzenzakalelayo, kodwa le ndawo ingacaciswa ngokucacile kufayela idea.properties.
  • Iphrojekthi ehlaziywe kufanele ibe iphrojekthi ye-IDEA evumelekile, okuzodingeka ukuthi uhambise kuyo amanye amafayela ngokuvamile awanakwa ekulawuleni inguqulo, okungukuthi:
    • .idea/inspectionProfiles/Project_Default.xml - izilungiselelo zokuhlaziya, ngokusobala zizosetshenziswa lapho kuhlolwa esitsheni,
    • .idea/modules.xml - uma kungenjalo sizothola iphutha 'Le phrojekthi ayinawo amamojula',
    • .idea/misc.xml - uma kungenjalo sizothola iphutha 'I-JDK ayilungiselelwe kahle le phrojekthi',
    • *.iml-файлы - uma kungenjalo sizothola iphutha mayelana ne-JDK engalungiselelwe kumojula.

Nakuba lawa mafayela ngokuvamile afakwa ku .gitignore, aziqukethe noma yiluphi ulwazi oluqondene nendawo yonjiniyela othile - ngokungafani, ngokwesibonelo, ifayela workspace.xml, lapho ulwazi olunjalo luqukethwe khona, ngakho-ke asikho isidingo sokulwenza.

Isixazululo esisobala ukupakisha i-JDK kanye ne-IDEA Community Edition kusiqukathi esisesimweni esilungele “ukufakwa” kumaphrojekthi ahlaziyiweyo. Ake sikhethe isitsha esiyisisekelo esifanele, futhi lokhu kuzoba yi-Dockerfile yethu:

I-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

Ukusebenzisa inketho idea.config.path siphoqe i-IDEA ukuthi ibheke ukucushwa kwayo komhlaba wonke kufolda /etc/idea, ngoba ifolda yasekhaya yomsebenzisi uma isebenza ku-CI iyinto engaqinisekile futhi ngokuvamile ingekho ngokuphelele.

Yile ndlela ifayela elikopishelwe esitsheni elibukeka ngayo: jdk.table.xml, equkethe izindlela eziya ku-OpenJDK efakwe ngaphakathi kwesiqukathi (ifayela elifanayo elisuka kunkomba yakho enezilungiselelo ze-IDEA lingathathwa njengesisekelo):

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>

Isithombe esiqediwe iyatholakala ku-Docker Hub.

Ngaphambi kokuqhubekela phambili, ake sihlole ukuthi isihlaziyi se-IDEA siyasebenza esitsheni:

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

Ukuhlaziya kufanele kusebenze ngempumelelo, futhi amafayela amaningi we-.xml anemibiko yokuhlaziya kufanele avele kufolda engaphansi yethagethi/umbono_wokuhlola.

Manje akusekho ukungabaza ukuthi i-IDEA analyzer ingaqhutshwa izimele kunoma iyiphi indawo ye-CI, futhi siqhubekela esinyathelweni sesibili.

Isinyathelo sesi-2. Bonisa futhi uhlaziye umbiko

Ukuthola umbiko ngendlela yamafayela e-.xml kuyingxenye yempi; manje udinga ukuwenza ufundeke ngabantu. Futhi futhi imiphumela yayo kufanele isetshenziswe emasangweni ekhwalithi - i-logic yokunquma ukuthi uguquko olwamukelekile luyadlula noma lwehluleki ngokuya ngezinqubo zekhwalithi.

Lokhu kuzosisiza I-Jenkins Warnings NG Plugin, eyakhishwa ngoJanuwari 2019. Ngokufika kwayo, ama-plugin amaningi angawodwana okusebenza ngemiphumela yokuhlaziya emile ku-Jenkins (CheckStyle, FindBugs, PMD, njll.) manje amakwe njengangasekho.

I-plugin iqukethe izingxenye ezimbili:

  • abaqoqi abaningi bemiyalezo yokuhlaziya (uhlu olugcwele ihlanganisa bonke abahlaziyi abaziwa isayensi kusukela ku-AcuCobol kuya ku-ZPT Lint),
  • isibukeli esisodwa sombiko wabo bonke.

Uhlu lwezinto I-Warnings NG engakwazi ukuzihlaziya luhlanganisa izexwayiso ezivela kumdidiyeli we-Java kanye nezixwayiso ezisuka kumalogi okubulala e-Maven: nakuba ehlala ebonakala, awavami ukuba ahlaziywe ngokuqondile. Imibiko ye-IntelliJ IDEA iphinde ifakwe ohlwini lwamafomethi aziwayo.

Njengoba i-plugin iyintsha, iqale isebenzisana kahle ne-Jenkins Pipeline. Isinyathelo sokwakha ngokubamba iqhaza kwayo sizobukeka kanje (simane sitshele i-plugin ukuthi iyiphi ifomethi yombiko esiyibonayo nokuthi yimaphi amafayela okufanele askeniwe):

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

I-interface yombiko ibonakala kanje:

Isebenzisa ukuhlolwa kwe-IntelliJ IDEA ku-Jenkins

Kalula, lesi sikhombimsebenzisi sisebenza kubo bonke abahlaziyi abaziwayo. Iqukethe umdwebo osebenzisanayo wokusatshalaliswa kokutholwe ngokwesigaba kanye negrafu yokuguquguquka kwezinguquko enanini lokutholiwe. Ungenza ukusesha okusheshayo kugridi ngaphansi kwekhasi. Okuwukuphela kwento engazange isebenze kahle ekuhlolweni kwe-IDEA kwaba ikhono lokuphequlula ikhodi ngokuqondile ku-Jenkins (nakuba kweminye imibiko, isibonelo i-Checkstyle, le plugin ingenza lokhu kahle). Kubonakala sengathi lesi isiphazamisi kumhlahleli wombiko we-IDEA esidinga ukulungiswa.

Phakathi kwezici Zezixwayiso NG yikhono lokuhlanganisa okutholwe emithonjeni ehlukene embikweni owodwa nohlelo lwe-Quality Gates, okuhlanganisa “i-ratchet” yomhlangano wereferensi. Amanye amadokhumenti ezinhlelo ze-Quality Gates ayatholakala lapha - Nokho, akuphelele, futhi kufanele ubheke ikhodi yomthombo. Ngakolunye uhlangothi, ukuze kulawulwe ngokuphelele okwenzekayo, "i-ratchet" ingenziwa ngokuzimela (bona yami okuthunyelwe kwangaphambilini mayelana nalesi sihloko).

isiphetho

Ngaphambi kokuqala ukulungisa lesi sihloko, nganquma ukucinga: ingabe ukhona oseke wabhala ngalesi sihloko ku-Habré? Ngithole kuphela interview 2017 с lanilapho ethi:

Ngokwazi kwami, akukho ukuhlanganiswa noJenkins noma i-plugin ye-maven […] Empeleni, noma yimuphi umuntu oshisekayo angenza ubungane ne-IDEA Community Edition kanye noJenkins, abaningi bangazuza kulokhu kuphela.

Nokho, eminyakeni emibili kamuva sinezixwayiso ze-NG Plugin, futhi ekugcineni lobu bungane bufezekile!

Source: www.habr.com

Engeza amazwana