IntelliJ IDEA nhasi ine yakanyanya static Java code analyzer, iyo mukugona kwayo inosiya kure kumashure se "veterans" vakadai.
Nekudaro, chero mhedzisiro yekuongorora ichingoratidzwa mune yemuno interface yeIDE yevagadziri, ivo havana basa mudiki maitiro ekusimudzira. Static analysis
Danho 1. Mhanyai kuongorora mumudziyo uye uwane mushumo
Pakutanga, iyo pfungwa yekumhanyisa IDE (desktop application!) mukati meCI sisitimu isina graphical interface inogona kuratidzika kunge isina chokwadi uye inonetsa zvikuru. Neraki, vagadziri veIDEA vakapa kugona kumhanya
Kuongorora kunotangwa pachishandiswa script bin/inspect.sh
kubva kuIDEA yekuisa dhairekitori. Maparameter anodiwa ndeaya:
- nzira yakazara yepurojekiti (hama hadzitsigirwe),
- nzira yekuenda ku.xml faira rine zvigadziriso zvekuongorora (kazhinji inowanikwa mukati mechirongwa mu.idea/inspectionProfiles/Project_Default.xml),
- nzira yakazara yekuenda kufolda umo .xml mafaera ane mishumo pamusoro peongororo zvabuda achachengetwa.
Mukuwedzera, zvinotarisirwa kuti
- nzira inoenda kuJava SDK ichagadziriswa muIDE, kana zvisina kudaro kuongorora hakuzoshanda. Aya marongero ari mufaira rekugadzirisa
jdk.table.xml
muIDEA yepasi rose gadziriso folda. Iyo IDEA yepasirese kumisikidzwa pachayo inowanikwa mudhairekitori remushandisi nekusarudzika, asi iyi nzvimboinogona kutsanangurwa zvakajeka mufairaidea.properties
. - Iyo yakaongororwa purojekiti inofanirwa kuve inoshanda IDEA purojekiti, iyo yauchazofanira kuita mamwe mafaera anowanzo furatirwa kushandurudzo control, anoti:
.idea/inspectionProfiles/Project_Default.xml
- analyzer marongero, anozo shandiswa pakuita ongororo mumudziyo,.idea/modules.xml
- kana zvikasadaro tichawana kukanganisa 'Iyi purojekiti haina ma module',.idea/misc.xml
- kana zvikasadaro tichawana kukanganisa 'Iyo JDK haina kugadzirwa zvakanaka purojekiti iyi',*.iml-ΡΠ°ΠΉΠ»Ρ
- kana zvikasadaro isu tichawana kukanganisa nezve isina kurongeka JDK mune module.
Kunyangwe aya mafaera anowanzo kuverengerwa mukati .gitignore
, ivo havana ruzivo rwakanangana nemhoteredzo yemumwe mugadziri - kusiyana, semuenzaniso, faira workspace.xml
, apo ruzivo rwakadaro rwuri, uye naizvozvo hapana chikonzero chekuzviita.
Mhinduro iri pachena ndeyekuisa iyo JDK pamwe neIDEA Community Edition mumudziyo mune fomu yakagadzirira "kupinzwa" pamapurojekiti akaongororwa. Ngatisarudzei yakakodzera base mudziyo, uye izvi ndizvo zvichave yedu 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
Kushandisa sarudzo idea.config.path
isu takamanikidza IDEA kutsvaga kurongeka kwayo kwepasirese muforodha /etc/idea
, nekuti folda yekumba yemushandisi kana uchishanda muCI chinhu chisina chokwadi uye kazhinji chisipo zvachose.
Izvi ndizvo zvinoita faira rakakopwa mugaba rinotaridzika se: jdk.table.xml
, iyo ine nzira dzeOpenJDK yakaiswa mukati memudziyo (faira rakafanana kubva kune yako dhairekitori ine IDEA marongero anogona kutorwa sehwaro):
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>
Mufananidzo wapera
Tisati taenderera mberi, ngatitarisei kuti IDEA analyzer iri kushanda mumudziyo:
docker run --rm -v <ΠΏΡΡΡ/ΠΊ/Π²Π°ΡΠ΅ΠΌΡ/ΠΏΡΠΎΠ΅ΠΊΡΡ>:/var/project inponomarev/intellij-idea-analyzer
Ongororo yacho inofanira kushanda zvinobudirira, uye akawanda .xml mafaira ane analyzer mishumo anofanira kuoneka mu target/idea_inspections subfolder.
Ikozvino hapasisina kupokana kuti IDEA analyzer inogona kumhanyisa yakamira mune chero CI nharaunda, uye isu tinoenda kune yechipiri nhanho.
Danho 2. Ratidza uye ongorora mushumo
Kuwana rondedzero iri muchimiro che .xml mafaera ihafu yehondo; ikozvino unofanirwa kuita kuti iverengeke nevanhu. Uye zvakare mhedzisiro yayo inofanirwa kushandiswa mumasuwo emhando yepamusoro - iyo logic yekuona kana shanduko inogamuchirwa inopfuura kana kukundikana zvinoenderana nemhando yemhando.
Izvi zvichatibatsira
Iyo plugin ine zvikamu zviviri:
- akawanda analyzer meseji vaunganidzi (
Complete list inosanganisira ese anolyzer anozivikanwa nesainzi kubva kuAcuCobol kuenda kuZPT Lint), - mucherechedzo mumwe chete wevaridzi vese.
Rondedzero yezvinhu izvo Nyevero NG inogona kuongorora inosanganisira yambiro kubva kuJava compiler uye yambiro kubva kuMaven execution logs: kunyangwe ivo vachigara vachionekwa, ivo havawanzo kuongororwa. IntelliJ IDEA mishumo inosanganisirwa mune rondedzero yeanozivikanwa mafomati.
Sezvo plugin iri nyowani, inotanga kudyidzana zvakanaka neJenkins Pipeline. Nhanho yekuvaka nekutora chikamu kwayo ichaita seizvi (isu tinongoudza plugin kuti ndeapi mafomati yatinoziva uye kuti mafaira api anofanirwa kuongororwa):
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')]
)
}
Iyo report interface inoita seizvi:
Zviri nyore, iyi interface ndeyese kune vese vanozivikanwa analyzer. Iine dhiyabhorosi inopindirana yekugoverwa kwezviwanikwa nechikamu uye girafu yesimba rekuchinja muhuwandu hwezviwanikwa. Iwe unogona kutsvaga nekukurumidza mugridi pazasi pepeji. Chinhu chega chisina kushanda nemazvo chekuongorora kweIDEA kwaive kugona kuongorora kodhi zvakananga muJenkins (kunyangwe kune mamwe mishumo, semuenzaniso Checkstyle, iyi plugin inogona kuita izvi zvakanaka). Zvinotaridza kunge iyi ibug muIDEA report parser inoda kugadziriswa.
Pakati pezvinhu zveYambiro NG kugona kuunganidza zvakawanikwa kubva kwakasiyana zvinyorwa mushumo uye chirongwa Quality Gates, kusanganisira "ratchet" yegungano rereferenzi. Mamwe eQuality Gates programming zvinyorwa zviripo
mhedziso
Ndisati ndatanga kugadzirira chinyorwa ichi, ndakasarudza kutsvaga: pane atonyora pane iyi nyaya paHabrΓ©? Ndakawana chete
Sekuziva kwangu, hapana kubatanidzwa neJenkins kana maven plugin [β¦] Muchidimbu, chero munhu anofarira anogona kuita hushamwari neIDEA Community Edition naJenkins, vazhinji vanongobatsirika kubva pane izvi.
Zvakanaka, makore maviri gare gare tine Yambiro NG Plugin uye hushamwari ihwohwo hwakazopedzisira hwasvika pakubudirira!
Source: www.habr.com