Te whakahaere i nga tirotirohanga IntelliJ IDEA ki a Jenkins

Kei a IntelliJ IDEA i tenei ra te kaitirotiro waehere Java pateko tino matatau rawa atu, i runga i ona kaha ka mahue i muri i nga "hoia hoia" penei Kāhua taki и Nga Puka. Ko te maha o nga "tirotiro" he tirotiro i te waehere i roto i nga momo ahuatanga, mai i te momo tohu ki nga pepeke.

Heoi, i te mea ka whakaatuhia nga hua tātaritanga ki te atanga o te rohe o te IDE o te kaiwhakawhanake, he iti noa te whai hua ki te tukanga whanaketanga. Te tātari pateko me tutuki I te mea ko te mahi tuatahi o te paipa hanga, ko ona hua me tautuhi i nga kuaha o te kounga, a ka ngaro te hanga ki te kore e paahitia nga keeti kounga. E mohiotia ana ko TeamCity CI kua whakauruhia ki te IDEA. Engari ahakoa kare koe e whakamahi i te TeamCity, ka taea e koe te ngana ki te whakahaere i nga tirotirohanga IDEA ki tetahi atu tūmau CI. Ko taku whakaaro kia kite koe me pehea e taea ai tenei ma te whakamahi i te IDEA Community Edition, Jenkins me nga Whakatupato NG mono.

Hipanga 1. Whakahaerehia te tātaritanga i roto i te ipu ka whiwhi ripoata

I te tuatahi, ko te whakaaro ki te whakahaere IDE (tono papamahi!) i roto i te punaha CI karekau he atanga kauwhata he ahua pohehe, he tino raruraru. Waimarie, kua whakaratohia e nga kaihanga IDEA te kaha ki te whakahaere whakahōputu waehere и nga tirotirohanga mai i te rarangi whakahau. I tua atu, ki te whakahaere i te IDEA i tenei aratau, kaore e hiahiatia he punaha whakairoiro ka taea enei mahi ki runga i nga kaitoro me te anga kuputuhi.

Ka whakarewahia nga tirohanga ma te whakamahi i te tuhinga bin/inspect.sh mai i te whaiaronga whakaurunga IDEA. Ko nga tawhā e hiahiatia ana ko:

  • te ara katoa ki te kaupapa (kaore nga whanaunga e tautokona),
  • ara ki te kōnae .xml me nga tautuhinga tirotiro (i te nuinga o te waa kei roto i te kaupapa i .idea/inspectionProfiles/Project_Default.xml),
  • te ara katoa ki te kōpaki ka penapena nga konae .xml me nga purongo mo nga hua tātaritanga.

I tua atu, ko te tumanako tera

  • te ara ki te Java SDK ka whirihorahia i roto i te IDE, ki te kore e mahi te tātari. Ko enei tautuhinga kei roto i te konae whirihoranga jdk.table.xml i roto i te kōpaki whirihoranga o te ao IDEA. Ko te whirihoranga o te ao IDEA ake kei roto i te raarangi kaainga o te kaiwhakamahi ma te taunoa, engari ko tenei waahi ka taea te whakaatu marama i roto i te kōnae idea.properties.
  • Ko te kaupapa kua wetewetehia he kaupapa IDEA whaimana, me tuku e koe etahi o nga konae kaore e arohia ki te mana putanga, ara:
    • .idea/inspectionProfiles/Project_Default.xml - nga tautuhinga kaitirotiro, ka tino whakamahia i te wa e tirotirohia ana i roto i te ipu,
    • .idea/modules.xml - ki te kore ka puta te hapa 'Karekau he waahanga o tenei kaupapa',
    • .idea/misc.xml - ki te kore ka puta te hapa 'Kaore te JDK i whirihora tika mo tenei kaupapa',
    • *.iml-файлы — ki te kore ka puta he hapa mo te JDK kaore i whirihorahia i roto i te kōwae.

Ahakoa ko enei konae kei te nuinga o te waa kei roto .gitignore, karekau he korero e pa ana ki te taiao o tetahi kaiwhakawhanake - he rereke, hei tauira, he konae workspace.xml, kei reira nga korero penei, na reira kaore he take ki te tuku.

Ko te otinga e kitea ana ko te kiki i te JDK me te IDEA Community Edition ki roto i tetahi ipu kua rite ki te "whakapae" ki nga kaupapa kua tātarihia. Me whiriwhiri he ipu turanga tika, a koinei to tatou 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

Te whakamahi i te kōwhiringa idea.config.path I peia e matou a IDEA ki te rapu i tana whirihoranga o te ao i roto i te kōpaki /etc/idea, na te mea ko te kōpaki kaainga o te kaiwhakamahi i te wa e mahi ana i roto i te CI he mea kore mohio, he maha tonu te ngaro.

Koinei te ahua o te konae i kape ki te ipu: jdk.table.xml, kei roto nga huarahi ki te OpenJDK kua whakauruhia ki roto i te ipu (he rite te konae mai i to whaiaronga me nga tautuhinga IDEA ka taea te tango hei turanga):

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>

Ko te ahua kua oti Kei te waatea i te Docker Hub.

I mua i te neke haere, tirohia kei te rere te kaitirotiro IDEA i roto i te ipu:

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

Kia pai te whakahaere o te tātari, me te maha o nga konae .xml me nga purongo kaitirotiro ka puta ki te kōpakiroto target/idea_inspections.

Inaianei kua kore e ruarua ka taea e te kaitirotiro IDEA te whakahaere mokemoke i roto i tetahi taiao CI, ka neke atu ki te waahanga tuarua.

Hipanga 2. Whakaatu me te tātari i te ripoata

Ko te tango i te purongo i roto i te ahua o nga konae .xml te haurua o te pakanga, inaianei me hanga e koe kia taea e te tangata te panui. Me whakamahi ano hoki ona hua ki nga kuaha o te kounga - te arorau mo te whakatau mena ka paahi, ka taka ranei te whakarereketanga i runga i nga paearu kounga.

Ka awhina tenei i a maatau Whakatupato Jenkins NG monomai, i tukuna i te Hanuere 2019. Na tona taenga mai, he maha nga mono takitahi mo te mahi me nga hua tātaritanga pateko i Jenkins (CheckStyle, FindBugs, PMD, me etahi atu) kua tohua inaianei he tawhito.

E rua nga waahanga o te mono:

  • he maha nga kaikohi karere kaitirotiro (rārangi katoa kei roto katoa nga kaitirotiro e mohiotia ana e te pūtaiao mai i AcuCobol ki ZPT Lint),
  • he kaititiro purongo kotahi mo ratou katoa.

Kei roto i te rarangi o nga mea ka taea e Warnings NG te tātari he whakatupato mai i te kaiwhakaiti Java me nga whakatupato mai i nga raarangi mahi a Maven: ahakoa ka kitea i nga wa katoa, he iti noa te tātari. Kei roto hoki nga purongo IntelliJ IDEA ki te rarangi o nga whakatakotoranga e mohiotia ana.

I te mea he hou te mono, he pai te taunekeneke ki a Jenkins Pipeline. Ko te ahua o te hanga me tana whai waahi ka penei te ahua (ka korero noa matou ki te mono he aha te whakatakotoranga ripoata e mohio ana matou me nga konae hei karapahia):

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

He penei te ahua o te atanga ripoata:

Te whakahaere i nga tirotirohanga IntelliJ IDEA ki a Jenkins

He watea, he ao tenei atanga mo nga kaitirotiro mohio katoa. Kei roto he hoahoa tauwhitiwhiti o te tohatoha o nga kitenga ma te waahanga me te kauwhata o te hihiri o nga huringa o te maha o nga kitenga. Ka taea e koe te rapu tere i te matiti kei raro o te wharangi. Ko te mea anake kaore i mahi tika mo nga tirohanga IDEA ko te kaha ki te tirotiro tika i nga waehere i Jenkins (ahakoa mo etahi atu ripoata, hei tauira Checkstyle, ka taea e tenei mono te mahi ataahua). Te ahua nei he pepeke tenei kei roto i te korero korero mo te IDEA me whakatika.

I roto i nga ahuatanga o Warnings NG ko te kaha ki te whakahiato i nga kitenga mai i nga puna rereke i roto i te ripoata me te hotaka Quality Gates, tae atu ki te "ratchet" mo te huihuinga tohutoro. Kei te waatea etahi tuhinga hotaka o Quality Gates konei - heoi, kaore i oti, me titiro koe ki te waehere puna. I tetahi atu taha, mo te tino mana whakahaere mo nga mea e tupu ana, ka taea te whakahaere takitahi te "ratchet" (tirohia taku Tuhinga o mua mo tenei kaupapa).

mutunga

I mua i te tiimata ki te whakarite i tenei rauemi, i whakatau ahau ki te rapu: kua tuhia e tetahi mo tenei kaupapa mo Habré? I kitea e ahau anake uiui 2017 с lanite wahi e mea ana ia:

Ki taku mohio, kaore he whakauru ki a Jenkins, he mono maven ranei […] Ko te tikanga, ka taea e tetahi kaingākau te whakahoa ki te IDEA Community Edition me Jenkins, he tokomaha ka whai hua mai i tenei.

Kaati, e rua tau i muri mai ka whai Whakatupato NG Monohiko, ka mutu kua puta tenei whakahoahoa!

Source: will.com

Tāpiri i te kōrero