Kuyendetsa kuyendera kwa IntelliJ IDEA pa Jenkins

IntelliJ IDEA lero ili ndi chowunikira chapamwamba kwambiri cha Java code analyzer, chomwe mwa kuthekera kwake chimasiya kumbuyo "omenyera nkhondo" ngati. Checkstyle ΠΈ Spotbugs. "Kuyendera" kwake kochulukirapo kumawunika kachidindo m'njira zosiyanasiyana, kuyambira kalembedwe ka zolemba mpaka nsikidzi.

Komabe, malinga ngati zotsatira zowunikira zimangowonetsedwa mu mawonekedwe am'deralo a IDE ya wopanga, sizithandiza kwenikweni pakupanga chitukuko. Kusanthula mosasunthika ziyenera kukwaniritsidwa Monga sitepe yoyamba ya mapaipi omanga, zotsatira zake ziyenera kufotokozera zipata zabwino, ndipo kumanga kuyenera kulephera ngati zipata zabwino sizidutsa. Zimadziwika kuti TeamCity CI ikuphatikizidwa ndi IDEA. Koma ngakhale simugwiritsa ntchito TeamCity, mutha kuyesa kuyesa IDEA mu seva ina iliyonse ya CI. Ndikupangira kuti muwone momwe izi zingachitikire pogwiritsa ntchito pulogalamu ya IDEA Community Edition, Jenkins ndi Warnings NG plugin.

Khwerero 1. Yambitsani kusanthula mu chidebe ndikupeza lipoti

Poyamba, lingaliro loyendetsa IDE (desktop application!) mkati mwa CI system yomwe ilibe mawonekedwe azithunzi imatha kuwoneka ngati yokayikitsa komanso yovuta kwambiri. Mwamwayi, opanga IDEA apereka mwayi wothamanga kupanga kodi ΠΈ kuyendera kuchokera pamzere wolamula. Kuphatikiza apo, kuyendetsa IDEA mwanjira iyi, mawonekedwe azithunzi safunikira ndipo izi zitha kuchitidwa pa maseva okhala ndi chipolopolo cholemba.

Kuyendera kumayambika pogwiritsa ntchito script bin/inspect.sh kuchokera ku chikwatu chokhazikitsa IDEA. Zofunikira ndi izi:

  • njira yonse yopita ku polojekiti (achibale sakuthandizidwa),
  • njira yopita ku fayilo ya .xml yokhala ndi zochunira zoyendera (nthawi zambiri imakhala mkati mwa pulojekiti mu .idea/inspectionProfiles/Project_Default.xml),
  • njira yonse yopita ku chikwatu momwe mafayilo a .xml okhala ndi malipoti pazotsatira zowunikira adzasungidwa.

Komanso, zikuyembekezeredwa kuti

  • njira yopita ku Java SDK idzakonzedwa mu IDE, apo ayi kusanthula sikungagwire ntchito. Zokonda izi zili mufayilo yosinthira jdk.table.xml mu IDEA global kasinthidwe chikwatu. Kusintha kwapadziko lonse kwa IDEA komwe kuli m'ndandanda wanyumba ya wogwiritsa ntchito, koma malo awa zitha kufotokozedwa momveka bwino mu file idea.properties.
  • Ntchito yowunikiridwa iyenera kukhala pulojekiti yovomerezeka ya IDEA, yomwe muyenera kupanga mafayilo omwe nthawi zambiri amanyalanyazidwa kuti aziwongolera, omwe ndi:
    • .idea/inspectionProfiles/Project_Default.xml - makonda a analyzer, mwachiwonekere adzagwiritsidwa ntchito poyang'anira chidebecho,
    • .idea/modules.xml - apo ayi tipeza cholakwika 'Pulojekitiyi ilibe ma module',
    • .idea/misc.xml - apo ayi tidzapeza cholakwika 'JDK sinakonzedwe bwino pa polojekitiyi',
    • *.iml-Ρ„Π°ΠΉΠ»Ρ‹ - apo ayi tipeza cholakwika pa JDK yosasinthika mu gawoli.

Ngakhale mafayilowa nthawi zambiri amaphatikizidwa mu .gitignore, alibe chidziwitso chilichonse chokhudzana ndi chilengedwe cha wopanga wina - mosiyana, mwachitsanzo, fayilo workspace.xml, pamene chidziwitso choterocho chili, choncho palibe chifukwa chochichita.

Yankho lodziwikiratu ndikuyika JDK pamodzi ndi IDEA Community Edition mu chidebe chokonzekera "kuponyedwa" pama projekiti omwe afufuzidwa. Tiyeni tisankhe chidebe choyenera, ndipo izi ndi zomwe Dockerfile yathu idzakhala:

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

Kugwiritsa ntchito njira idea.config.path tidakakamiza IDEA kuyang'ana masinthidwe ake padziko lonse lapansi mufoda /etc/idea, chifukwa chikwatu chakunyumba kwa wogwiritsa ntchito akamagwira ntchito ku CI ndi chinthu chosatsimikizika ndipo nthawi zambiri sichipezeka.

Umu ndi momwe fayilo yomwe idakopedwa mu chidebe imawonekera: jdk.table.xml, yomwe ili ndi njira zopita ku OpenJDK zoyikidwa mkati mwa chidebe (fayilo yofananira kuchokera mu bukhu lanu lomwe lili ndi ma IDEA lingatengedwe ngati maziko):

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>

Chithunzi chomalizidwa ikupezeka pa Docker Hub.

Tisanayambe, tiyeni tiwone ngati IDEA analyzer ikuyenda mu chidebe:

docker run --rm -v <ΠΏΡƒΡ‚ΡŒ/ΠΊ/Π²Π°ΡˆΠ΅ΠΌΡƒ/ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ>:/var/project inponomarev/intellij-idea-analyzer

Kusanthula kuyenera kuchitika bwino, ndipo mafayilo ambiri a .xml okhala ndi malipoti a analyzer ayenera kuwonekera mufoda yaing'ono ya target/idea_inspections.

Tsopano palibenso kukayikira kulikonse kuti IDEA analyzer ikhoza kuyendetsedwa moyimirira mu malo aliwonse a CI, ndipo timapita ku sitepe yachiwiri.

Gawo 2. Onetsani ndi kusanthula lipoti

Kupeza lipoti mu mawonekedwe a .xml owona ndi theka la nkhondo; tsopano muyenera kulipanga kuti likhale lowerengeka ndi anthu. Komanso zotsatira zake ziyenera kugwiritsidwa ntchito pazipata zabwino - logic yodziwira ngati kusintha kovomerezeka kumadutsa kapena kulephera malinga ndi makhalidwe abwino.

Izi zidzatithandiza Jenkins Warnings NG Plugin, yomwe idatulutsidwa mu Januware 2019. Ndi kubwera kwake, mapulagini ambiri omwe amagwira ntchito ndi kusanthula kosasunthika kumabweretsa ku Jenkins (CheckStyle, FindBugs, PMD, etc.) tsopano amalembedwa ngati osatha.

Pulagi ili ndi magawo awiri:

  • osonkhanitsa mauthenga ambiri a analyzer (mndandanda wathunthu imaphatikizapo zowunikira zonse zomwe zimadziwika ndi sayansi kuchokera ku AcuCobol kupita ku ZPT Lint),
  • wowonera lipoti limodzi kwa onsewo.

Mndandanda wazinthu zomwe Machenjezo a NG angaunikenso akuphatikizapo machenjezo ochokera kwa Java compiler ndi machenjezo ochokera ku ma log execution a Maven: ngakhale amawoneka nthawi zonse, safufuzidwa kawirikawiri. Malipoti a IntelliJ IDEA akuphatikizidwanso pamndandanda wamawonekedwe odziwika.

Popeza pulogalamu yowonjezerayo ndi yatsopano, poyamba imagwirizana bwino ndi Jenkins Pipeline. Njira yomanga ndi kutenga nawo gawo idzawoneka motere (timangouza pulogalamu yowonjezera mtundu wa lipoti lomwe timazindikira komanso mafayilo omwe ayenera kufufuzidwa):

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

Mawonekedwe a lipoti akuwoneka motere:

Kuyendetsa kuyendera kwa IntelliJ IDEA pa Jenkins

Mosavuta, mawonekedwe awa ndiwapadziko lonse lapansi kwa osanthula onse odziwika. Lili ndi chithunzi chothandizira cha kugawidwa kwa zopeza ndi gulu ndi graph ya mphamvu za kusintha kwa chiwerengero cha zopeza. Mutha kusaka mwachangu mu gululi pansi pa tsamba. Chokhacho chomwe sichinagwire ntchito moyenera pakuwunika kwa IDEA ndikutha kuyang'ana kachidindo molunjika ku Jenkins (ngakhale malipoti ena, mwachitsanzo Checkstyle, plugin iyi imatha kuchita izi mokongola). Zikuwoneka ngati ichi ndi cholakwika mu IDEA report parser chomwe chiyenera kukonzedwa.

Zina mwazinthu za Machenjezo a NG ndikutha kuphatikizira zomwe zapezedwa kuchokera kuzinthu zosiyanasiyana mu lipoti limodzi ndi pulogalamu ya Quality Gates, kuphatikiza "ratchet" pagulu lolozera. Zolemba zina za Quality Gates zilipo apa - komabe, sizokwanira, ndipo muyenera kuyang'ana pa code source. Kumbali ina, kuti muwongolere zomwe zikuchitika, "ratchet" ikhoza kukhazikitsidwa paokha (onani wanga post yapitayi za mutuwu).

Pomaliza

Ndisanayambe kukonzekera nkhaniyi, ndinaganiza zofufuza: kodi pali amene adalemba kale pamutuwu pa Habré? Ndinangopeza interview 2017 с Lanypomwe akuti:

Monga ndikudziwira, palibe kuphatikiza ndi Jenkins kapena pulogalamu yowonjezera […]

Chabwino, zaka ziwiri pambuyo pake tili ndi machenjezo a NG Plugin, ndipo potsiriza ubwenzi umenewu wakwaniritsidwa!

Source: www.habr.com

Kuwonjezera ndemanga