Az IntelliJ IDEA ma a legfejlettebb statikus Java kódelemzővel rendelkezik, amely képességeit tekintve olyan "veteránokat" hagyott maga mögött, mint pl. ellenőrizze a stílust и Spotbugs. Számos "ellenőrzése" ellenőrzi a kódot különböző szempontok szerint, a kódolási stílustól a jellegzetes hibákig.
Amíg azonban az elemzés eredményei csak a fejlesztő helyi IDE-jében jelennek meg, addig nem sok hasznuk van a fejlesztési folyamatnak. Statikus elemzés végre kell hajtani Az építési folyamat első lépéseként annak eredményeinek meg kell határozniuk a minőségi kapukat, és a kivitelezésnek kudarcot kell vallania, ha a minőségi kapuk meghibásodnak. A TeamCity CI köztudottan integrálva van az IDEA-val. De még ha nem is használja a TeamCity-t, akkor is megpróbálhatja futtatni az IDEA vizsgálatokat bármely más CI-kiszolgálón. Azt javaslom, hogy nézzük meg, hogyan lehet ezt megtenni az IDEA Community Edition, a Jenkins és a Warnings NG bővítmény használatával.
1. lépés. Futtassa az elemzést egy tárolóban, és kérjen jelentést
Elsőre kétesnek és nagyon problémásnak tűnhet az ötlet, hogy egy IDE-t (asztali alkalmazást!) futtassunk egy grafikus felülettel nem rendelkező CI-rendszeren belül. Szerencsére az IDEA fejlesztői biztosították a futtatási lehetőséget kód formázás и ellenőrzések a parancssorból. Ráadásul az IDEA ebben a módban történő futtatásához nincs szükség grafikus alrendszerre, és ezeket a feladatokat szöveghéjjal rendelkező szervereken is el lehet végezni.
Az ellenőrzések script segítségével indulnak el bin/inspect.sh az IDEA telepítési könyvtárából. A szükséges paraméterek a következők:
a projekt teljes elérési útja (a rokonok nem támogatottak),
az ellenőrzési beállításokat tartalmazó .xml fájl elérési útja (általában a projekten belül található, az .idea/inspectionProfiles/Project_Default.xml fájlban),
annak a mappának a teljes elérési útja, ahol az elemzési eredményjelentéseket tartalmazó .xml fájlok tárolásra kerülnek.
Emellett várható, hogy
a Java SDK elérési útja az IDE-ben lesz konfigurálva, különben az elemzés nem fog működni. Ezeket a beállításokat a konfigurációs fájl tartalmazza. jdk.table.xml az IDEA globális konfigurációs mappájában. Maga az alapértelmezett globális IDEA konfiguráció a felhasználó saját könyvtárában található, de ez a hely kifejezetten beállítható fájlban idea.properties.
az elemzett projektnek érvényes IDEA projektnek kell lennie, amelyhez néhány, általában figyelmen kívül hagyott fájlt le kell kötni a verziókezelésre, nevezetesen:
.idea/inspectionProfiles/Project_Default.xml — az analizátor beállításai, ezeket nyilvánvalóan a konténerben történő vizsgálatok indításakor fogják használni,
.idea/modules.xml - ellenkező esetben "Ez a projekt nem tartalmaz modulokat" hibaüzenetet kapunk,
.idea/misc.xml - ellenkező esetben "A JDK nincs megfelelően konfigurálva ehhez a projekthez" hibaüzenetet kapunk,
*.iml-файлы - ellenkező esetben hibaüzenetet kapunk a modulban lévő konfigurálatlan JDK-ról.
Bár ezek a fájlok általában benne vannak .gitignore, nem tartalmaznak semmilyen, egy adott fejlesztő környezetére jellemző információt – ellentétben például egy fájllal workspace.xml, ahol ilyen információ, csak, található, és ezért nem szükséges elkötelezni.
A kiút önmagában is azt sugallja, hogy a JDK-t az IDEA Community Edition-nel együtt egy konténerbe kell csomagolni olyan formában, amely készen áll arra, hogy az elemzett projekteken „beállíthassa”. Válasszunk ki egy megfelelő alapkonténert, és itt van a Dockerfile, amit kapunk:
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
Az opció használata idea.config.path az IDEA-val megkerestük a globális konfigurációját a mappában /etc/idea, hiszen a felhasználó saját mappája a munkakörülmények között a CI-ben határozatlan dolog és gyakran teljesen hiányzik.
Így néz ki a tárolóba másolt fájl jdk.table.xml, amely a tárolóba telepített OpenJDK elérési útjait tartalmazza (a saját IDEA beállítási könyvtárában található hasonló fájlon alapulhat):
Mielőtt továbblépnénk, teszteljük az IDEA elemző futtatását a tárolóban:
docker run --rm -v <путь/к/вашему/проекту>:/var/project inponomarev/intellij-idea-analyzer
Az elemzésnek sikeresnek kell lennie, és számos .xml fájlnak kell megjelennie az elemző jelentésekkel a target/idea_inspections almappában.
Most már nem kétséges, hogy az IDEA analizátor önálló módban futtatható bármely CI környezetben, és továbblépünk a második lépésre.
2. lépés Jelenítse meg és elemezze a jelentést
A jelentés .xml formátumú beszerzése fél siker, most már ember által olvashatóvá kell tenni. És az eredményeit a minőségi kapukban is fel kell használni - a logikát annak meghatározására, hogy az elfogadott változtatás a minőségi kritériumok szerint megfelel-e vagy sem.
Ez segíteni fog nekünk Jenkins Warnings NG pluginamely 2019 januárjában jelent meg. Bevezetésével számos külön beépülő modul a Jenkins statikus elemzési eredményeivel való munkavégzéshez (CheckStyle, FindBugs, PMD stb.) elavultként lett megjelölve.
A plugin két részből áll:
számos elemző üzenetgyűjtő (teljes lista tartalmazza a tudomány által ismert összes analizátort, az AcuCoboltól a ZPT Lintig),
egyetlen jelentésnéző mindegyikhez.
A Warnings NG által elemezni tudó dolgok listája tartalmazza a Java fordítói figyelmeztetéseket és a Maven végrehajtási naplókból származó figyelmeztetéseket: bár ezek folyamatosan láthatók, ritkán elemzik őket szándékosan. Az IntelliJ IDEA jelentések is szerepelnek az elismert formátumok listáján.
Mivel a bővítmény új, kezdetben jól működik a Jenkins Pipeline-nal. Az építési lépés az ő részvételével így fog kinézni (csak megmondjuk a bővítménynek, hogy melyik jelentésformátumot ismerjük fel, és mely fájlokat kell vizsgálni):
Kényelmes, hogy ez a felület univerzális minden felismerhető elemző számára. Tartalmazza a leletek kategóriánkénti megoszlásának interaktív diagramját, valamint a leletszám változásának dinamikájának grafikonját. Az oldal alján található rácsban gyors keresést végezhet. Az egyetlen dolog, ami nem működött megfelelően az IDEA ellenőrzéseknél, az volt, hogy közvetlenül a Jenkinsben lehetett böngészni a kódot (bár más jelentéseknél, például a Checkstyle-nál ez a beépülő modul gyönyörűen meg tudja csinálni). Úgy tűnik, hogy ez az IDEA jelentéselemző hibája, amelyet javítani kell.
A Warnings NG szolgáltatásai közé tartozik az a képesség, hogy a különböző forrásokból származó eredményeket egyetlen jelentésben összesítsék, és minőségi kapukat programozzák, beleértve a referencia-összeállításhoz szükséges „racsnis”-t is. Néhány Quality Gates programozási dokumentáció elérhető itt - azonban nem teljes, és meg kell nézni a forrást. Másrészt a történések teljes ellenőrzéséhez a „racsnis” önállóan is megvalósítható (lásd a előző poszt erről a témáról).
Következtetés
Mielőtt elkezdtem volna elkészíteni ezt az anyagot, úgy döntöttem, megnézem: írt már valaki ebben a témában a Habrén? csak találtam interjú 2017 с Lanyahol ez áll:
Amennyire én tudom, nincs integráció a Jenkins-szel vagy egy maven pluginnal [...] Elvileg minden rajongó barátságot köthetne az IDEA Community Edition-szel és a Jenkins-szel, sokaknak csak haszna származna ebből.
Nos, két év után megvan a Warnings NG Plugin, és végre ez a barátság valóra vált!