Loaʻa i ka IntelliJ IDEA i kēia lā ka mea hoʻoponopono code Java static maikaʻi loa, i kona hiki ke waiho i hope o nā "veterans" e like me и . ʻO kāna mau "nānā" he nui e nānā i ke code ma nā ʻano like ʻole, mai ke ʻano coding a hiki i nā pōpoki maʻamau.
Eia nō naʻe, ʻoiai ke hōʻike ʻia nei nā hopena loiloi ma ka ʻaoʻao kūloko o ka IDE o ka mea hoʻomohala, ʻaʻole ia e hoʻohana i ke kaʻina hana. ʻIkepili paʻa Ma ke ʻano he hana mua o ka pipeline kūkulu, pono e wehewehe nā hopena i nā ʻīpuka maikaʻi, a pono e hāʻule ke kūkulu inā ʻaʻole i hala nā ʻīpuka maikaʻi. Ua ʻike ʻia ua hui pū ʻia ʻo TeamCity CI me IDEA. Akā inā ʻaʻole ʻoe e hoʻohana i ka TeamCity, hiki iā ʻoe ke hoʻāʻo maʻalahi e holo i nā nānā IDEA ma kekahi kikowaena CI ʻē aʻe. Manaʻo wau e ʻike ʻoe pehea e hana ʻia ai me ka hoʻohana ʻana i ka IDEA Community Edition, Jenkins a me Warnings NG plugin.
KaʻAnuʻu Hana 1. E holo i ka anamanaʻo i loko o ka ipu a loaa i ka hoike
I ka wā mua, ʻo ka manaʻo o ka holo ʻana i kahi IDE (palapala pākaukau!) i loko o kahi ʻōnaehana CI ʻaʻole i loaʻa kahi kiʻi kiʻi e like me ka kānalua a pilikia loa. ʻO ka mea pōmaikaʻi, ua hāʻawi nā mea hoʻomohala IDEA i ka hiki ke holo и mai ka laina kauoha. Eia kekahi, no ka holo ʻana i ka IDEA ma kēia ʻano, ʻaʻole koi ʻia kahi subsystem kiʻi a hiki ke hana ʻia kēia mau hana ma nā kikowaena me kahi pūpū kikokikona.
Hoʻomaka ʻia ka nānā ʻana me ka hoʻohana ʻana i kahi palapala bin/inspect.sh mai ka papa kuhikuhi hoʻonohonoho IDEA. ʻO nā ʻāpana e pono ai:
- ala piha i ka papahana (ʻaʻole kākoʻo ʻia nā ʻohana),
- ala i ka waihona .xml me nā hoʻonohonoho nānā (ʻike mau i loko o ka papahana ma .idea/inspectionProfiles/Project_Default.xml),
- ʻO ke ala piha i ka waihona kahi e mālama ʻia ai nā faila .xml me nā hōʻike e pili ana i nā hualoaʻa.
Eia hou, ua manaoia
- e hoʻonohonoho ʻia ke ala i ka Java SDK i ka IDE, inā ʻaʻole e holo ka loiloi. Aia kēia mau hoʻonohonoho i ka faila hoʻonohonoho
jdk.table.xmli loko o ka waihona hoʻonohonoho honua IDEA. Aia ka IDEA hoʻonohonoho honua ponoʻī ma ka papa kuhikuhi home o ka mea hoʻohana ma ka paʻamau, akā ʻo kēia wahi ma ka waihonaidea.properties. - Pono ka papahana i kālailai ʻia he papahana IDEA kūpono, kahi āu e hana ai i kekahi mau faila i mālama ʻole ʻia i ka mana mana, ʻo ia hoʻi:
.idea/inspectionProfiles/Project_Default.xml- nā hoʻonohonoho analyer, e hoʻohana ʻia lākou i ka wā e holo ana i ka nānā ʻana i ka ipu,.idea/modules.xml- inā ʻaʻole e loaʻa iā mākou ka hewa 'ʻAʻohe modules kēia papahana',.idea/misc.xml- inā ʻaʻole e loaʻa iā mākou ka hewa 'ʻAʻole i hoʻonohonoho pono ʻia ka JDK no kēia papahana',*.iml-файлы- inā ʻaʻole e loaʻa iā mākou kahi hewa e pili ana i kahi JDK i hoʻonohonoho ʻole ʻia i ka module.
ʻOiai ua hoʻokomo pinepine ʻia kēia mau faila i .gitignore, ʻaʻohe o lākou ʻike kikoʻī i ke kaiapuni o kahi mea hoʻomohala - ʻaʻole like, no ka laʻana, kahi faila workspace.xml, kahi i loaʻa ai ia ʻike, a no laila ʻaʻole pono e hana.
ʻO ka hopena maopopo ʻo ia ka hoʻopili ʻana i ka JDK me ka IDEA Community Edition i loko o kahi pahu i kahi ʻano mākaukau e "pitted" ma nā papahana i kālailai ʻia. E koho mākou i kahi pahu waihona kūpono, a ʻo ia kā mākou 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 -v2Ke hoʻohana nei i ke koho idea.config.path ua koi mākou i ka IDEA e ʻimi i kāna hoʻonohonoho honua i ka waihona /etc/idea, no ka mea, ʻo ka waihona home o ka mea hoʻohana i ka wā e hana ana ma CI he mea maopopo ʻole a ʻaʻole pinepine.
ʻO kēia ke ʻano o ka faila i kope ʻia i ka ipu: jdk.table.xml, aia nā ala i OpenJDK i hoʻokomo ʻia i loko o ka pahu (hiki ke lawe ʻia kahi faila like mai kāu papa kuhikuhi ponoʻī me nā hoʻonohonoho IDEA):
jdk.table.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>ʻO ke kiʻi i hoʻopauʻia .
Ma mua o ka neʻe ʻana, e nānā kāua e holo ana ka mea loiloi IDEA i ka ipu:
docker run --rm -v <путь/к/вашему/проекту>:/var/project inponomarev/intellij-idea-analyzerPono e holo maikaʻi ka hoʻopaʻa ʻana, a ʻike ʻia nā faila .xml he nui me nā hōʻike loiloi i loko o ka subfolder target/idea_inspections.
I kēia manawa, ʻaʻohe mea kānalua e hiki ke holo kaʻawale ka mea kālailai IDEA ma kekahi wahi CI, a neʻe mākou i ka lua.
KaʻAnuʻu Hana 2. Hōʻike a kālailai i ka hōʻike
ʻO ka loaʻa ʻana o ka hōʻike ma ke ʻano o nā faila .xml ka hapalua o ke kaua i kēia manawa pono ʻoe e hoʻolilo iā ia i hiki ke heluhelu ʻia e ke kanaka. A pono e hoʻohana ʻia kāna mau hopena i nā ʻīpuka maikaʻi - ʻo ke kumu no ka hoʻoholo ʻana i ka hala a i ʻole ka hāʻule ʻana o ka hoʻololi i ʻae ʻia e like me nā koina maikaʻi.
E kōkua kēia iā mākou , i hoʻokuʻu ʻia ma Ianuali 2019. Me kona hiki ʻana mai, nui nā plugins pilikino no ka hana ʻana me nā hopena loiloi static ma Jenkins (CheckStyle, FindBugs, PMD, a me nā mea ʻē aʻe) i hōʻailona ʻia i ka wā kahiko.
Aia ka plugin i ʻelua ʻāpana:
- nui nā mea hōʻiliʻili memo loiloi ( e pili ana i nā mea anaana a pau i ʻike ʻia i ka ʻepekema mai AcuCobol a ZPT Lint),
- he mea nana hoike hookahi no lakou a pau.
ʻO ka papa inoa o nā mea a Warnings NG hiki ke nānā i nā ʻōlelo aʻo mai ka Java compiler a me nā ʻōlelo aʻo mai nā lāʻau hoʻokō Maven: ʻoiai ke ʻike mau ʻia lākou, ʻaʻole i nānā pono ʻia. Hoʻokomo pū ʻia nā hōʻike IntelliJ IDEA i ka papa inoa o nā palapala i ʻike ʻia.
No ka mea he mea hou ka plugin, ua hui mua ia me Jenkins Pipeline. E like ke ʻano o ke kūkulu ʻana me kona komo ʻana (e haʻi wale mākou i ka plugin i ke ʻano hōʻike a mākou e ʻike ai a me nā faila e nānā ʻia):
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')]
)
}Penei ke ano o ka interface hoike:

ʻO ka maʻalahi, ʻo kēia interface ka mea āpau no nā mea loiloi i ʻike ʻia. Loaʻa iā ia kahi kiʻi pāʻani o ka māhele ʻana o nā mea i loaʻa ma ka ʻāpana a me kahi pakuhi o ka hoʻololi ʻana i ka helu o nā mea i loaʻa. Hiki iā ʻoe ke hana i kahi hulina wikiwiki ma ka mākia ma lalo o ka ʻaoʻao. ʻO ka mea wale nō i hana pono ʻole no ka nānā ʻana i ka IDEA, ʻo ia ka hiki ke nānā pono i ka code ma Jenkins (ʻoiai no nā hōʻike ʻē aʻe, no ka laʻana ʻo Checkstyle, hiki i kēia plugin ke hana i kēia nani). Me he mea lā he kuhi kēia i ka parser hōʻike IDEA pono e hoʻoponopono ʻia.
Ma waena o nā hiʻohiʻona o Warnings NG ka hiki ke hōʻuluʻulu i nā ʻike mai nā kumu like ʻole i hoʻokahi hōʻike a me ka papahana Quality Gates, me kahi "ratchet" no ka hui kuhikuhi. Loaʻa kekahi mau palapala hoʻolālā Quality Gates - akā naʻe, ʻaʻole i pau, a pono ʻoe e nānā i ke kumu kumu. Ma ka ʻaoʻao ʻē aʻe, no ka mana piha o ka mea e hana nei, hiki ke hoʻokō kūʻokoʻa ka "ratchet" (e ʻike i kaʻu e pili ana i kēia kumuhana).
hopena
Ma mua o ka hoʻomaka ʻana e hoʻomākaukau i kēia mea, ua hoʻoholo wau e ʻimi: ua kākau kekahi ma kēia kumuhana ma Habré? Ua loaʻa wale iaʻu с kahi āna i ʻōlelo ai:
E like me kaʻu i ʻike ai, ʻaʻohe hoʻohui me Jenkins a i ʻole kahi plugin maven […] Ma ke kumu, hiki i nā mea hoihoi ke hoʻolauna me IDEA Community Edition a me Jenkins, nui wale ka poʻe e pōmaikaʻi mai kēia.
ʻAe, ʻelua makahiki ma hope mai ua loaʻa iā mākou ʻo Warnings NG Plugin, a i ka hopena ua hoʻokō ʻia kēia pilina!
Source: www.habr.com
