Ekzekutojmë inspektime në IntelliJ IDEA në Jenkins

IntelliJ IDEA sot sot është me analistin më të avancuar statik të kodit Java, duke lënë shumë pas "veteranët" si Checkstyle dhe Spotbugs. Inspektimet e saj të shumta kontrollojnë kodin në aspekte të ndryshme, nga stili i kodimit deri te gabimet tipike.

MegjithatĂ«, pĂ«r momentin rezultatet e analizĂ«s shfaqen vetĂ«m nĂ« ndĂ«rfaqen lokale tĂ« IDE-sĂ« sĂ« zhvilluesit, duke i bĂ«rĂ« ato pak tĂ« dobishme pĂ«r procesin e zhvillimit. Analiza statike duhet tĂ« kryhet si njĂ« hap i parĂ« i konvejers sĂ« ndĂ«rtimit, rezultatet e saj duhet tĂ« pĂ«rcaktojnĂ« quality gates, dhe ndĂ«rtimi duhet tĂ« dĂ«shtojĂ« nĂ«se quality gates nuk kalohen. ËshtĂ« e njohur se TeamCity CI Ă«shtĂ« e integruar me IDEA. Por edhe nĂ«se nuk po pĂ«rdorni TeamCity, mund ta provoni pĂ«r tĂ« ekzekutuar inspektimet e IDEA nĂ« çdo server tjetĂ«r CI. Le tĂ« shohim se si mund ta bĂ«jmĂ« kĂ«tĂ« duke pĂ«rdorur IDEA Community Edition, Jenkins dhe Warnings NG plugin.

Hapi 1. Nisim analizën në kontejner dhe marrim raportin

Për herë të parë, ideja për të lançuar IDE (aplikacioni desktop!) brenda një sistemi CI pa ndërfaqe grafike mund të duket e dyshimtë dhe shumë e lodhshme. Fatmirësisht, zhvilluesit e IDEA ofruan mundësinë për të lançuar formatimin e kodit dhe inspektimet nga linja e komandës. Për më tepër, për të lançuar IDEA në këtë mënyrë nuk kërkohet një nënstrukturë grafike dhe këto detyra mund të kryhen në serverë me një shell tekstual.

Lançimi i inspektimeve bëhet përmes skenarit bin/inspect.sh nga direktoria e instalimit të IDEA. Si parametra kërkohen:

  • rruga e plotĂ« deri nĂ« projekt (rrugĂ«t relative nuk mbĂ«shteten),
  • rruga deri nĂ« skedarin .xml me konfigurimet e inspektimeve (zakonisht ndodhet brenda projektit nĂ« .idea/inspectionProfiles/Project_Default.xml),
  • rruga e plotĂ« deri nĂ« dosjen ku do tĂ« ruhet skedarĂ«t .xml me raportet e rezultateve tĂ« analizĂ«s.

Për më tepër, pritet që

  • nĂ« IDE tĂ« jetĂ« e konfiguruar rruga pĂ«r Java SDK, ndryshe analiza nuk do tĂ« funksionojĂ«. KĂ«to konfigurime ndodhen nĂ« skedarin konfiguruese jdk.table.xml nĂ« dosjen e konfigurimit global tĂ« IDEA. Konfigurimi global i IDEA, me default, ndodhet nĂ« direktorinĂ« e shtĂ«pisĂ« sĂ« pĂ«rdoruesit, por ky vendndodhje mund tĂ« caktohet qartĂ« nĂ« skedarin idea.properties.
  • projekti qĂ« po analizohet duhet tĂ« jetĂ« njĂ« projekt valid IDEA, pĂ«r kĂ«tĂ«, nĂ« kontrollin e versioneve do tĂ« jetĂ« e nevojshme tĂ« komitohen disa skedarĂ« qĂ« zakonisht injorohen, pĂ«rkatĂ«sisht:
    • .idea/inspectionProfiles/Project_Default.xml — cilĂ«simet e analizuesit, ato do tĂ« pĂ«rdoren qartĂ« gjatĂ« ekzekutimit tĂ« inspektimeve nĂ« kontejner,
    • .idea/modules.xml — pĂ«rndryshe do tĂ« marrim gabimin ‘Ky projekt nuk pĂ«rmban modulet’,
    • .idea/misc.xml — pĂ«rndryshe do tĂ« marrim gabimin ‘JDK nuk Ă«shtĂ« konfiguruar siç duhet pĂ«r kĂ«tĂ« projekt’,
    • *.iml-fajllat — pĂ«rndryshe do tĂ« marrim gabimin pĂ«r JDK tĂ« pafunksionueshĂ«m nĂ« modulin.

MegjithatĂ«, zakonisht kĂ«to skedarĂ« pĂ«rfshihen nĂ« .gitignore, ato nuk pĂ«rmbajnĂ« ndonjĂ« informacion specifik pĂ«r ambientin e zhvilluesit konkret — nĂ« dallim nga, pĂ«r shembull, skedari workspace.xml, ku njĂ« informacion i tillĂ«, pĂ«rkatĂ«sisht, pĂ«rmban, dhe pĂ«r kĂ«tĂ« arsye, nuk duhet komituar.

Natyrshëm sugjerohet zgjidhja për të paketuar JDK së bashku me IDEA Community Edition në një kontejner në formën e gatshme për 'dërgim' në projektet që po analizohen. Do të zgjidhim një kontejner bazik të përshtatshëm, dhe ja se çfarë do të rezultojë konfigurimi i Docker-it:

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

Duke me opsionin idea.config.path ne kemi bërë që IDEA të kërkojë konfigurimin e saj global në dosjen /etc/idea, sepse dosja personale e përdoruesit në kushte pune në CI është një gjë e paqartë dhe shpeshherë nuk ekziston fare.

Këtu është dokumenti i kopjuar në kontejner jdk.table.xml, në të cilin janë përcaktuar rrugët për OpenJDK, të instaluar brenda kontejnerit (mund të merret si bazë një dokument i ngjashëm nga direktoria juaj personale me konfigurimet e IDEA):

jdk.table.xml

Imazhi i gatshëm është i disponueshëm në Docker Hub.

Para se të vazhdojmë, le të verifikojmë ekzekutimin e analizatorit IDEA në konteiner:

docker run --rm -v :/var/project inponomarev/intellij-idea-analyzer

Analiza duhet të ekzekutohet me sukses, dhe në nënfolderin target/idea_inspections duhet të shfaqen shumë skedarë .xml me raportet e analizatorit.

Tani nuk ka më dyshime që analizatori IDEA mund të ekzekutohet në mënyrë autonome në çdo mjedis CI, dhe ne kalojmë në hapin e dytë.

Hapi 2. Shfaqim dhe analizojmë raportin

Të marrësh raportin në formë skedarësh .xml është gjysmë pune, tani duhet ta bëjmë atë të lexueshëm për njerëzit. Gjithashtu, rezultatet e tij duhet të përdoren në quality gates - logjikën për të përcaktuar nëse ndryshimi i pranuar kalon ose jo kriteret e cilësisë.

Në këtë na ndihmon Jenkins Warnings NG Plugin, i cili u publikua në janar 2019. Me shfaqjen e tij, shumë plugin të veçantë për të punuar me rezultatet e analizës statike në Jenkins (CheckStyle, FindBugs, PMD etj.) tani janë shënuar si të vjetra (obsolete).

Plugin-i përbëhet nga dy pjesë:

  • mbledhĂ«sit e shumtĂ« tĂ« mesazheve tĂ« analizatorĂ«ve (lista e plotĂ« pĂ«rmban tĂ« gjithĂ« analizatorĂ«t e njohur nga AcuCobol deri te ZPT Lint),
  • njĂ« shikues tĂ« vetĂ«m pĂ«r tĂ« gjithĂ« ata.

Në listën e gjithçkaje që mund të analizojë Warnings NG, janë përfshirë paralajmërimet e kompajlerit Java dhe paralajmërimet nga log-et e ekzekutimit Maven: megjithëse ato janë gjithmonë nën vëzhgim, rrallë analizohen në mënyrë të drejtpërdrejtë. Raportet e IntelliJ IDEA gjithashtu përfshihen në listën e formateve të njohura.

Duke qenë se plugini është i ri, ai fillimisht interakton mirë me Jenkins Pipeline. Hapi i ndërtimit me pjesëmarrjen e tij do të duket si më poshtë (ne thjesht i themi plugin-it se cilin format raporti njohim dhe cilat skedarë duhet të skanohen):

stage ('Analiza statike'){
    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')]
    )
}

ndërfaqja e raportit duket kështu:

Ekzekutojmë inspektime në IntelliJ IDEA në Jenkins

ËshtĂ« e kĂ«ndshme qĂ« ky ndĂ«rfaqe Ă«shtĂ« universale pĂ«r tĂ« gjitha analizat e njohura. Ai pĂ«rmban njĂ« diagram interaktiv tĂ« shpĂ«rndarjes sĂ« gjetjeve sipas kategorive dhe njĂ« grafik tĂ« dinamikĂ«s sĂ« ndryshimeve tĂ« numrit tĂ« gjetjeve. NĂ« gridin nĂ« fund tĂ« faqes, mund tĂ« bĂ«ni njĂ« kĂ«rkim tĂ« shpejtĂ«. E vetmja gjĂ« qĂ« nuk funksionoi siç duhet pĂ«r inspektimet IDEA Ă«shtĂ« mundĂ«sia pĂ«r tĂ« shfletuar kodin direkt nĂ« Jenkins (ndonĂ«se pĂ«r raporte tĂ« tjera, si Checkstyle, ky plugin e bĂ«n kĂ«tĂ« bukur). Duket se Ă«shtĂ« njĂ« defekt i parserit tĂ« raporteve IDEA qĂ« duhet tĂ« rregullohet.

Mes mundĂ«sive tĂ« Warnings NG Ă«shtĂ« mundĂ«sia pĂ«r tĂ« agreguar nĂ« njĂ« raport gjetjet nga burime tĂ« ndryshme dhe pĂ«r tĂ« programuar Quality Gates, pĂ«rfshirĂ« – «xhiruesin» mbi ndĂ«rtimin referues. Disa dokumentacion nĂ« lidhje me programimin e Quality Gates Ă«shtĂ« i disponueshĂ«m kĂ«tu — megjithatĂ«, ai nuk Ă«shtĂ« i plotĂ«, dhe duhet tĂ« shikoni nĂ« burimet e kodit. Nga ana tjetĂ«r, pĂ«r kontroll tĂ« plotĂ« mbi atĂ« qĂ« ndodh, «xhiruesin» mund ta realizoni edhe vetĂ« (shihni postin tim tĂ« mĂ«parshĂ«m nĂ« kĂ«tĂ« temĂ«).

Përfundimi

Para se të filloja të përgatisja këtë material, vendosa të kërkoja: a ka shkruar ndokush tashmë për këtë temë në Habr? Gjeta vetëm intervista e vitit 2017 me lany, ku ai thotë:

Sipas njohurive tĂ« mia, nuk ka integrime me Jenkins ose maven-plugin [
] NĂ« parim, çdo entuziast mund tĂ« lidhte IDEA Community Edition dhe Jenkins, shumĂ« do tĂ« pĂ«rfitonin nga kjo.

ÇfarĂ« do tĂ« themi: pas dy vjetĂ«sh, kemi Warnings NG Plugin, dhe pĂ«rfundimisht kjo miqĂ«si u realizua!

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster