Tha an anailis còd Java statach as adhartaiche aig IntelliJ IDEA an-diugh, a tha, a thaobh a chomasan, air fhĂ gail fada air dheireadh air na âseann shaighdearanâ mar и . Bidh na âsgrĂšdaidheanâ iomadach aige aâ sgrĂšdadh aâ chòd ann an diofar thaobhan, bho stoidhle còdaidh gu bugaichean caractar.
Ach, fhad's a tha toraidhean an sgrĂšdaidh air an taisbeanadh a-mhĂ in ann an IDE ionadail an leasaiche, chan eil iad gu mòran feum don phròiseas leasachaidh. Mion-sgrĂšdadh Statach mar aâ chiad cheum den loidhne-phĂŹoban togail, feumaidh na toraidhean aige na geataichean cĂ ileachd a dhearbhadh, agus feumaidh an togail fĂ iligeadh ma dhâ fhailicheas na geataichean cĂ ileachd. Tha fios gu bheil TeamCity CI ceangailte ri IDEA. Ach eadhon mura h-eil thu aâ cleachdadh TeamCity, faodaidh tu fhathast feuchainn ri sgrĂšdaidhean IDEA a ruith air frithealaiche CI sam bith eile. Tha mi aâ moladh faicinn mar a ghabhas seo a dhèanamh aâ cleachdadh IDEA Community Edition, Jenkins agus Warnings NG plugan.
Ceum 1. Run an anailis ann an container agus faigh aithisg
An toiseach, is dòcha gu bheil am beachd a bhith aâ ruith IDE (tagradh deasg!) Taobh a-staigh siostam CI aig nach eil eadar-aghaidh grafaigeach a âcoimhead amharasach agus gu math trioblaideach. Gu fortanach, tha luchd-leasachaidh IDEA air comas ruith a thoirt seachad и bhon loidhne-Ă ithne. A bharrachd air an sin, gus IDEA a ruith sa mhodh seo, chan eil feum air fo-shiostam grafaigeach, agus faodar na gnĂŹomhan sin a choileanadh air frithealaichean le slige teacsa.
Thèid sgrĂšdaidhean a chuir air bhog aâ cleachdadh sgriobt bin/inspect.sh bhon chlĂ r stĂ laidh IDEA. Is iad na paramadairean a tha a dhĂŹth:
- slighe slà n chun phròiseact (chan eil taic aig feadhainn cà irdeach),
- slighe chun fhaidhle .xml le roghainnean sgrĂšdaidh (mar as trice suidhichte taobh a-staigh aâ phròiseict ann an .idea/inspectionProfiles/Project_Default.xml),
- slighe slà n chun phasgan far am bi faidhlichean .xml le aithisgean toraidhean anailis air an stòradh.
A bharrachd air an sin, thathar an dĂšil gum bi
- thèid an t-slighe gu Java SDK a rèiteachadh san IDE, air neo cha obraich am mion-sgrÚdadh. Tha na roghainnean sin anns an fhaidhle rèiteachaidh.
jdk.table.xmlann am pasgan rèiteachaidh cruinne IDEA. Tha an rèiteachadh bunaiteach IDEA cruinneil fhèin ann an eòlaire dachaigh an neach-cleachdaidh, ach an t-à ite seo ann am faidhleidea.properties. - feumaidh am pròiseact sgrÚdaichte a bhith na phròiseact IDEA dligheach, airson am feum cuid de na faidhlichean nach tèid an leigeil seachad a bhith dealasach a thaobh smachd dreach, is iad sin:
.idea/inspectionProfiles/Project_Default.xml- suidheachaidhean anailisiche, tha e follaiseach gun tèid an cleachdadh nuair a thèid sgrĂšdaidhean a chuir air bhog ann an soitheach,.idea/modules.xml- air neo gheibh sinn aâ mhearachd âChan eil modalan sa phròiseact seoâ,.idea/misc.xml- air neo gheibh sinn aâ mhearachd âChan eil an JDK air a rèiteachadh ceart airson aâ phròiseict seoâ,*.iml-ŃаКНŃ- air neo gheibh sinn mearachd mu JDK neo-ullaichte sa mhodal.
Ged a tha na faidhlichean sin mar as trice air an toirt a-steach .gitignore, chan eil fiosrachadh sam bith ann a tha sònraichte do à rainneachd leasaiche sònraichte - eu-coltach ri, mar eisimpleir, faidhle workspace.xml, far a bheil am fiosrachadh sin, dÏreach, air a ghabhail a-steach, agus mar sin nach eil feum air a ghealltainn.
Leis fhèin, tha an t-slighe a-mach ga mholadh fhèin a bhith aâ pacadh an JDK còmhla ri IDEA Community Edition ann an soitheach ann an cruth deiseil airson a bhith âair a shuidheachadhâ air na pròiseactan sgrĂšdaichte. Taghamaid soitheach bunaiteach iomchaidh, agus seo an Dockerfile a gheibh sinn:
Faidhle docker
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 -v2A 'cleachdadh an roghainn idea.config.path thug sinn air IDEA coimhead airson a rèiteachadh cruinneil sa phasgan /etc/idea, leis gu bheil pasgan dachaigh an neach-cleachdaidh anns na suidheachaidhean obrach ann an CI na rud neo-chinnteach agus gu tric gu tur à s-là thair.
Seo mar a tha am faidhle a chaidh a chopaigeadh chun t-soithich coltach jdk.table.xml, anns a bheil na slighean chun an OpenJDK a chaidh a chuir a-steach am broinn an t-soithich (faodaidh e a bhith stèidhichte air faidhle coltach ris bhon eòlaire roghainnean IDEA agad fhèin):
jdk.clĂ r.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>Dealbh crĂŹochnaichte .
Mus gluais sinn air adhart, dèanamaid deuchainn air ruith am parser IDEA anns aâ ghobhar:
docker run --rm -v <ĐżŃŃŃ/Đş/ваŃоПŃ/ĐżŃОокŃŃ>:/var/project inponomarev/intellij-idea-analyzerBu chòir don anailis obrachadh gu soirbheachail, agus bu chòir grunn fhaidhlichean .xml le aithisgean anailisiche nochdadh anns an fho-phasgan targaid/idea_inspections.
A-nis chan eil teagamh sam bith gum faodar an anailisiche IDEA a ruith ann am modh leis fhèin ann an à rainneachd CI sam bith, agus gluaisidh sinn air adhart chun dà rna ceum.
Ceum 2. Taisbeanadh agus mion-sgrĂšdadh air an aithisg
Is e leth a 'bhlĂ ir a bhith a' faighinn aithisg ann an cruth faidhlichean .xml, a-nis feumaidh e a bhith air a leughadh le daoine. Agus cuideachd bu chòir na toraidhean aige a chleachdadh ann an geataichean cĂ ileachd - an loidsig airson a bhith aâ dearbhadh a bheil an t-atharrachadh ris an deach gabhail seachad no nach eil aâ dol seachad a rèir slatan-tomhais cĂ ileachd.
Cuidichidh seo sinn a chaidh fhoillseachadh san Fhaoilleach 2019. Leis an ro-rà dh aige, tha mòran plug-ins fa leth airson a bhith ag obair le toraidhean mion-sgrÚdadh statach ann an Jenkins (CheckStyle, FindBugs, PMD, msaa) a-nis air an comharrachadh mar a dhol à bith.
Tha dĂ phĂ irt anns aâ plugan:
- grunn luchd-cruinneachaidh teachdaireachd anailisiche ( aâ toirt a-steach a h-uile anailisiche a tha aithnichte do shaidheans bho AcuCobol gu ZPT Lint),
- aon neach-coimhead aithisg dhaibh uile.
Tha an liosta de rudan a dhâ fhaodas Rabhaidh NG a pharsadh aâ toirt a-steach rabhaidhean cruinneachaidh Java agus rabhaidhean bho logaichean cur gu bĂ s Maven: ged a tha iad an-còmhnaidh ann an sealladh, is ann ainneamh a thèid an sgrĂšdadh a dhâaona ghnothach. Tha aithisgean IntelliJ IDEA cuideachd air an toirt a-steach don liosta de chruthan aithnichte.
Leis gu bheil am plugan Ăšr, bidh e ag eadar-obrachadh gu math an toiseach le Jenkins Pipeline. Bidh an ceum togail le a chom-pĂ irteachadh aâ coimhead mar seo (bidh sinn dĂŹreach ag innse don plugan dè an cruth aithris a tha sinn ag aithneachadh agus dè na faidhlichean a bu chòir a sganadh):
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')]
)
}Tha eadar-aghaidh na h-aithisg aâ coimhead mar seo:

Tha e goireasach gu bheil an eadar-aghaidh seo uile-choitcheann airson a h-uile parsair aithnichte. Tha clĂ r eadar-ghnĂŹomhach ann de chuairteachadh lorgaidhean a rèir gnè agus graf de dhianamics nan atharrachaidhean anns an Ă ireamh de lorgan. Anns a 'ghriod aig bonn na duilleige, faodaidh tu rannsachadh luath a dhèanamh. B 'e an aon rud nach do dh'obraich gu ceart airson sgrĂšdaidhean IDEA an comas a bhith a' brobhsadh a 'chòd gu dĂŹreach ann an Jenkins (ged a tha e airson aithisgean eile, leithid Checkstyle, faodaidh am plugan seo a dhèanamh gu h-Ă lainn). Tha e coltach gur e buga a thâ ann am parser aithisg IDEA a dhâ fheumar a chĂ radh.
Am measg nam feartan aig Warnings NG tha an comas co-dhĂšnaidhean bho dhiofar thĂšsan a chruinneachadh ann an aon aithisg agus prògram Quality Gates, aâ toirt a-steach ratchet airson co-chruinneachadh fiosrachaidh. Tha cuid de sgrĂŹobhainnean prògramadh Quality Gates rim faighinn - ge-tĂ , chan eil e coileanta, agus feumaidh tu coimhead air an stòr. Air an lĂ imh eile, airson smachd iomlan air na tha aâ tachairt, faodar an âratchetâ a chuir an gnĂŹomh gu neo-eisimeileach (faic mo mun chuspair seo).
co-dhĂšnadh
Mus do thòisich mi ag ullachadh an stuth seo, chuir mi romhpa coimhead: a bheil duine air sgrĂŹobhadh mu thrĂ th air a 'chuspair seo air HabrĂŠ? Cha do lorg mi ach Ń far a bheil e ag rĂ dh:
Cho fad 's as aithne dhomh, chan eil amalachadh le Jenkins no plugan maven [...] Ann am prionnsabal, dh'fhaodadh neach-dealasach sam bith caraidean IDEA Community Edition agus Jenkins a dhèanamh, cha bhiodh mòran a 'faighinn buannachd ach às an seo.
Uill, Ă s deidh dĂ bhliadhna tha an Warnings NG Plugin againn, agus mu dheireadh tha an cĂ irdeas seo air tighinn gu buil!
Source: www.habr.com
