IntelliJ IDEA aktualisht ka analizuesin mĂ« tĂ« avancuar tĂ« kodit Java, duke lĂ«nĂ« pas âveteranĂ«tâ si dhe . 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 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 dhe 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.xmlnë 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 në skedarinidea.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 -v2Me 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 .
Para se të vazhdojmë, le të verifikojmë nisjen e analizatorit IDEA në kontenier:
docker run --rm -v :/var/project inponomarev/intellij-idea-analyzerAnaliza 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 , 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 ( 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:

Ă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. 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 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 me , 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
