IntelliJ IDEA ellenőrzések indítása Jenkins-en

Az IntelliJ IDEA ma a legfejlettebb Java kód statikus elemzővel rendelkezik, amely képességeivel messze maga mögött hagyja az olyan „öreg motorosokat”, mint Checkstyle és Spotbugs. Számos „ellenőrzése” különböző szempontok szerint vizsgálja a kódot, a kódolási stílustól kezdve a tipikus hibákig.

Mindazonáltal, mivel az elemzési eredmények jelenleg csak a fejlesztő IDE helyi felületén jelennek meg, alig van hasznuk a fejlesztési folyamat során. A statikus elemzést első lépésként kell végezni , az eredményeknek minőségi kapukat kell meghatározniuk, és a fordításnak el kell döcögnie, ha a minőségi kapuk nem teljesülnek. Ismert, hogy a TeamCity CI integrálva van az IDE-vel. De még ha nem is használ TeamCity-t, a vizsgálatokat bármilyen más CI szerveren futtathatja. Javaslom, nézzük meg, hogyan lehet ezt megtenni az IDEA Community Edition, a Jenkins és a Warnings NG plugin segítségével.

1. lépés: Elemzés indítása a tartályban és riport beszerzése

Első ránézésre furcsának és nagyon macerásnak tűnhet az IDE (asztali alkalmazás!) CI rendszeren belüli futtatása, amelynek nincs grafikus felülete. Szerencsére az IDEA fejlesztői lehetőséget biztosítottak a kódformázás és ellenőrzések parancssorból való futtatására. Ráadásul az IDEA ilyen üzemmódban történő futtatásához nem szükséges grafikus alrendszer, és ezeket a feladatokat szöveges kezelőfelületű szervereken is el lehet végezni.

Az ellenőrzések indítása a bin/inspect.sh scripts segítségével történik az IDEA telepítési könyvtárából. Paraméterként szükséges:

  • a projekt teljes elérési útja (a relatív nem támogatott),
  • az ellenőrzések beállításait tartalmazó .xml fájl elérési útja (általában a projektben található a .idea/inspectionProfiles/Project_Default.xml alatt),
  • a teljes elérési útja annak a mappának, ahová az elemzés eredményéről szóló .xml fájlokat kell elhelyezni.

Ezenkívül várakozunk, hogy

  • az IDE-ben a Java SDK elérési útja be legyen állítva, különben az elemzés nem fog működni. Ezek a beállítások a jdk.table.xml konfigurációs fájlban találhatók az IDEA globális konfigurációs mappájában. Az IDEA globális konfigurációja alapértelmezés szerint a felhasználó otthoni könyvtárában található, de ez a hely meghatározható az idea.properties-szel. a fájlban Az elemezett projektnek érvényes IDEA projektnek kell lennie, ezért a verziókezelés során el kell kötelezni néhány fájlt, amelyeket általában figyelmen kívül hagynak, nevezetesen:.
  • .idea/inspectionProfiles/Project_Default.xml
    • .idea/inspectionProfiles/Project_Default.xml — az elemző beállításai, ezek egyértelműen fel lesznek használva a konténerben végzett ellenőrzések indításakor,
    • .idea/modules.xml — különben ‘Ez a projekt nem tartalmaz modulokat’ hibaüzenetet kapunk,
    • .idea/misc.xml — különben ‘A JDK nincs megfelelően beállítva ehhez a projekthez’ hibaüzenetet kapunk,
    • *.iml fájlok — különben hibaüzenetet kapunk, amely a modulban nem beállított JDK-ra vonatkozik.

Bár ezek a fájlok általában tartalmazzák .gitignore, nem tartalmaznak semmilyen a konkrét fejlesztői környezetre vonatkozó specifikus információt — ellentétben például a workspace.xml, ahol ilyen információk szerepelnek, és ezért azt nem kellene elkötelezni.

Természetesen adódik a lehetőség, hogy a JDK-t a IDEA Community Edition-nel együtt csomagoljuk a konténerbe, amely készen áll a vizsgálandó projektek „felnyomására”. Válasszunk ki egy megfelelő alap konténert, és így fog kinézni a Dockerfile:

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

A idea.config.path opció segítségével arra kényszerítettük az IDEA-t, hogy a globális konfigurációt a /etc/idea, mivel a felhasználó otthoni könyvtára a CI környezetében bizonytalan dolog, és gyakran teljesen hiányzik.

Így néz ki a konténerbe másolt fájl, jdk.table.xml, amely tartalmazza az OpenJDK-hoz vezető útvonalakat, amelyek a konténeren belül vannak telepítve (az alapot egy hasonló fájl képezheti a saját IDEA beállítási könyvtáradból):

jdk.table.xml

Kész kép elérhető a Docker Hub-on.

Mielőtt továbblépnénk, ellenőrizzük, hogy az IDEA elemző fut-e a konténerben:

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

Az elemzésnek sikeresen le kell futnia, és a target/idea_inspections almappában számos .xml fájl készül az elemző jelentéseivel.

Most már nincs kétség afelől, hogy az IDEA elemző offline üzemmódban is futtatható bármilyen CI környezetben, és áttérünk a második lépésre.

2. lépés. A jelentés megjelenítése és elemzése

A jelentés megszerzése .xml fájl formátumban fél munka, most emberi olvasásra is alkalmassá kell tenni. Továbbá az eredményeit fel kell használni a quality gates logikájában, amely meghatározza, hogy a bevezetett változtatás megfelel-e a minőségi kritériumoknak vagy sem.

Ebben segít nekünk Jenkins Warnings NG Plugin, amelynek kiadása 2019 januárjában történt. Megjelenésével sok különálló Jenkins plugin a statikus analízis eredményeivel kapcsolatban (CheckStyle, FindBugs, PMD stb.) most elavultnak (obsolete) minősül.

A plugin két részből áll:

  • a különböző analízis gyűjtők közül (Apache Kafka klaszterre; melyek tartalmazzák az összes tudományos elemzőt az AcuCoboltól a ZPT Lintig),
  • és az ezekhez tartozó egységes jelentésmegjelenítőről.

A Warnings NG analizáló lista tartalmazza a Java fordító figyelmeztetéseit és a Maven végrehajtási naplókból származó figyelmeztetéseket: noha ezek folyamatosan szem előtt vannak, ritkán elemzik őket célzottan. Az IntelliJ IDEA jelentések szintén szerepelnek a támogatható formátumok között.

Mivel a plugin új, jól működik a Jenkins Pipeline-lal. A benne részt vevő build szakasz a következőképpen fog kinézni (egyszerűen csak megmondjuk a pluginnek, hogy mely jelentésformátumokat ismerjük fel, és mely fájlokat kell áttekinteni):

stage ('Statikus elemzés'){
    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')]
    )
}

A jelentés felülete így néz ki:

IntelliJ IDEA ellenőrzések indítása Jenkins-en

Kellemes, hogy ez az interfész univerzális minden támogatott elemző számára. Tartalmaz egy interaktív diagramot a kategóriákba sorolt megállapítások eloszlásáról és egy grafikont a megállapítások számának változásáról. Az oldal alján levő gridben gyors keresést lehet végezni. Az egyetlen dolog, ami nem működött megfelelően az IDEA ellenőrzéseknél, az a lehetőség, hogy közvetlenül a kódböngészés a Jenkinsben (bár más jelentéseknél, például a Checkstyle-nál, ez a plugin szépen meg tudja csinálni). Úgy tűnik, ez egy hiba az IDEA jelentések parserében, amit javítani kell.

A Warnings NG lehetőségei közé tartozik, hogy egy jelentésben aggregálhatók a különböző forrásokból származó megállapítások, valamint a Quality Gates programozása, beleértve a "kapcsoló órát" a referencia build alapján. Néhány dokumentáció a Quality Gates programozásáról elérhető. itt — azonban ez nem teljes, és néha a forrásokhoz kell fordulni. Másrészt a folyamat teljes ellenőrzéséhez a „ratchet” megoldást saját magunk is megvalósíthatjuk (lásd az én előző posztom erről a témáról).

Zárás

Mielőtt elkezdtem volna ezt az anyagot összegyűjteni, kerestem, hogy írt-e már valaki erről a témáról a Habr-nál? Csak a 2017-es interjúra bukkantam a lany, ahol azt mondja:

Tudomásom szerint nincs integráció Jenkins-szel vagy maven pluginnel […] Gyakorlatilag bármelyik lelkes amatőr összeboronálhatná az IDEA Community Edition-t és a Jenkins-t, sokan csak nyernének ebből.

Mi történt: két év elteltével megvan a Warnings NG Plugin, és végre megtörtént ez a barátság!

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster