Ang IntelliJ IDEA karon adunay labing abante nga static nga Java code analyzer, nga sa mga kapabilidad niini nagbiya sa mga "beterano" sama sa и . Ang daghang mga "inspeksyon" nagsusi sa code sa lainlaing mga aspeto, gikan sa istilo sa coding hangtod sa kasagaran nga mga bug.
Bisan pa, basta ang mga resulta sa pag-analisar gipakita lamang sa lokal nga interface sa IDE sa developer, kini gamay nga gamit sa proseso sa pag-uswag. Static nga pagtuki Ingon ang unang lakang sa pagtukod sa pipeline, ang mga resulta niini kinahanglan nga maghubit sa kalidad nga mga ganghaan, ug ang pagtukod kinahanglan nga mapakyas kung ang kalidad nga mga ganghaan dili mapasa. Nahibal-an nga ang TeamCity CI gihiusa sa IDEA. Apan bisan kung dili ka mogamit sa TeamCity, dali nimong sulayan ang pagpadagan sa mga pag-inspeksyon sa IDEA sa bisan unsang ubang CI server. Gisugyot ko nga imong tan-awon kung giunsa kini mahimo gamit ang IDEA Community Edition, Jenkins ug Mga Pasidaan NG plugin.
Lakang 1. Pagdalagan ang pagtuki sa sudlanan ug pagkuha og report
Sa sinugdan, ang ideya sa pagpadagan sa usa ka IDE (desktop application!) sa sulod sa usa ka sistema sa CI nga walay graphical interface mahimong daw kadudahan ug makahasol kaayo. Maayo na lang, ang mga developer sa IDEA naghatag sa abilidad sa pagdagan и gikan sa command line. Dugang pa, aron makadagan ang IDEA sa kini nga mode, wala kinahanglana ang usa ka subsystem sa graphic ug kini nga mga buluhaton mahimo’g himuon sa mga server nga adunay usa ka kabhang sa teksto.
Ang mga inspeksyon gilunsad gamit ang script bin/inspect.sh gikan sa direktoryo sa pag-install sa IDEA. Ang mga parameter nga gikinahanglan mao ang:
- bug-os nga dalan sa proyekto (mga paryente dili suportado),
- dalan paingon sa .xml file nga adunay mga setting sa inspeksyon (kasagaran anaa sa sulod sa proyekto sa .idea/inspectionProfiles/Project_Default.xml),
- bug-os nga agianan ngadto sa folder diin ang .xml nga mga file nga adunay mga taho sa mga resulta sa pagtuki itago.
Dugang pa, gilauman nga
- ang agianan sa Java SDK ma-configure sa IDE, kung dili ang pag-analisar dili molihok. Kini nga mga setting anaa sa configuration file
jdk.table.xmlsa IDEA global configuration folder. Ang IDEA global configuration mismo nahimutang sa home directory sa user sa default, apan kini nga lokasyon sa fileidea.properties. - Ang gi-analisa nga proyekto kinahanglan nga usa ka balido nga proyekto sa IDEA, diin kinahanglan nimo nga buhaton ang pipila ka mga file nga kasagarang gibalewala sa pagkontrol sa bersyon, nga mao:
.idea/inspectionProfiles/Project_Default.xml- Mga setting sa analisador, klaro nga magamit kini kung mag-inspeksyon sa sulud,.idea/modules.xml- kung dili makuha namon ang sayup nga 'Kini nga proyekto wala’y mga module',.idea/misc.xml- kung dili makuha namon ang sayup nga 'Ang JDK wala ma-configure sa husto alang niini nga proyekto',*.iml-файлы- kung dili makakuha kami usa ka sayup bahin sa usa ka wala ma-configure nga JDK sa module.
Bisan kung kini nga mga file sagad gilakip sa .gitignore, wala silay sulod nga impormasyon nga espesipiko sa palibot sa usa ka partikular nga developer - dili sama, pananglitan, usa ka file workspace.xml, diin ang maong impormasyon anaa, ug busa dili kinahanglan nga itugyan kini.
Ang dayag nga solusyon mao ang pagputos sa JDK uban sa IDEA Community Edition ngadto sa usa ka sudlanan sa porma nga andam na nga "i-pitted" sa naanalisa nga mga proyekto. Magpili kita og usa ka angay nga base nga sudlanan, ug mao kini ang atong 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 -v2Gamit ang opsyon idea.config.path gipugos namo ang IDEA sa pagpangita sa iyang global configuration sa folder /etc/idea, tungod kay ang folder sa balay sa user kung nagtrabaho sa CI usa ka butang nga dili sigurado ug kanunay nga wala.
Kini ang hitsura sa file nga gikopya sa sudlanan: jdk.table.xml, nga naglangkob sa mga agianan sa OpenJDK nga gi-install sa sulod sa sudlanan (usa ka susama nga file gikan sa imong kaugalingon nga direktoryo nga adunay mga setting sa IDEA mahimong makuha ingon usa ka sukaranan):
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>Ang nahuman nga imahe .
Sa dili pa mopadayon, atong susihon nga ang IDEA analyzer nagdagan sa sudlanan:
docker run --rm -v <путь/к/вашему/проекту>:/var/project inponomarev/intellij-idea-analyzerKinahanglang malampuson nga modagan ang pagtuki, ug daghang mga .xml nga mga file nga adunay mga taho sa analista kinahanglan nga makita sa target/idea_inspections subfolder.
Karon wala nay pagduha-duha nga ang IDEA analisador mahimong modagan nga standalone sa bisan unsang CI nga palibot, ug kita mopadayon sa ikaduhang lakang.
Lakang 2. Ipakita ug analisa ang report
Ang pagkuha sa report sa porma sa .xml nga mga file mao ang katunga sa gubat karon kinahanglan nimo nga himoon kini nga mabasa sa tawo. Ug usab ang mga resulta niini kinahanglan gamiton sa kalidad nga mga ganghaan - ang lohika alang sa pagtino kung ang gidawat nga pagbag-o moagi o mapakyas sumala sa kalidad nga pamatasan.
Makatabang kini kanato , nga gipagawas kaniadtong Enero 2019. Uban sa pag-abut niini, daghang mga indibidwal nga mga plugins alang sa pagtrabaho uban ang static nga mga resulta sa pag-analisa sa Jenkins (CheckStyle, FindBugs, PMD, ug uban pa) gimarkahan na karon nga dili na magamit.
Ang plugin naglangkob sa duha ka bahin:
- daghang tigkolekta sa mensahe sa analisador ( naglakip sa tanang analisador nga nailhan sa siyensiya gikan sa AcuCobol ngadto sa ZPT Lint),
- usa ka tigtan-aw sa taho alang kanilang tanan.
Ang listahan sa mga butang nga mahimong analisahon sa Warnings NG naglakip sa mga pasidaan gikan sa Java compiler ug mga pasidaan gikan sa Maven execution logs: bisan tuod kini kanunay nga makita, kini panagsa ra nga espesipikong gisusi. Ang mga report sa IntelliJ IDEA gilakip usab sa lista sa mga giila nga format.
Tungod kay ang plugin bag-o, kini sa sinugdanan nakig-uban sa Jenkins Pipeline. Ang lakang sa pagtukod uban ang pag-apil niini ingon niini (gisulti lang namon sa plugin kung unsa nga format sa taho ang among nahibal-an ug kung unsang mga file ang kinahanglan i-scan):
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')]
)
}Ang interface sa report ingon niini:

Sayon, kini nga interface kay unibersal para sa tanan nga giila nga analisador. Naglangkob kini usa ka interactive nga diagram sa pag-apod-apod sa mga nakit-an pinaagi sa kategorya ug usa ka graph sa dinamika sa mga pagbag-o sa gidaghanon sa mga nakit-an. Mahimo nimong buhaton ang dali nga pagpangita sa grid sa ilawom sa panid. Ang bugtong butang nga wala molihok sa husto alang sa mga pag-inspeksyon sa IDEA mao ang abilidad sa pag-browse sa code direkta sa Jenkins (bisan pa alang sa ubang mga taho, pananglitan Checkstyle, kini nga plugin makahimo niini nga matahum). Morag kini usa ka bug sa IDEA report parser nga kinahanglan ayohon.
Lakip sa mga bahin sa Warnings NG mao ang abilidad sa pagtipon sa mga kaplag gikan sa lain-laing mga tinubdan sa usa ka report ug programa Quality Gates, lakip ang usa ka "ratchet" alang sa reference assembly. Ang pipila ka dokumentasyon sa programming sa Quality Gates anaa - bisan pa, kini dili kompleto, ug kinahanglan nimo nga tan-awon ang gigikanan nga code. Sa laing bahin, para sa hingpit nga pagkontrolar sa nanghitabo, ang “ratchet” mahimong ipatuman nga independente (tan-awa ang my mahitungod niini nga tema).
konklusyon
Sa wala pa magsugod sa pag-andam niini nga materyal, nakahukom ko sa pagpangita: aduna na bay nagsulat niini nga hilisgutan sa Habré? nakit-an ra nako с diin siya nag-ingon:
Sa akong nahibal-an, wala'y panagsama sa Jenkins o usa ka maven plugin [...] Sa prinsipyo, bisan kinsa nga mahiligon mahimong makighigala sa IDEA Community Edition ug Jenkins, daghan ang makabenepisyo niini.
Aw, duha ka tuig ang milabay kami adunay Mga Pasidaan NG Plugin, ug sa katapusan kini nga panaghigalaay natuman!
Source: www.habr.com
