IntelliJ IDEA pÄrbaužu veikÅ”ana vietnÄ Jenkins
IntelliJ IDEA Å”odien ir vismodernÄkais statiskais Java kodu analizators, kas savÄs spÄjÄs atstÄj tÄlu aiz muguras tÄdus āveterÄnusā kÄ PÄrbaudes stils Šø Spotbugs. TÄs daudzÄs āpÄrbaudesā pÄrbauda kodu dažÄdos aspektos, sÄkot no kodÄÅ”anas stila lÄ«dz tipiskÄm kļūdÄm.
TomÄr, kamÄr analÄ«zes rezultÄti tiek parÄdÄ«ti tikai izstrÄdÄtÄja IDE lokÄlajÄ saskarnÄ, izstrÄdes procesÄ tie ir maz noderÄ«gi. StatiskÄ analÄ«ze ir jÄizpilda KÄ pirmais bÅ«vniecÄ«bas cauruļvada solis, tÄ rezultÄtiem ir jÄnosaka kvalitÄtes vÄrti, un bÅ«vniecÄ«bai vajadzÄtu neizdoties, ja kvalitÄtes vÄrti netiek izturÄti. Ir zinÄms, ka TeamCity CI ir integrÄts ar IDEA. Bet pat tad, ja neizmantojat TeamCity, varat viegli mÄÄ£inÄt palaist IDEA pÄrbaudes jebkurÄ citÄ CI serverÄ«. Es iesaku jums redzÄt, kÄ to var izdarÄ«t, izmantojot IDEA Community Edition, Jenkins un Warnings NG spraudni.
1. darbÄ«ba. Palaidiet analÄ«zi konteinerÄ un saÅemiet atskaiti
SÄkumÄ ideja palaist IDE (darbvirsmas lietojumprogrammu!) CI sistÄmÄ, kurai nav grafiskÄ interfeisa, var Ŕķist apÅ”aubÄma un ļoti apgrÅ«tinoÅ”a. Par laimi, IDEA izstrÄdÄtÄji ir nodroÅ”inÄjuÅ”i iespÄju darboties koda formatÄÅ”ana Šø pÄrbaudes no komandrindas. TurklÄt, lai palaistu IDEA Å”ajÄ režīmÄ, grafikas apakÅ”sistÄma nav nepiecieÅ”ama, un Å”os uzdevumus var veikt serveros ar teksta apvalku.
PÄrbaudes tiek uzsÄktas, izmantojot skriptu bin/inspect.sh no IDEA instalÄcijas direktorija. NepiecieÅ”amie parametri ir:
pilns ceļŔ uz projektu (radinieki netiek atbalstīti),
ceļŔ uz .xml failu ar pÄrbaudes iestatÄ«jumiem (parasti atrodas projektÄ .idea/inspectionProfiles/Project_Default.xml),
pilns ceļŔ uz mapi, kurÄ tiks saglabÄti .xml faili ar pÄrskatiem par analÄ«zes rezultÄtiem.
TurklÄt sagaidÄms, ka
ceļŔ uz Java SDK tiks konfigurÄts IDE, pretÄjÄ gadÄ«jumÄ analÄ«ze nedarbosies. Å ie iestatÄ«jumi ir ietverti konfigurÄcijas failÄ jdk.table.xml IDEA globÄlÄs konfigurÄcijas mapÄ. Pati IDEA globÄlÄ konfigurÄcija pÄc noklusÄjuma atrodas lietotÄja mÄjas direktorijÄ, bet Ŕī vieta var skaidri norÄdÄ«t failÄ idea.properties.
AnalizÄtajam projektam ir jÄbÅ«t derÄ«gam IDEA projektam, kuram jums bÅ«s jÄiekļauj daži faili, kas parasti tiek ignorÄti versiju kontrolÄ, proti:
.idea/inspectionProfiles/Project_Default.xml ā analizatora iestatÄ«jumi, tie noteikti tiks izmantoti, veicot pÄrbaudes konteinerÄ,
.idea/modules.xml - pretÄjÄ gadÄ«jumÄ mÄs saÅemsim kļūdu āÅ is projekts nesatur moduļusā,
.idea/misc.xml - pretÄjÄ gadÄ«jumÄ tiks parÄdÄ«ts kļūdas ziÅojums "JDK nav pareizi konfigurÄts Å”im projektam",
Lai gan Å”ie faili parasti ir iekļauti .gitignore, tie nesatur nekÄdu informÄciju, kas raksturÄ«ga konkrÄta izstrÄdÄtÄja videi ā atŔķirÄ«bÄ, piemÄram, no faila workspace.xml, kur Å”Äda informÄcija ir ietverta, un tÄpÄc nav vajadzÄ«bas to izdarÄ«t.
AcÄ«mredzamais risinÄjums ir iepakot JDK kopÄ ar IDEA Community Edition konteinerÄ tÄdÄ formÄ, kas ir gatava analizÄtajiem projektiem. IzvÄlÄsimies piemÄrotu bÄzes konteineru, un Å”Äds bÅ«s mÅ«su 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
Izmantojot opciju idea.config.path mÄs piespiedÄm IDEA meklÄt savu globÄlo konfigurÄciju mapÄ /etc/idea, jo lietotÄja mÄjas mape, strÄdÄjot CI, ir neskaidra lieta un bieži vien tÄs pilnÄ«bÄ nav.
KonteinerÄ iekopÄtais fails izskatÄs Å”Ädi: jdk.table.xml, kurÄ ir konteinerÄ instalÄtie ceļi uz OpenJDK (par pamatu var Åemt lÄ«dzÄ«gu failu no jÅ«su direktorija ar IDEA iestatÄ«jumiem):
Pirms turpinÄt, pÄrbaudÄ«sim, vai konteinerÄ darbojas IDEA analizators:
docker run --rm -v <ŠæŃŃŃ/Šŗ/Š²Š°ŃŠµŠ¼Ń/ŠæŃŠ¾ŠµŠŗŃŃ>:/var/project inponomarev/intellij-idea-analyzer
AnalÄ«zei vajadzÄtu darboties veiksmÄ«gi, un apakÅ”mapÄ target/idea_inspections jÄparÄdÄs daudziem .xml failiem ar analizatora atskaitÄm.
Tagad vairs nav Å”aubu, ka IDEA analizatoru var palaist atseviŔķi jebkurÄ CI vidÄ, un mÄs pÄrejam pie otrÄ posma.
2. darbÄ«ba. ParÄdiet un analizÄjiet pÄrskatu
PÄrskata iegÅ«Å”ana .xml failu formÄtÄ ir puse no panÄkumiem; tagad jums tas ir jÄpadara cilvÄkiem lasÄms. Un arÄ« tÄs rezultÄtus vajadzÄtu izmantot kvalitÄtes vÄrtos - loÄ£iku, lai noteiktu, vai pieÅemtÄ maiÅa pÄc kvalitÄtes kritÄrijiem ir izturÄjusi vai neizdodas.
Tas mums palÄ«dzÄs Jenkins Warnings NG spraudnis, kas tika izlaists 2019. gada janvÄrÄ«. LÄ«dz ar tÄs parÄdÄ«Å”anos daudzi atseviŔķi spraudÅi darbam ar statiskÄs analÄ«zes rezultÄtiem pakalpojumÄ Jenkins (CheckStyle, FindBugs, PMD utt.) tagad ir atzÄ«mÄti kÄ novecojuÅ”i.
Spraudnis sastÄv no divÄm daļÄm:
daudzi analizatora ziÅojumu savÄcÄji (pilns saraksts ietver visus zinÄtnei zinÄmos analizatorus no AcuCobol lÄ«dz ZPT Lint),
viens pÄrskatu skatÄ«tÄjs visiem tiem.
To lietu saraksts, ko Warnings NG var analizÄt, ietver brÄ«dinÄjumus no Java kompilatora un brÄ«dinÄjumus no Maven izpildes žurnÄliem: lai gan tie ir pastÄvÄ«gi redzami, tie reti tiek Ä«paÅ”i analizÄti. AtpazÄ«to formÄtu sarakstÄ ir iekļauti arÄ« IntelliJ IDEA pÄrskati.
TÄ kÄ spraudnis ir jauns, tas sÄkotnÄji labi mijiedarbojas ar Jenkins Pipeline. BÅ«vÄÅ”anas solis ar tÄ piedalÄ«Å”anos izskatÄ«sies Å”Ädi (mÄs vienkÄrÅ”i pasakÄm spraudnim, kÄdu pÄrskata formÄtu mÄs atpazÄ«stam un kÄdi faili ir skenÄjami):
Ärti Ŕī saskarne ir universÄla visiem atzÄ«tajiem analizatoriem. TajÄ ir interaktÄ«va diagramma par atradumu sadalÄ«jumu pa kategorijÄm un atradumu skaita izmaiÅu dinamikas grafiks. Varat veikt Ätru meklÄÅ”anu režģī lapas apakÅ”Ä. VienÄ«gais, kas IDEA pÄrbaudÄs nedarbojÄs pareizi, bija iespÄja pÄrlÅ«kot kodu tieÅ”i Jenkins (lai gan citiem ziÅojumiem, piemÄram, Checkstyle, Å”is spraudnis to var izdarÄ«t lieliski). Å Ä·iet, ka Ŕī ir kļūda IDEA pÄrskatu parsÄtÄjÄ, kas ir jÄnovÄrÅ”.
Viena no Warnings NG funkcijÄm ir iespÄja apkopot dažÄdu avotu konstatÄjumus vienÄ ziÅojumÄ un ieprogrammÄt Quality Gates, tostarp atsauces komplekta āsprÅ«dratsā. Ir pieejama daļa Quality Gates programmÄÅ”anas dokumentÄcijas Å”eit - tomÄr tas nav pilnÄ«gs, un jums ir jÄskatÄs avota kods. No otras puses, lai pilnÄ«bÄ kontrolÄtu notiekoÅ”o, āsprÅ«dratsā var tikt ieviests neatkarÄ«gi (skatiet manu iepriekÅ”ÄjÄ ziÅa par Å”o tÄmu).
SecinÄjums
Pirms sÄku gatavot Å”o materiÄlu, nolÄmu pameklÄt: vai kÄds jau ir rakstÄ«jis par Å”o tÄmu par HabrÄ? Es tikai atradu intervija 2017 Ń Lanykur viÅÅ” saka:
Cik es zinu, nav integrÄcijas ar Jenkins vai maven spraudni [ā¦] PrincipÄ jebkurÅ” entuziasts varÄtu sadraudzÄties ar IDEA Community Edition un Jenkins, daudzi no tÄ tikai iegÅ«tu.
Nu, divus gadus vÄlÄk mums ir Warnings NG Plugin, un beidzot Ŕī draudzÄ«ba ir piepildÄ«jusies!