Ho tsamaisa tlhahlobo ea IntelliJ IDEA ho Jenkins

IntelliJ IDEA kajeno e na le analyzer ea khoutu ea Java e tsoetseng pele ka ho fetesisa, eo ka bokhoni ba eona e sieang morao haholo "bahlabani" ba joalo. Checkstyle и Spotbugs. "Litlhahlobo" tsa eona tse ngata li hlahloba khoutu ka likarolo tse fapaneng, ho tloha ho setaele sa likhoutu ho isa ho likokoana-hloko tse tloaelehileng.

Leha ho le joalo, ha feela liphetho tsa tlhahlobo li bonts'oa feela ka har'a sebopeho sa lehae sa IDE ea mohlahlami, ha li na thuso e ngata molemong oa ntlafatso. Tlhahlobo e tsitsitseng e tlameha ho phethahala E le mohato oa pele oa lipeipi tsa kaho, liphetho tsa eona li lokela ho hlalosa liheke tsa boleng, 'me mohaho o lokela ho hlōleha haeba liheke tsa boleng li sa fetisetsoe. Hoa tsebahala hore TeamCity CI e kopantsoe le IDEA. Empa leha o sa sebelise TeamCity, o ka leka habonolo ho etsa tlhahlobo ea IDEA ho seva efe kapa efe ea CI. Ke fana ka maikutlo a hore u bone hore na sena se ka etsoa joang ka IDEA Community Edition, Jenkins le Litemoso NG plugin.

Mohato oa 1. Etsa tlhahlobo ka har'a setshelo 'me u fumane tlaleho

Qalong, mohopolo oa ho tsamaisa IDE (desktop application!) ka har'a sistimi ea CI e se nang sebopeho sa graphical e kanna ea utloahala e belaetsa ebile e le mathata haholo. Ka lehlohonolo, baetsi ba IDEA ba fane ka bokhoni ba ho matha sebopeho sa khoutu и tlhatlhobo ho tloha molaong oa taelo. Ho feta moo, ho tsamaisa IDEA ka mokhoa ona, tsamaiso e nyenyane ea litšoantšo ha e hlokehe mme mesebetsi ena e ka etsoa ho li-server tse nang le khetla ea mongolo.

Litlhahlobo li qalisoa ho sebelisoa script bin/inspect.sh ho tsoa bukeng ea ho kenya IDEA. Li-parameter tse hlokahalang ke:

  • tsela e felletseng ea morero (ba masika ha ba tšehetsoe),
  • tsela ea ho ea faeleng ea .xml e nang le litlhophiso tsa tlhahlobo (hangata e fumaneha ka har'a projeke ho .idea/inspectionProfiles/Project_Default.xml),
  • tsela e felletseng ea sephutheli seo ho sona .xml lifaele tse nang le litlaleho tsa liphetho tsa tlhahlobo li tla bolokoa.

Ho phaella moo, ho lebeletsoe hore

  • tsela ea Java SDK e tla hlophisoa ho IDE, ho seng joalo tlhahlobo e ke ke ea sebetsa. Litlhophiso tsena li teng faeleng ea tlhophiso jdk.table.xml ka har'a foldara ea tlhophiso ea lefats'e ea IDEA. Sebopeho sa lefats'e sa IDEA ka boeona se fumaneha bukeng ea lehae ea mosebelisi ka ho sa feleng, empa sebaka sena e ka hlalosoa ka ho hlaka ka faele idea.properties.
  • Morero o hlahlobiloeng e tlameha ho ba projeke e nepahetseng ea IDEA, eo ho eona o tla tlameha ho etsa lifaele tse ling tseo hangata li hlokomolohuoang taolong ea mofuta, e leng:
    • .idea/inspectionProfiles/Project_Default.xml - li-setting tsa analyzer, ho hlakile hore li tla sebelisoa ha ho etsoa tlhahlobo ka sejaneng,
    • .idea/modules.xml - ho seng joalo re tla fumana phoso 'Projeke ena ha e na li-module',
    • .idea/misc.xml - ho seng joalo re tla fumana phoso 'JDK ha e lokisoe hantle bakeng sa morero ona',
    • *.iml-файлы - ho seng joalo re tla fumana phoso mabapi le JDK e sa lokisoang mojuleng.

Leha lifaele tsena hangata li kenyelelitsoe ho .gitignore, ha li na tlhahisoleseding leha e le efe e tobileng tikolohong ea moqapi ea itseng - ho fapana, ka mohlala, faele workspace.xml, moo boitsebiso bo joalo bo leng teng, ka hona ha ho hlokahale hore u bo etse.

Tharollo e totobetseng ke ho kenya JDK hammoho le IDEA Community Edition ka har'a sets'oants'o ka sebopeho se seng se loketse ho "tsuoa" mererong e hlahlobiloeng. Ha re khethe sejana se loketseng, 'me sena ke seo Dockerfile ea rona e tla ba sona:

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

Ho sebelisa khetho idea.config.path re qobelletse IDEA ho batla tlhophiso ea eona ea lefats'e ka har'a foldara /etc/idea, hobane foldara ea lehae ea mosebelisi ha a sebetsa ho CI ke ntho e sa tsitsang mme hangata ha e eo ka botlalo.

Sena ke tsela eo faele e kopilitsoeng ka har'a setshelo e shebahalang ka eona: jdk.table.xml, e nang le litsela tsa ho OpenJDK e kentsoeng ka har'a setshelo (faele e ts'oanang e tsoang bukeng ea hau e nang le litlhophiso tsa IDEA e ka nkuoa e le motheo):

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>

Setšoantšo se phethiloeng e fumaneha ho Docker Hub.

Pele re fetela pele, a re hlahlobeng hore na tlhahlobo ea IDEA e ntse e sebetsa ka har'a setshelo:

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

Tlhahlobo e lokela ho sebetsa ka katleho, 'me lifaele tse ngata tsa .xml tse nang le litlaleho tsa analyzer li lokela ho hlaha ho sephutheli se senyenyane sa target/idea_inspections.

Hona joale ha ho sa na lipelaelo tsa hore IDEA analyzer e ka tsamaisoa ka mokhoa o ikemetseng sebakeng leha e le sefe sa CI, 'me re fetela mohatong oa bobeli.

Mohato oa 2. Hlahisa le ho sekaseka tlaleho

Ho fumana tlaleho ka sebopeho sa lifaele tsa .xml ke halofo ea ntoa, joale u hloka ho etsa hore e balehe ke batho. Hape liphetho tsa eona li lokela ho sebelisoa lihekeng tsa boleng - logic bakeng sa ho tseba hore na phetoho e amohelehang e feta kapa e hlōleha ho latela litekanyetso tsa boleng.

Sena se tla re thusa Litemoso tsa Jenkins NG Plugin, e ileng ea lokolloa ka January 2019. Ka ho fihla ha eona, li-plugins tse ngata tsa motho ka mong bakeng sa ho sebetsa ka tlhahlobo e tsitsitseng li hlahisa Jenkins (CheckStyle, FindBugs, PMD, joalo-joalo) joale li tšoailoe e le tsa khale.

Plugin e na le likarolo tse peli:

  • babokelli ba melaetsa ba bangata ba analyzer (lenane le feletseng e kenyelletsa bahlahlobisisi bohle ba tsejoang ke mahlale ho tloha AcuCobol ho ea ZPT Lint),
  • sebohi se le seng sa tlaleho bakeng sa bona kaofela.

Lethathamo la lintho tseo Litemoso NG li ka li hlahlobang li kenyelletsa litemoso tse tsoang ho moqapi oa Java le litemoso tse tsoang ho li-logs tsa ho bolaoa ha Maven: le hoja li lula li bonahala, hangata ha li hlahlojoe ka ho khetheha. Litlaleho tsa IntelliJ IDEA le tsona li kenyelelitsoe lethathamong la lifomate tse tsebahalang.

Kaha plugin e ncha, qalong e sebelisana hantle le Jenkins Pipeline. Mohato oa ho aha le ho nka karolo ha ona o tla shebahala tjena (re mpa re bolella plugin hore na re tseba sebopeho sefe sa tlaleho le hore na ke lifaele life tse lokelang ho hlahlojoa):

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

Sebopeho sa tlaleho se shebahala tjena:

Ho tsamaisa tlhahlobo ea IntelliJ IDEA ho Jenkins

Ka mokhoa o bonolo, sebopeho sena ke sa bokahohle bakeng sa bahlahlobisisi bohle ba tsebahalang. E na le setšoantšo se kopanetsoeng sa kabo ea lintho tse fumanoeng ka sehlopha le kerafo ea matla a liphetoho palo ea lintho tse fumanoeng. U ka etsa patlisiso e potlakileng ho grid tlase leqepheng. Ntho feela e sa kang ea sebetsa ka nepo bakeng sa tlhahlobo ea IDEA ke bokhoni ba ho bala khoutu ka kotloloho ho Jenkins (le hoja bakeng sa litlaleho tse ling, mohlala Checkstyle, plugin ena e ka etsa sena hantle). Ho bonahala eka sena ke bothata ho sehlahlobi sa tlaleho ea IDEA se hlokang ho lokisoa.

Har'a likarolo tsa Litemoso tsa NG ke bokhoni ba ho bokella liphuputso tse tsoang mehloling e fapaneng tlalehong e le 'ngoe le lenaneo la Quality Gates, ho kenyelletsa le "ratchet" bakeng sa kopano ea litšupiso. Litokomane tse ling tsa lenaneo la Quality Gates lia fumaneha mona - leha ho le joalo, ha e phethehe, 'me u tlameha ho sheba khoutu ea mohloli. Ka lehlakoreng le leng, bakeng sa taolo e felletseng holim'a se etsahalang, "ratchet" e ka kengoa ts'ebetsong ka boikemelo (bona poso e fetileng mabapi le sehlooho sena).

fihlela qeto e

Pele ke qala ho lokisetsa boitsebiso bona, ke ile ka etsa qeto ea ho batla: na ho na le motho ea seng a ngotse ka taba ee ka Habré? Ke fumane feela lipuisano tsa 2017 с lanymoo a reng:

Ho ea kamoo ke tsebang, ha ho na kopano le Jenkins kapa maven plugin [...] Ha e le hantle, motho leha e le ofe ea chesehelang maikutlo a ka etsa metsoalle le IDEA Community Edition le Jenkins, ba bangata ba tla rua molemo ho sena.

Joale, lilemo tse peli hamorao re na le Litemoso tsa NG Plugin, 'me qetellong setsoalle sena se fihlile katlehong!

Source: www.habr.com

Eketsa ka tlhaloso