ИнтеллиЈ ИДЕА данас има најнапреднији статички Јава анализатор кода, који у својим могућностима оставља далеко иза себе такве „ветеране“ као што су Цхецкстиле и Спотбугс. Његове бројне „инспекције“ проверавају код у различитим аспектима, од стила кодирања до типичних грешака.
Међутим, све док се резултати анализе приказују само у локалном интерфејсу развојног ИДЕ-а, они су од мале користи за развојни процес. Статичка анализа мора бити испуњен Као први корак у процесу изградње, његови резултати би требало да дефинишу капије квалитета, а изградња би требало да пропадне ако се не прођу капије квалитета. Познато је да је ТеамЦити ЦИ интегрисан са ИДЕА-ом. Али чак и ако не користите ТеамЦити, можете лако покушати да покренете ИДЕА инспекције на било ком другом ЦИ серверу. Предлажем да видите како се то може урадити користећи ИДЕА Цоммунити Едитион, Јенкинс и Варнингс НГ додатак.
Корак 1. Покрените анализу у контејнеру и добијте извештај
У почетку, идеја о покретању ИДЕ (десктоп апликације!) унутар ЦИ система који нема графички интерфејс може изгледати сумњиво и веома проблематично. На срећу, ИДЕА програмери су обезбедили могућност покретања форматирање кода и инспекције из командне линије. Штавише, за покретање ИДЕА-е у овом режиму није потребан графички подсистем и ови задаци се могу обављати на серверима са текстуалном шкољком.
Инспекције се покрећу помоћу скрипте bin/inspect.sh из ИДЕА инсталационог директоријума. Потребни параметри су:
пун пут до пројекта (релативни нису подржани),
путања до .кмл датотеке са подешавањима инспекције (обично се налази унутар пројекта у .идеа/инспецтионПрофилес/Пројецт_Дефаулт.кмл),
пуна путања до фасцикле у којој ће се чувати .кмл фајлови са извештајима о резултатима анализе.
Осим тога, очекује се да
путања до Јава СДК-а ће бити конфигурисана у ИДЕ-у, иначе анализа неће радити. Ова подешавања се налазе у конфигурационој датотеци jdk.table.xml у ИДЕА глобалној конфигурационој фасцикли. Сама глобална конфигурација ИДЕА се подразумевано налази у кућном директоријуму корисника, али ова локација може се експлицитно навести у фајлу idea.properties.
пројекат који се анализира мора бити важећи ИДЕА пројекат, за који ћете морати да урезујете неке датотеке које се обично игноришу у контроли верзија, и то:
.idea/inspectionProfiles/Project_Default.xml — подешавања анализатора, они ће се очигледно користити приликом обављања инспекција у контејнеру,
.idea/modules.xml - у супротном ћемо добити грешку 'Овај пројекат не садржи модуле',
.idea/misc.xml - у супротном ћемо добити грешку „ЈДК није правилно конфигурисан за овај пројекат“,
*.iml-файлы — иначе ћемо добити грешку о неконфигурисаном ЈДК-у у модулу.
Иако су ове датотеке обично укључене у .gitignore, не садрже никакве информације специфичне за окружење одређеног програмера - за разлику од, на пример, датотеке workspace.xml, где су такве информације садржане, па стога нема потребе да се то обавеже.
Очигледно решење је да се ЈДК заједно са ИДЕА Цоммунити Едитион-ом упакује у контејнер у облику спремном за „убацивање“ у анализиране пројекте. Хајде да изаберемо одговарајући основни контејнер, а ово ће бити наш Доцкерфиле:
Доцкерфиле
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
Користећи опцију idea.config.path натерали смо ИДЕА-у да потражи своју глобалну конфигурацију у фасцикли /etc/idea, јер је кућна фасцикла корисника када ради у ЦИ неизвесна ствар и често потпуно одсутна.
Овако изгледа датотека копирана у контејнер: jdk.table.xml, који садржи путање до ОпенЈДК инсталираног унутар контејнера (за основу се може узети сличан фајл из вашег сопственог директоријума са ИДЕА поставкама):
Пре него што наставимо, хајде да проверимо да ли ИДЕА анализатор ради у контејнеру:
docker run --rm -v <путь/к/вашему/проекту>:/var/project inponomarev/intellij-idea-analyzer
Анализа би требало да се покрене успешно, а бројне .кмл датотеке са извештајима анализатора треба да се појаве у поддиректоријуму таргет/идеа_инспецтионс.
Сада више нема сумње да ИДЕА анализатор може да се покреће самостално у било ком ЦИ окружењу, и прелазимо на други корак.
Корак 2. Прикажите и анализирајте извештај
Добијање извештаја у облику .кмл датотека је пола битке; сада морате да га учините читљивим за људе. И такође, њени резултати треба да се користе у капијама квалитета – логици за утврђивање да ли прихваћена промена пролази или не успева према критеријумима квалитета.
Ово ће нам помоћи Јенкинс Варнингс НГ додатак, који је објављен у јануару 2019. Са његовом појавом, многи појединачни додаци за рад са резултатима статичке анализе у Џенкинсу (ЦхецкСтиле, ФиндБугс, ПМД, итд.) су сада означени као застарели.
Додатак се састоји од два дела:
бројни сакупљачи порука анализатора (Комплетна листа укључује све анализаторе познате науци од АцуЦобола до ЗПТ Линт),
један прегледач извештаја за све њих.
Листа ствари које Варнингс НГ може да анализира укључује упозорења из Јава компајлера и упозорења из Мавен дневника извршавања: иако су стално видљива, ретко се посебно анализирају. ИнтеллиЈ ИДЕА извештаји су такође укључени у листу признатих формата.
Пошто је додатак нов, у почетку добро сарађује са Јенкинс Пипелине-ом. Корак израде са његовим учешћем ће изгледати овако (једноставно кажемо додатку који формат извештаја препознајемо и које датотеке треба скенирати):
Погодно, овај интерфејс је универзалан за све признате анализаторе. Садржи интерактивни дијаграм дистрибуције налаза по категоријама и графикон динамике промене броја налаза. Можете извршити брзу претрагу у мрежи на дну странице. Једина ствар која није функционисала исправно за ИДЕА инспекције била је могућност да се код директно прегледа у Џенкинсу (иако за друге извештаје, на пример Цхецкстиле, овај додатак то може лепо да уради). Изгледа да је ово грешка у ИДЕА анализатору извештаја коју треба поправити.
Међу карактеристикама Варнингс НГ је и могућност обједињавања налаза из различитих извора у једном извештају и програмирање капија квалитета, укључујући „чегрлицу“ за референтни склоп. Доступна је нека програмска документација Куалити Гатес-а овде - међутим, није комплетан, и морате погледати изворни код. С друге стране, за потпуну контролу над оним што се дешава, „чегрта“ се може применити независно (погледајте мој предидусиј пост о овој теми).
Закључак
Пре него што почнем да припремам овај материјал, одлучио сам да потражим: да ли је неко већ писао о овој теми на Хабреу? Само сам нашао интервју 2017 с девојкагде каже:
Колико ја знам, не постоји интеграција са Џенкинсом или мавен додатком […] У принципу, сваки ентузијаста би могао да се спријатељи са ИДЕА Цоммунити Едитион и Џенкинсом, многи би од овога имали само користи.
Па, две године касније имамо Варнингс НГ Плугин, и коначно је ово пријатељство дошло до плода!