Nisja e inspektimeve të IntelliJ IDEA në Jenkins

IntelliJ IDEA aktualisht ka analizuesin mĂ« tĂ« avancuar tĂ« kodit Java, duke lĂ«nĂ« pas „veteranĂ«t“ si Checkstyle dhe Spotbugs. Inspektimet e saj tĂ« shumta kontrollojnĂ« kodin nĂ« aspekte tĂ« ndryshme, nga stili i kodimit deri te defekte karakteristike.

Megjithatë, deri më tani rezultatet e analizës shfaqen vetëm në interfacin lokal 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 linjës së ndërtimit, rezultatet e saj duhet të përcaktojnë quality gates, dhe ndërtimi duhet të dështohet nëse quality gates nuk kalohen. Dihet se TeamCity CI është integruar me IDEA. Por edhe nëse nuk po përdorni TeamCity, mund të provoni të ekzekutoni inspektime IDEA në çdo server tjetër CI. Ju sugjeroj të shihni se si mund ta bëni këtë duke përdorur IDEA Community Edition, Jenkins dhe plugin-in Warnings NG.

Hapi 1. Nisni analizën në konteiner dhe merrni raportin

Fillimi i një IDE (aplikacioni desktop!) brenda një sistemi CI që nuk ka një ndërfaqe grafike mund të duket i dyshimtë dhe shumë i mundimshëm. Fatmirësisht, zhvilluesit e IDEA ofruan mundësinë për të ekzekutuar formatimin e kodit dhe inspektimet nga linja e komandës. Sigurisht, për të nisur IDEA në këtë mod, nuk kërkohet një nënstrukturë grafike dhe këto detyra mund të kryhen në servera me ndërfaqe tekstuale.

Nisja e inspektimeve bëhet përmes skenarit bin/inspect.sh nga direktoria instalimit të IDEA. Si parametrohen kërkohen:

  • rruga e plotĂ« drejt projektit (nuk pĂ«rkrahen rrugĂ«t relative),
  • rruga drejt skedarit .xml me cilĂ«simet e inspektimeve (zakonisht ndodhet brenda projektit nĂ« .idea/inspectionProfiles/Project_Default.xml),
  • rruga e plotĂ« drejt dosjes ku do tĂ« ruhen skedarĂ«t .xml me raportet mbi rezultatet e analizĂ«s.

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

  • nĂ« IDE tĂ« jetĂ« e konfiguruar rruga drejt Java SDK, pĂ«rndryshe analiza nuk do tĂ« funksionojĂ«. KĂ«to cilĂ«sime gjenden nĂ« skedarin e konfigurimit jdk.table.xml nĂ« dosjen e konfigurimit global tĂ« IDEA. Konfigurimi global i IDEA nĂ« pĂ«rgjithĂ«si ndodhet nĂ« dosjen e shtĂ«pisĂ« tĂ« pĂ«rdoruesit, por ky vendndodhje mund tĂ« pĂ«rcaktohet qartĂ« nĂ« skedarin idea.properties.
  • projekti i analizuar duhet tĂ« jetĂ« njĂ« projekt valid IDEA, pĂ«r tĂ« cilin nĂ« kontrollin e versioneve do tĂ« duhen tĂ« komitohen disa skedarĂ«, tĂ« cilĂ«t zakonisht injorohen, domethĂ«nĂ«:
    • .idea/inspectionProfiles/Project_Default.xml — konfigurimet e analizĂ«s, 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 module’,
    • .idea/misc.xml — pĂ«rndryshe do tĂ« marrim gabimin ‘JDK nuk Ă«shtĂ« konfiguruar siç duhet pĂ«r kĂ«tĂ« projekt’,
    • *.iml-skedarĂ«t — pĂ«rndryshe do tĂ« marrim gabimin pĂ«r JDK tĂ« papĂ«rshtatshme nĂ« modul.

MegjithatĂ«, zakonisht kĂ«ta skedarĂ« pĂ«rfshijnĂ« nĂ« .gitignore, ata nuk pĂ«rmbajnĂ« asnjĂ« informacion specifik pĂ«r mjedisin e zhvilluesit konkret — pĂ«rkundrazi, pĂ«r shembull, skedari workspace.xml, ku informacioni siç Ă«shtĂ« ky, vendoset, dhe prandaj nuk duhet ta angazhojmĂ« atĂ«.

Vjen vetvetiu që të paketojmë JDK së bashku me IDEA Community Edition në kontejner në një format, gati për "të dhënë" për projektet e analizuar. Do të zgjedhim një kontejner bazë të përshtatshëm, dhe kështu do të kemi Dockerfile-in:

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

Me opsionin idea.config.path ne bĂ«mĂ« qĂ« IDEA tĂ« kĂ«rkojĂ« konfigurimin e saj global nĂ« dosjen /etc/idea, sepse dosja nĂ« shtĂ«pi e pĂ«rdoruesit nĂ« kushte tĂ« punĂ«s nĂ« CI — Ă«shtĂ« njĂ« çështje e paqartĂ« dhe shpeshçantĂ« mungon krejtĂ«sisht.

Kështu duket skedari i kopjuar në kontejner jdk.table.xml, në të cilin janë shënuar rrugët për OpenJDK, e instaluar brenda kontejnerit (mund të merret si bazë një skedar i ngjashëm nga direktoria juaj e konfiguratave IDEA):

jdk.table.xml

Imazhi në formë të gatshme është në dispozicion në Docker Hub.

Para se të vazhdojmë, le të verifikojmë nisjen e analizatorit IDEA në kontenier:

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

Analiza duhej të përfundonte me sukses, dhe nënfolderi target/idea_inspections duhet të ketë shumë skedarë .xml me raportet e analizatorit.

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

Hapi 2. Shfaqim dhe analizojmë raportin

TĂ« marresh raportin nĂ« format .xml Ă«shtĂ« vetĂ«m gjysma e punĂ«s, tani duhet ta bĂ«sh atĂ« tĂ« lexueshĂ«m pĂ«r njerĂ«zit. Po ashtu, rezultatet e tij duhet tĂ« pĂ«rdoren nĂ« quality gates — logjikĂ«n e pĂ«rcaktimit nĂ«se ndryshimi i pranuar kalon apo jo sipas kritereve tĂ« cilĂ«sisĂ«.

Në këtë na ndihmon Jenkins Warnings NG Plugin, i cili u publikua në janar 2019. Me shfaqjen e tij, shumë plugins të veçanta për punën me rezultatet e analizave statike në Jenkins (CheckStyle, FindBugs, PMD etj.) tani shënohen si të dështuara (obsolete).

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

  • marrĂ«s tĂ« shumtĂ« tĂ« mesazheve nga analizatorĂ«t (lista e plotĂ« pĂ«rfshin tĂ« gjithĂ« analizatorĂ«t e njohur nga AcuCobol deri nĂ« ZPT Lint),
  • njĂ« shikues tĂ« vetĂ«m pĂ«r tĂ« gjithĂ« ata.

Në listën e asaj që di të analizojë Warnings NG, përfshihen edhe paralajmërimet e kompajlerit Java dhe paralajmërimet nga log-et e ekzekutimit të Maven: megjithëse ato janë vazhdimisht në vëmendje, ato rrallë analizohen me qëllim. Raportet e IntelliJ IDEA gjithashtu janë pjesë e formateve të njohura.

Duke qenë se plugin-i është i ri, ai fillimisht ndërvepron mirë me Jenkins Pipeline. Hapi i ndërtimit me pjesëmarrjen e tij do të duket kështu (ne thjesht i themi plugin-it se cili është formati i raportit që njohim dhe cilat skedarë duhet të skanohen):

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

Interfeisi i raportit duket kështu:

Nisja e inspektimeve të IntelliJ IDEA në Jenkins

ËshtĂ« komod qĂ« ky interfejs Ă«shtĂ« universal pĂ«r tĂ« gjithĂ« analizatorĂ«t e njohur. Ai pĂ«rmban njĂ« diagram interaktiv tĂ« shpĂ«rndarjes sĂ« gjetjeve sipas kategorive dhe njĂ« grafik tĂ« dinamikĂ«s sĂ« ndryshimit tĂ« numrit tĂ« gjetjeve. NĂ« grilĂ«n nĂ« fund tĂ« faqes mund tĂ« bĂ«het kĂ«rkesa e shpejtĂ«. E vetmja gjĂ« qĂ« pĂ«r inspektimet IDEA nuk funksionoi siç duhet — mundĂ«sia pĂ«r tĂ« shfletuar kodin direkt nĂ« Jenkins (edhe pse pĂ«r raportet e tjera, siç Ă«shtĂ« Checkstyle, ky plugin di ta bĂ«jĂ« kĂ«tĂ« bukur). Duket se Ă«shtĂ« njĂ« gabim i parser-it tĂ« raporteve IDEA qĂ« duhej tĂ« rregullohej.

Mes mundësive të Warnings NG është mundësia për të agreguar gjetjet nga burime të ndryshme në një raport dhe për të programuar Quality Gates, përfshirë "rrotën" sipas ndërtimit referent. Disa dokumentacion për programimin e Quality Gates është në dispozicion. këtu Megjithatë, ajo nuk është e plotë, dhe duhet të shikojmë në burime. Nga ana tjetër, për një kontroll të plotë mbi atë që ndodh, "ratchet" mund të realizohet edhe vetë (shih postimin tim të mëparshëm në këtë temë).

Përfundim

Para se të filloja përgatitjen e këtij materiali, vendosa të kërkoja: a kishte shkruar ndokush tashmë në këtë temë në Habra? Gjeta vetëm një intervistë nga viti 2017 me lany, ku ai thotë:

Sa di unĂ«, nuk ka integrime me Jenkins ose njĂ« maven-plugin [
] NĂ« parim, çdo entuziast mund tĂ« lidhĂ« IDEA Community Edition me Jenkins, shumĂ« do tĂ« pĂ«rfitonin nga kjo.

ÇfarĂ« shohim: pas dy vitesh kemi Warnings NG Plugin, dhe mĂ« nĂ« fund kjo miqĂ«si u realizua!

Burimi: habr.com

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