ஜென்கின்ஸ் மீது IntelliJ IDEA ஆய்வுகளை இயக்கவும்

இன்டெல்லிஜே ஐடிஇஏ இன்று மிகவும் மேம்பட்ட நிலையான ஜாவா குறியீடு பகுப்பாய்வியைக் கொண்டுள்ளது, அதன் திறன்களின் அடிப்படையில், இது போன்ற "வீரர்களை" பின்தள்ளியுள்ளது. செக் ஸ்டைல் и ஸ்பாட்பக்ஸ். அதன் பல "ஆய்வுகள்" குறியீட்டு பாணியில் இருந்து சிறப்பியல்பு பிழைகள் வரை பல்வேறு அம்சங்களில் குறியீட்டைச் சரிபார்க்கிறது.

இருப்பினும், பகுப்பாய்வின் முடிவுகள் டெவலப்பரின் உள்ளூர் ஐடிஇயில் மட்டுமே காட்டப்படும் வரை, அவை வளர்ச்சி செயல்முறைக்கு சிறிதளவே பயன்படும். நிலையான பகுப்பாய்வு மேற்கொள்ளப்பட வேண்டும் கட்டுமானக் குழாயின் முதல் படியாக, அதன் முடிவுகள் தர வாயில்களைத் தீர்மானிக்க வேண்டும், மேலும் தரமான வாயில்கள் தோல்வியுற்றால் உருவாக்கம் தோல்வியடைய வேண்டும். TeamCity CI ஆனது IDEA உடன் ஒருங்கிணைக்கப்பட்டதாக அறியப்படுகிறது. நீங்கள் TeamCity ஐப் பயன்படுத்தாவிட்டாலும், வேறு எந்த CI சர்வரிலும் IDEA ஆய்வுகளை இயக்க முயற்சி செய்யலாம். IDEA சமூக பதிப்பு, ஜென்கின்ஸ் மற்றும் எச்சரிக்கைகள் NG செருகுநிரலைப் பயன்படுத்தி இதை எவ்வாறு செய்ய முடியும் என்பதைப் பார்க்க நான் முன்மொழிகிறேன்.

படி 1. பகுப்பாய்வை ஒரு கொள்கலனில் இயக்கி அறிக்கையைப் பெறவும்

முதலில், வரைகலை இடைமுகம் இல்லாத CI அமைப்பினுள் IDE (டெஸ்க்டாப் அப்ளிகேஷன்!) ஐ இயக்கும் யோசனை சந்தேகத்திற்குரியதாகவும் மிகவும் தொந்தரவாகவும் தோன்றலாம். அதிர்ஷ்டவசமாக, IDEA டெவலப்பர்கள் இயங்கும் திறனை வழங்கியுள்ளனர் குறியீடு வடிவமைத்தல் и ஆய்வுகள் கட்டளை வரியில் இருந்து. மேலும், இந்த பயன்முறையில் IDEA ஐ இயக்க, வரைகலை துணை அமைப்பு தேவையில்லை, மேலும் இந்த பணிகளை உரை ஷெல் மூலம் சேவையகங்களில் செய்ய முடியும்.

ஸ்கிரிப்டைப் பயன்படுத்தி ஆய்வுகள் தொடங்கப்படுகின்றன bin/inspect.sh IDEA நிறுவல் கோப்பகத்திலிருந்து. தேவையான அளவுருக்கள்:

  • திட்டத்திற்கான முழு பாதை (உறவினர்கள் ஆதரிக்கப்படவில்லை),
  • ஆய்வு அமைப்புகளுடன் .xml கோப்பிற்கான பாதை (பொதுவாக திட்டத்திற்குள் .idea/inspectionProfiles/Project_Default.xml இல் அமைந்துள்ளது),
  • பகுப்பாய்வு முடிவு அறிக்கைகளுடன் .xml கோப்புகள் சேமிக்கப்படும் கோப்புறைக்கான முழு பாதை.

மேலும், இது எதிர்பார்க்கப்படுகிறது

  • ஜாவா SDKக்கான பாதை IDE இல் கட்டமைக்கப்படும், இல்லையெனில் பகுப்பாய்வு வேலை செய்யாது. இந்த அமைப்புகள் உள்ளமைவு கோப்பில் உள்ளன. jdk.table.xml IDEA உலகளாவிய உள்ளமைவு கோப்புறையில். இயல்புநிலை உலகளாவிய IDEA உள்ளமைவு பயனரின் முகப்பு கோப்பகத்தில் உள்ளது, ஆனால் இந்த இடம் வெளிப்படையாக அமைக்க முடியும் கோப்பில் idea.properties.
  • பகுப்பாய்வு செய்யப்பட்ட திட்டமானது சரியான IDEA திட்டமாக இருக்க வேண்டும், அதற்காக வழக்கமாக புறக்கணிக்கப்படும் சில கோப்புகள் பதிப்புக் கட்டுப்பாட்டில் இருக்க வேண்டும், அதாவது:
    • .idea/inspectionProfiles/Project_Default.xml - பகுப்பாய்வி அமைப்புகள், ஒரு கொள்கலனில் ஆய்வுகளைத் தொடங்கும்போது அவை வெளிப்படையாகப் பயன்படுத்தப்படும்,
    • .idea/modules.xml - இல்லையெனில், 'இந்த திட்டத்தில் தொகுதிகள் இல்லை' என்ற பிழையைப் பெறுகிறோம்,
    • .idea/misc.xml - இல்லையெனில், 'இந்த திட்டத்திற்காக JDK சரியாக உள்ளமைக்கப்படவில்லை' என்ற பிழையைப் பெறுவோம்,
    • *.iml-файлы - இல்லையெனில் தொகுதியில் உள்ளமைக்கப்படாத JDK பற்றிய பிழையைப் பெறுவோம்.

இந்த கோப்புகள் பொதுவாக சேர்க்கப்படும் என்றாலும் .gitignore, ஒரு குறிப்பிட்ட டெவலப்பரின் சூழலுக்கு குறிப்பிட்ட எந்த தகவலையும் அவை கொண்டிருக்கவில்லை - எடுத்துக்காட்டாக, ஒரு கோப்பைப் போலல்லாமல் workspace.xml, அத்தகைய தகவல்கள், வெறும், அடங்கியுள்ளதால், அதைச் செய்ய வேண்டிய அவசியமில்லை.

தானே, JDK ஐ IDEA சமூகப் பதிப்போடு சேர்த்து, பகுப்பாய்வு செய்யப்பட்ட திட்டங்களில் "செட்" செய்யத் தயாராக இருக்கும் வடிவத்தில் ஒரு கொள்கலனில் பேக் செய்ய வழி அறிவுறுத்துகிறது. பொருத்தமான பேஸ் கன்டெய்னரைத் தேர்வு செய்வோம், இதோ நமக்குக் கிடைக்கும் 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

விருப்பத்தைப் பயன்படுத்துதல் idea.config.path IDEA ஐ அதன் உலகளாவிய உள்ளமைவை கோப்புறையில் தேடினோம் /etc/idea, CI இல் பணிச்சூழலில் உள்ள பயனரின் முகப்பு கோப்புறை காலவரையற்ற விஷயம் மற்றும் பெரும்பாலும் முற்றிலும் இல்லாதது.

கொள்கலனில் நகலெடுக்கப்பட்ட கோப்பு இப்படித்தான் இருக்கும் jdk.table.xml, கன்டெய்னருக்குள் நிறுவப்பட்ட OpenJDKக்கான பாதைகளைக் கொண்டுள்ளது (இது உங்கள் சொந்த IDEA அமைப்புகள் கோப்பகத்தில் இருந்து ஒத்த கோப்பை அடிப்படையாகக் கொண்டது):

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>

முடிக்கப்பட்ட படம் டோக்கர் ஹப்பில் கிடைக்கும்.

தொடர்வதற்கு முன், கண்டெய்னரில் IDEA பாகுபடுத்தி இயக்குவதைச் சோதிப்போம்:

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

பகுப்பாய்வு வெற்றிகரமாகச் செயல்பட வேண்டும், மேலும் பல .xml கோப்புகள் பகுப்பாய்வி அறிக்கைகளுடன் இலக்கு/ஐடியா_இன்ஸ்பெக்ஷன்ஸ் துணைக் கோப்புறையில் தோன்றும்.

IDEA பகுப்பாய்வியை எந்த CI சூழலிலும் ஆஃப்லைனில் இயக்க முடியும் என்பதில் எந்த சந்தேகமும் இல்லை, நாங்கள் இரண்டாவது படிக்குச் செல்கிறோம்.

படி 2. அறிக்கையை காட்சிப்படுத்தி பகுப்பாய்வு செய்யுங்கள்

.xml கோப்புகளின் வடிவத்தில் ஒரு அறிக்கையைப் பெறுவது பாதிப் போர், இப்போது அதை மனிதர்கள் படிக்கக்கூடியதாக மாற்ற வேண்டும். மேலும் அதன் முடிவுகள் தரமான வாயில்களில் பயன்படுத்தப்பட வேண்டும் - ஏற்றுக்கொள்ளப்பட்ட மாற்றம் தர அளவுகோல்களின்படி கடந்து செல்கிறதா அல்லது கடந்து செல்லவில்லையா என்பதை தீர்மானிப்பதற்கான தர்க்கம்.

இது நமக்கு உதவும் ஜென்கின்ஸ் எச்சரிக்கைகள் NG செருகுநிரல்இது ஜனவரி 2019 இல் வெளியிடப்பட்டது. அதன் அறிமுகத்துடன், ஜென்கின்ஸ் (CheckStyle, FindBugs, PMD, முதலியன) நிலையான பகுப்பாய்வு முடிவுகளுடன் பணிபுரிவதற்கான பல தனித்தனி செருகுநிரல்கள் இப்போது வழக்கற்றுப் போனதாகக் குறிக்கப்பட்டுள்ளன.

சொருகி இரண்டு பகுதிகளைக் கொண்டுள்ளது:

  • பல பகுப்பாய்வி செய்தி சேகரிப்பாளர்கள் (முழுமையான பட்டியல் AcuCobol முதல் ZPT லிண்ட் வரை அறிவியலுக்குத் தெரிந்த அனைத்து பகுப்பாய்விகளும் அடங்கும்)
  • அவர்கள் அனைவருக்கும் ஒரே அறிக்கை பார்வையாளர்.

எச்சரிக்கைகள் NG அலசக்கூடிய விஷயங்களின் பட்டியலில் ஜாவா கம்பைலர் எச்சரிக்கைகள் மற்றும் மேவன் எக்ஸிகியூஷன் பதிவுகளிலிருந்து எச்சரிக்கைகள் உள்ளன: அவை தொடர்ந்து பார்வையில் இருந்தாலும், அவை அரிதாகவே நோக்கத்துடன் பகுப்பாய்வு செய்யப்படுகின்றன. IntelliJ IDEA அறிக்கைகளும் அங்கீகரிக்கப்பட்ட வடிவங்களின் பட்டியலில் சேர்க்கப்பட்டுள்ளன.

செருகுநிரல் புதியது என்பதால், இது ஆரம்பத்தில் ஜென்கின்ஸ் பைப்லைனுடன் நன்றாக தொடர்பு கொள்கிறது. அவரது பங்கேற்புடன் கட்டமைக்கும் படி இது போல் இருக்கும் (நாங்கள் எந்த அறிக்கை வடிவத்தை அங்கீகரிக்கிறோம் மற்றும் எந்த கோப்புகளை ஸ்கேன் செய்ய வேண்டும் என்பதை சொருகிக்கு கூறுவோம்):

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

அறிக்கை இடைமுகம் இதுபோல் தெரிகிறது:

ஜென்கின்ஸ் மீது IntelliJ IDEA ஆய்வுகளை இயக்கவும்

அடையாளம் காணக்கூடிய அனைத்து பாகுபடுத்திகளுக்கும் இந்த இடைமுகம் உலகளாவியது என்பது வசதியானது. இது வகை வாரியாக கண்டுபிடிப்புகளின் விநியோகத்தின் ஊடாடும் விளக்கப்படம் மற்றும் கண்டுபிடிப்புகளின் எண்ணிக்கையில் ஏற்படும் மாற்றங்களின் இயக்கவியலின் வரைபடம் ஆகியவற்றைக் கொண்டுள்ளது. பக்கத்தின் கீழே உள்ள கட்டத்தில், நீங்கள் விரைவான தேடலைச் செய்யலாம். IDEA ஆய்வுகளுக்கு சரியாக வேலை செய்யாத ஒரே விஷயம், குறியீட்டை நேரடியாக Jenkins இல் உலாவக்கூடிய திறன் மட்டுமே (செக்ஸ்டைல் ​​போன்ற பிற அறிக்கைகளுக்கு, இந்த செருகுநிரல் அதை அழகாகச் செய்ய முடியும்). இது IDEA அறிக்கை பாகுபடுத்தியில் ஒரு பிழையாகத் தோன்றுகிறது, அதை சரிசெய்ய வேண்டும்.

எச்சரிக்கைகள் NG இன் அம்சங்களில், ஒரு அறிக்கை மற்றும் நிரல் தர கேட்ஸில் பல்வேறு ஆதாரங்களில் இருந்து கண்டுபிடிப்புகளை ஒருங்கிணைக்கும் திறன் உள்ளது, இதில் குறிப்பு சட்டசபைக்கான ராட்செட் அடங்கும். சில தர கேட்ஸ் நிரலாக்க ஆவணங்கள் உள்ளன இங்கே - இருப்பினும், இது முழுமையடையவில்லை, மேலும் நீங்கள் மூலத்தைப் பார்க்க வேண்டும். மறுபுறம், என்ன நடக்கிறது என்பதற்கான முழுமையான கட்டுப்பாட்டிற்கு, "ராட்செட்" சுயாதீனமாக செயல்படுத்தப்படலாம் (என்னைப் பார்க்கவும் முன்பதிவு இடுகை இந்த தீம் பற்றி).

முடிவுக்கு

இந்த பொருளைத் தயாரிக்கத் தொடங்குவதற்கு முன், நான் தேட முடிவு செய்தேன்: ஹப்ரேயில் இந்த தலைப்பில் யாராவது ஏற்கனவே எழுதியிருக்கிறார்களா? நான் தான் கண்டுபிடித்தேன் நேர்காணல் 2017 с லேனிஅது எங்கே சொல்கிறது:

எனக்குத் தெரிந்தவரை, ஜென்கின்ஸ் அல்லது மேவன் செருகுநிரலுடன் ஒருங்கிணைப்பு இல்லை [...] கொள்கையளவில், எந்தவொரு ஆர்வலரும் ஐடியா சமூக பதிப்பையும் ஜென்கின்ஸ் நண்பர்களையும் உருவாக்க முடியும், பலர் இதிலிருந்து பயனடைவார்கள்.

சரி, இரண்டு ஆண்டுகளுக்குப் பிறகு எங்களிடம் எச்சரிக்கைகள் NG செருகுநிரல் உள்ளது, இறுதியாக இந்த நட்பு உண்மையாகிவிட்டது!

ஆதாரம்: www.habr.com

கருத்தைச் சேர்