Na-agba ọsọ nyocha IntelliJ IDEA na Jenkins

IntelliJ IDEA taa nwere onye nyocha koodu Java static kachasị elu, nke n'ikike ya hapụrụ “ndị agha ochie” dị ka. Ụdị nlele и Spotbugs. Ọtụtụ “nyocha” ya na-elele koodu ahụ n'akụkụ dị iche iche, site na ụdị koodu ruo n'ụdị ahụhụ.

Agbanyeghị, ọ bụrụhaala na egosipụtara nsonaazụ nyocha naanị na interface mpaghara nke IDE onye nrụpụta, ha abaghị uru na usoro mmepe. Nyocha static ga-emezurịrị Dị ka nzọụkwụ mbụ nke pipeline na-arụ ọrụ, nsonaazụ ya kwesịrị ịkọwapụta ọnụ ụzọ dị mma, na ihe owuwu ahụ kwesịrị ịdaba ma ọ bụrụ na agafeghị ọnụ ụzọ dị mma. A maara na TeamCity CI jikọtara ya na IDEA. Mana ọbụlagodi na ị naghị eji TeamCity, ị nwere ike ịnwale ịgba ọsọ nyocha IDEA na sava CI ọ bụla ọzọ. M na-atụ aro ka ị hụ ka esi eme nke a site na iji IDEA Community Edition, Jenkins na Warnings NG plugin.

Nzọụkwụ 1. Gbaa nyocha ahụ n'ime akpa wee nweta akụkọ

Na mbụ, echiche nke ịgba ọsọ IDE (ngwa desktọpụ!) N'ime sistemu CI nke na-enweghị ihe ngosi eserese nwere ike iyi ihe na-enyo enyo na nnukwu nsogbu. Ọ dabara nke ọma, ndị mmepe IDEA enyela ikike ịgba ọsọ nhazi koodu и nyocha site na ahịrị iwu. Ọzọkwa, iji na-agba IDEA na ọnọdụ a, a chọghị subsystem nke eserese na enwere ike ịrụ ọrụ ndị a na sava nwere shei ederede.

A na-eji edemede wee malite nyocha bin/inspect.sh site na ndekọ nrụnye IDEA. Ihe ndị a chọrọ bụ:

  • ụzọ zuru oke maka ọrụ ahụ (anaghị akwado ndị ikwu),
  • ụzọ faịlụ .xml nwere ntọala nyocha (na-adịkarị n'ime ọrụ ahụ na .idea/inspectionProfiles/Project_Default.xml),
  • ụzọ zuru oke na folda ebe a ga-echekwa faịlụ .xml nwere akụkọ na nsonaazụ nyocha.

Na mgbakwunye, a na-atụ anya na

  • A ga-ahazi ụzọ Java SDK na IDE, ma ọ bụghị na nyocha ahụ agaghị arụ ọrụ. Ntọala ndị a dị na faịlụ nhazi jdk.table.xml na IDEA zuru ụwa ọnụ nhazi nchekwa. Nhazi IDEA zuru ụwa ọnụ n'onwe ya dị na ndekọ ụlọ onye ọrụ na ndabara, mana ebe a enwere ike ịkọwapụta nke ọma na faịlụ idea.properties.
  • Ọrụ nyochara ga-abụrịrị ezigbo ọrụ IDEA, nke ị ga-eme ụfọdụ faịlụ ndị a na-elegharakarị anya na njikwa ụdị, ya bụ:
    • .idea/inspectionProfiles/Project_Default.xml - ntọala analyzer, a ga-eji ya mee ihe mgbe ị na-eme nyocha n'ime akpa,
    • .idea/modules.xml - ma ọ bụghị ya, anyị ga-enweta njehie 'Ọrụ a enweghị modul',
    • .idea/misc.xml - ma ọ bụghị ya, anyị ga-enweta njehie 'Ehazighị JDK nke ọma maka ọrụ a',
    • *.iml-файлы - ma ọ bụghị ya, anyị ga-enweta njehie gbasara JDK na-ahazighị na modul.

Ọ bụ ezie na faịlụ ndị a na-etinyekarị na .gitignore, ha enweghị ozi ọ bụla akọwapụtara maka gburugburu otu onye nrụpụta - n'adịghị ka ọmụmaatụ, faịlụ workspace.xml, ebe ozi dị otú ahụ dị, ya mere ọ dịghị mkpa ime ya.

Ihe ngwọta doro anya bụ ịkwakọta JDK yana IDEA Community Edition n'ime akpa n'ụdị dị njikere ka a "tụnye" na ọrụ nyochara. Ka anyị họrọ igbe ntọala dabara adaba, nke a bụ ihe Dockerfile anyị ga-abụ:

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

Iji nhọrọ idea.config.path anyị manyere IDEA ka ọ chọọ nhazi ya zuru ụwa ọnụ na nchekwa /etc/idea, n'ihi na nchekwa ụlọ nke onye ọrụ mgbe ọ na-arụ ọrụ na CI bụ ihe a na-ejighị n'aka ma na-anọghị kpamkpam.

Nke a bụ ihe faịlụ e depụtaghachiri na akpa dị ka: jdk.table.xml, nke nwere ụzọ OpenJDK arụnyere n'ime akpa (faịlụ yiri nke ahụ sitere na ndekọ nke gị nwere ntọala IDEA ka ọ bụrụ ntọala):

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>

Onyonyo emechara dị na Docker Hub.

Tupu ịga n'ihu, ka anyị lelee na onye nyocha IDEA na-agba n'ime akpa:

docker run --rm -v <путь/к/вашему/проекту>:/var/project inponomarev/intellij-idea-analyzer

Nyocha ahụ kwesịrị ịga nke ọma, ọtụtụ faịlụ .xml nwere akụkọ nyocha kwesịrị ịpụta na nchekwa nchekwa ebumnuche/echiche_inspections.

Ugbu a enwekwaghị obi abụọ ọ bụla na onye nyocha IDEA nwere ike ịgba ọsọ naanị na gburugburu CI ọ bụla, anyị na-aga n'ihu na nzọụkwụ nke abụọ.

Nzọụkwụ 2. Gosipụta na nyochaa akụkọ

Inweta akụkọ ahụ n'ụdị faịlụ .xml bụ ọkara agha; ugbu a ịkwesịrị ime ka ọ bụrụ nke mmadụ ga-agụ. Na kwa nsonaazụ ya kwesịrị iji na ọnụ ụzọ ámá dị mma - mgbagha maka ikpebi ma mgbanwe a nabatara na-agafe ma ọ bụ daa dịka njirisi mma si dị.

Nke a ga-enyere anyị aka Jenkins Warnings NG ngwa mgbakwunye, nke e wepụtara na Jenụwarị 2019. Site na ọbịbịa ya, ọtụtụ plugins n'otu n'otu maka ịrụ ọrụ na nsonaazụ nyocha kwụ ọtọ na Jenkins (CheckStyle, FindBugs, PMD, wdg) bụ akara ugbu a dị ka ihe adịkwaghị.

Ngwa mgbakwunye nwere akụkụ abụọ:

  • ọtụtụ ndị na-anakọta ozi nyocha (ndepụta zuru ezu gụnyere ndị nyocha niile sayensị si AcuCobol ruo ZPT Lint mara),
  • otu onye na-ekiri akụkọ maka ha niile.

Ndepụta nke ihe ịdọ aka ná ntị NG nwere ike nyochaa gụnyere ịdọ aka ná ntị sitere na onye nchịkọta Java na ịdọ aka ná ntị sitere na ndekọ mkpochapụ nke Maven: n'agbanyeghị na a na-ahụ ha mgbe niile, a naghị enyocha ya kpọmkwem. Agụnyere akụkọ IntelliJ IDEA na ndepụta nke ụdị amaara.

Ebe ọ bụ na ngwa mgbakwunye dị ọhụrụ, ọ na-emekọrịta nke ọma na Jenkins Pipeline. Nzọụkwụ na-ewu na nsonye ya ga-adị ka nke a (anyị na-agwa ngwa mgbakwunye ihe usoro akụkọ anyị na-aghọta na faịlụ ndị a ga-enyocha):

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')]
    )
}

Ihe interface akụkọ ahụ dị ka nke a:

Na-agba ọsọ nyocha IntelliJ IDEA na Jenkins

Dị mma, interface a bụ ihe zuru ụwa ọnụ maka ndị nyocha niile ghọtara. Ọ nwere eserese mmekọrịta nke nkesa nke nchọta site na otu na eserese nke mgbanwe mgbanwe na ọnụ ọgụgụ nke achọpụtara. Ị nwere ike ịme ọchụchọ ngwa ngwa na grid na ala nke ibe ahụ. Naanị ihe na-adịghị arụ ọrụ nke ọma maka nyocha IDEA bụ ikike ịmegharị koodu ozugbo na Jenkins (ọ bụ ezie na maka akụkọ ndị ọzọ, dịka ọmụmaatụ Checkstyle, ngwa mgbakwunye a nwere ike ime nke a nke ọma). Ọ dị ka nke a bụ ahụhụ dị na nyocha akụkọ IDEA nke kwesịrị idozi.

Otu n'ime njirimara nke Warnings NG bụ ikike ịchịkọta nchoputa sitere na isi mmalite dị iche iche na otu akụkọ na mmemme Quality Gates, gụnyere "ratchet" maka mgbakọ ntụaka. Ụfọdụ akwụkwọ mmemme nke Gates Quality dị ebe a - Otú ọ dị, ọ bụghị zuru ezu, na ị ga-ele anya na isi koodu. N'aka nke ọzọ, maka njikwa zuru oke maka ihe na-eme, enwere ike itinye "ratchet" ahụ n'onwe ya (lee m gara aga post banyere isiokwu a).

nkwubi

Tupu ịmalite ịkwadebe ihe a, ekpebiri m ịchọ: ọ dị onye ọ bụla edeburu n'isiokwu a na Habré? Naanị m hụrụ ajụjụ ọnụ 2017 с Lanyebe o kwuru:

Dị ka m maara, ọ dịghị mwekota na Jenkins ma ọ bụ a maven plugin […] Na ụkpụrụ, onye ọ bụla na-anụ ọkụ n'obi nwere ike ime enyi na IDEA Community Edition na Jenkins, ọtụtụ ga-erite uru na nke a.

Ọfọn, afọ abụọ ka e mesịrị, anyị nwere ịdọ aka ná ntị NG Plugin, na n'ikpeazụ ọbụbụenyi a abịala na-arụpụta!

isi: www.habr.com

Tinye a comment