Manao fisafoana IntelliJ IDEA amin'i Jenkins

IntelliJ IDEA amin'izao fotoana izao dia manana mpanadihady kaody Java static indrindra, izay amin'ny fahaizany dia mamela lavitra ny "veterans" toy ny Checkstyle ΠΈ Spotbugs. Ny "fanadihadiana" maro dia manamarina ny kaody amin'ny lafiny isan-karazany, manomboka amin'ny fomba fanaovana kaody ka hatramin'ny bibikely mahazatra.

Na izany aza, raha toa ka aseho ao amin'ny interface eo an-toerana an'ny IDE an'ny mpamorona ny valin'ny famakafakana, dia tsy dia misy dikany firy amin'ny fizotran'ny fampandrosoana izy ireo. Famakafakana static tsy maintsy ho tanteraka Amin'ny maha dingana voalohany amin'ny fantsona fananganana, ny valiny dia tokony hamaritra ny vavahady kalitao, ary ny fananganana dia tokony hahomby raha tsy mandalo ny vavahady kalitao. Fantatra fa tafiditra amin'ny IDEA ny TeamCity CI. Saingy na dia tsy mampiasa TeamCity aza ianao, dia afaka manandrana mora foana ny fanaraha-maso IDEA amin'ny mpizara CI hafa. Manoro hevitra anao aho hahita ny fomba hanaovana izany amin'ny fampiasana ny IDEA Community Edition, Jenkins ary fampitandremana NG plugin.

Dingana 1. Ampandehano ny famakafakana ao anaty container ary makΓ  tatitra

Tamin'ny voalohany dia toa mampiahiahy sy tena manahirana ny hevitra momba ny fampandehanana IDE (fampiharana desktop!) ao anatin'ny rafitra CI tsy misy interface tsara. Soa ihany fa nanome fahafahana hihazakazaka ny mpamorona IDEA fandrafetana kaody ΠΈ fisafoana avy amin'ny andalana baiko. Ankoatr'izay, mba hampandehanana ny IDEA amin'ity fomba ity dia tsy ilaina ny subsystem sary ary azo atao amin'ny mpizara misy akorandriaka lahatsoratra ireo asa ireo.

Atomboka amin'ny fampiasana script ny fisafoana bin/inspect.sh avy amin'ny lahatahiry fametrahana IDEA. Ny paramètre ilaina dia:

  • lalana feno mankany amin'ny tetikasa (tsy tohana ny havana),
  • lalana mankany amin'ny rakitra .xml miaraka amin'ny fika fanaraha-maso (matetika ao anatin'ny tetikasa ao amin'ny .idea/inspectionProfiles/Project_Default.xml),
  • lalana feno mankany amin'ny lahatahiry misy rakitra .xml misy tatitra momba ny valin'ny fanadihadiana dia hotehirizina.

Ankoatra izay, andrasana izany

  • ny lalana mankany amin'ny Java SDK dia hapetraka ao amin'ny IDE, raha tsy izany dia tsy mandeha ny fanadihadiana. Ireo fanovana ireo dia voarakitra ao amin'ny fichier configuration jdk.table.xml ao amin'ny lahatahiry fanamafisana manerantany IDEA. Ny fikirakirana manerantany IDEA dia hita ao amin'ny lahatahiry an-tranon'ny mpampiasa amin'ny alΓ lan'ny default, fa ity toerana ity azo faritana mazava tsara anaty rakitra idea.properties.
  • Ny tetikasa nodinihina dia tsy maintsy tetikasa IDEA manan-kery, izay tsy maintsy anaovanao rakitra sasantsasany izay matetika tsy noraharahiana ny fanaraha-maso ny dikan-teny, izany hoe:
    • .idea/inspectionProfiles/Project_Default.xml - fikandrana analyzer, mazava ho azy fa hampiasaina rehefa manao fisafoana ao anaty kaontenera,
    • .idea/modules.xml - raha tsy izany dia hahazo ny lesoka 'Tsy misy modules ity tetikasa ity',
    • .idea/misc.xml - raha tsy izany dia hahazo ny lesoka 'Tsy voarindra tsara ny JDK ho an'ity tetikasa ity',
    • *.iml-Ρ„Π°ΠΉΠ»Ρ‹ - raha tsy izany dia hahazo hadisoana momba ny JDK tsy voarindra ao amin'ny module.

Na dia matetika aza ireo rakitra ireo dia tafiditra ao .gitignore, tsy misy fampahalalana manokana momba ny tontolon'ny developer iray manokana izy ireo - tsy toy ny rakitra, ohatra workspace.xml, izay misy fampahalalana toy izany, ary noho izany dia tsy ilaina ny manao izany.

Ny vahaolana mazava dia ny fandrafetana ny JDK miaraka amin'ny IDEA Community Edition ho ao anaty fitoeran-javatra amin'ny endrika efa vonona "hiasa" amin'ireo tetikasa nodinihina. Andeha isika hifidy fitoeran-javatra fototra mety, ary izao no ho 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

Mampiasa ny safidy idea.config.path noterenay ny IDEA hitady ny firafiny manerantany ao anaty lahatahiry /etc/idea, satria ny lahatahirin'ny mpampiasa rehefa miasa ao amin'ny CI dia zavatra tsy azo antoka ary matetika tsy hita.

Toy izao ny endriky ny rakitra nadika tao amin'ny container: jdk.table.xml, izay misy ny lalana mankany amin'ny OpenJDK napetraka ao anaty container (rakitra mitovy amin'ny lahatahiry misy anao miaraka amin'ny fika IDEA azo raisina ho fototra):

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>

Ny sary vita azo alaina ao amin'ny Docker Hub.

Alohan'ny handrosoana, andeha hojerentsika fa mandeha ao anaty container ny mpanadihady IDEA:

docker run --rm -v <ΠΏΡƒΡ‚ΡŒ/ΠΊ/Π²Π°ΡˆΠ΅ΠΌΡƒ/ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ>:/var/project inponomarev/intellij-idea-analyzer

Tokony hahomby ny famakafakana, ary ny rakitra .xml maro miaraka amin'ny tatitry ny mpanadihady dia tokony hiseho ao amin'ny subfolder target/idea_inspections.

Ankehitriny dia tsy misy isalasalana intsony fa ny mpandinika IDEA dia afaka mandeha irery amin'ny tontolo CI rehetra, ary mandroso amin'ny dingana faharoa isika.

Dingana 2. Asehoy sy diniho ny tatitra

Ny fahazoana ny tatitra amin'ny endrika rakitra .xml dia antsasak'adiny, ankehitriny dia mila manao azy ho mora vakiana ianao. Ary koa ny valiny dia tokony hampiasaina amin'ny vavahady kalitao - ny lojika hamaritana raha mandalo na tsy mahomby ny fanovana ekena araka ny fepetra momba ny kalitao.

Hanampy antsika izany Jenkins Warnings NG Plugin, izay navoaka tamin'ny Janoary 2019. Miaraka amin'ny fahatongavany, maro ny plugins tsirairay miasa amin'ny valin'ny fanadihadiana static ao Jenkins (CheckStyle, FindBugs, PMD, sns) no voamarika ho lany andro.

Ny plugin dia misy ampahany roa:

  • mpanangona hafatra mpanadihady maro (lisitra feno dia ahitana ny mpanadihady rehetra fantatra amin'ny siansa avy amin'ny AcuCobol mankany ZPT Lint),
  • mpijery tatitra tokana ho azy rehetra.

Ny lisitr'ireo zavatra azon'ny Warnings NG famakafakana dia ahitana fampitandremana avy amin'ny compiler Java sy fampitandremana avy amin'ny diarin'ny famonoana an'i Maven: na dia hita tsy tapaka aza izy ireo, dia zara raha nodinihina manokana. Ny tatitra IntelliJ IDEA dia tafiditra ao anatin'ny lisitry ny endrika fantatra ihany koa.

Satria vaovao ny plugin, dia mifandray tsara amin'ny Jenkins Pipeline izy io. Ny dingana fananganana miaraka amin'ny fandraisany anjara dia ho toy izao (lazainay fotsiny amin'ny plugin ny endrika tatitra fantatray sy ny rakitra tokony hojerena):

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

Ny interface interface dia toy izao:

Manao fisafoana IntelliJ IDEA amin'i Jenkins

Amin'ny ankapobeny, ity interface ity dia manerantany ho an'ny mpanadihady fantatra rehetra. Ahitana kisarisary ifanakalozan-kevitra momba ny fitsinjarana ny zavatra hita araka ny sokajy sy ny kisary misy ny fiovan'ny isan'ny zavatra hita ao. Azonao atao ny manao fikarohana haingana ao amin'ny grid amin'ny faran'ny pejy. Ny hany tsy nety tamin'ny fisafoana IDEA dia ny fahafahana mijery kaody mivantana ao Jenkins (na dia ho an'ny tatitra hafa, ohatra Checkstyle, ity plugin ity dia afaka manao izany tsara). Toa misy bibikely ao amin'ny parser tatitra IDEA izay mila amboarina.

Anisan'ny mampiavaka ny Warnings NG ny fahafahana manangom-bokatra avy amin'ny loharano samihafa ao anaty tatitra iray sy fandaharana Quality Gates, anisan'izany ny "ratchet" ho an'ny fivoriambe. Misy antontan-taratasy momba ny fandaharana Quality Gates sasany eto - na izany aza, tsy feno izany, ary tsy maintsy jerena ny code source. Amin'ny lafiny iray, ho an'ny fifehezana tanteraka ny zava-mitranga, ny "ratchet" dia azo ampiharina tsy miankina (jereo ny my lahatsoratra teo aloha momba ity lohahevitra ity).

famaranana

Talohan'ny nanombohako nanomana ity fitaovana ity dia nanapa-kevitra ny hikaroka aho: efa nisy nanoratra momba an'io lohahevitra io tao amin'ny Habré ve? hitako ihany tafatafa 2017 с Lanyizay lazainy hoe:

Raha ny fahafantarako azy, tsy misy integration amin'ny Jenkins na plugin maven […] Raha ny tena izy, ny olona rehetra mafana fo dia afaka minamana amin'ny IDEA Community Edition sy Jenkins, maro no hahazo tombony amin'izany.

Eny, roa taona aty aoriana dia manana fampitandremana NG Plugin isika, ary farany dia tonga ny fisakaizana!

Source: www.habr.com

Add a comment