풀릭을 트리거로 jenkins에서 자동 테스트 및 정적 분석

자신의 제품에서는 젊은이도 많다는 것으로, 최소한의 리뷰를 jenkins에게 하도록 했습니다.
(Android 주요 기사이지만 비슷한 것은 ios에서도 가능합니다)

findBugs/PMD/CheckStyle 도입



구성 파일 추가



모든 위치에 각 도구의 구성 파일을 배치합니다.
여기에서는 프로젝트의 루트에 config 폴더를 준비하고 배치했습니다.
(파일 이름은 checkstyle-config.xml, android-exclude-filter.xml, pmd-ruleset.xml로 설정했습니다)
※구체적인 설정 파일은 생략합니다

gradle 수정



이 도구에 대한 gradle을 config 폴더에 새로 만듭니다.

quality.gradle
apply plugin: 'checkstyle'
apply plugin: 'findbugs'
apply plugin: 'pmd'

dependencies {
    checkstyle 'com.puppycrawl.tools:checkstyle:8.1'
}

def qualityConfigDir = "$project.rootDir/config"
def reportsDir = "$project.rootDir/build/reports" // 解析結果の出力パス

check.dependsOn 'checkstyle', 'findbugs', 'pmd'

task checkstyle(type: Checkstyle) {
    group = "quality"
    ignoreFailures = true
    configFile file("$qualityConfigDir/checkstyle-config.xml")
    source 'src'
    include '**/*.java'

    reports {
        xml.enabled = true
        html.enabled = true
        xml {
            destination "$reportsDir/checkstyle.xml"
        }
        html {
            destination "$reportsDir/checkstyle.html"
        }
    }

    classpath = files()
}

task findbugs(type: FindBugs) {
    group = "quality"
    ignoreFailures = true
    effort = "max"
    reportLevel = "high" // どのレベルの報告まで対応するかで変更
    excludeFilter = new File("$qualityConfigDir/android-exclude-filter.xml")
    classes = files("build/intermediates/classes/")
    source 'src/main'
    include '**/*.java'
    exclude '**/gen/**'
    reports {
        xml.enabled = true
        html.enabled = false
        xml {
            destination "$reportsDir/findbugs_report.xml"
        }
        html {
            destination "$reportsDir/findbugs_report.html"
        }
    }
    classpath = files()
}

task pmd(type: Pmd) {
    group = "quality"
    ruleSetFiles = files("$qualityConfigDir/pmd-ruleset.xml")
    ignoreFailures = true
    ruleSets = []

    source 'src'
    include '**/*.java'
    exclude '**/gen/**'

    reports {
        xml.enabled = true
        html.enabled = true
        xml {
            destination "$reportsDir/pmd.xml"
        }
        html {
            destination "$reportsDir/pmd.html"
        }
    }
}

프로젝트 gradle에 다음을 추가합니다.

build.gradle
buildscript {
    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
    }
}
apply plugin: 'com.android.application'
apply from: '../config/quality.gradle' // ここを追加
...

bitbucket 설정



프로젝트 설정 > 후크
포스트 리시브(Bitbucket Server Webhook to Jenkins) 설정
jenkins URL에 jenkins 서버의 URL을 설정 (jenkins 본체의 URL로, job의 패스는 불필요)

jenkins 설정



소스 코드 관리 (git)




"고급 설정"을 선택하면 위와 같은 화면이 됩니다.
명칭은 공란으로 OK, Refspec와 브랜치 지정자는 공식에 있도록 아래와 같은 문자열을 입력해 주세요.

Refspec
+refs/pull-requests/*:refs/remotes/origin/pr/*

브랜치 지정자
origin/pr/${pullRequestId}/merge

빌드 트리거




'SCM 폴링'을 체크하고 스케줄을 비워 주십시오.
「post-commit 훅을 무시」는 환경에 다르다고 하는 소문이므로, 움직이지 않으면 ON/OFF를 전환해 시험해 주세요…

Stash Pull Requests Builder




Cron에는 "* * * * *"를 지정하고 stash host에는 stash URL을 지정하십시오.
Project,RepositoryName은 모니터링할 프로젝트/리포지토리 이름을 설정합니다.

빌드 후 처리



CheckStyle/FindBugs 집계



플러그인으로 아래와 같이 해 두면 보기 쉽습니다.


Notify Stash Instance



Commit SHA-1에는 다음과 같이 입력하십시오.
('고급 설정'내에 있음)

CommitSHA-1
${sourceCommitHash}



결과



이런 식으로 보입니다.


맞춤 댓글



풀릭에 기재된 코멘트는 커스터마이즈 가능합니다.
위의 캡처와 같이 각 도구의 경고 수를 주석으로 출력하려고합니다.


측정 결과 수의 환경 변수화



여기서 PMD_RESULE과 FB_RESULTS는 환경 변수이지만 측정 결과 수를 환경 변수로 저장하여 실현됩니다. 방법은 여기에 썼으므로, ​​참조하십시오.
htps : // 코 m / m 문지름 / ms / 에 f55 굳 48b2064873 2b

측정 결과 수의 집계



해석 결과 파일을 스크립트로 꾸준히 해석하고 있습니다.
덧붙여서 스크립트는 서투르기 때문에 더 현명한 방법은 있다고 생각합니다…

CheckStyle
CS_TERM=\<td\>[0-9]*\<\/td\>\<td\>[0-9]*\<\/td\>
CS_RESULT=$(grep $CS_TERM ./build/reports/checkstyle.html | sed -r "s/[^0-9]+([0-9]+)[^0-9]+([0-9]+)[^0-9]+/\2/")
echo -e "CS_RESULTS=$CS_RESULT" >> analytics_result.txt

FindBugs
FB_TERM=\<BugInstance
FB_RESULT=$(grep -c $FB_TERM ./build/reports/findbugs_report.xml)
echo -e "FB_RESULTS=$FB_RESULT" >> analytics_result.txt

PMD
PMD_TERM=var/lib/jenkins/jobs/BUS_BUILD_CHECKER/workspace/
PMD_RESULT=$(grep -c $PMD_TERM ./build/reports/pmd.html)
echo -e "PMD_RESULTS=$PMD_RESULT" >> analytics_result.txt

예에서는 해석 결과를 analytics_result.txt라는 텍스트 파일에 출력하고 있으므로, 환경 변수의 인젝트로 analytics_result.txt를 읽어 주면 커스텀 코멘트에도 사용할 수 있게 됩니다.

좋은 웹페이지 즐겨찾기