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 Stoidhle seic и Spotbugs. 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 feumar a dhèanamh 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 cruth còd и sgrùdaidhean 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.xml ann 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 faodar a shuidheachadh gu soilleir ann am faidhle idea.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 -v2
A '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):
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-analyzer
Bu 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 Rabhaidhean Jenkins NG Plugina 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 (làn liosta 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):
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 an seo - 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 post roimhe 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 agallamh 2017 с lanaidhfar 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!