본문 바로가기

현재

AGJS 활용 (7-Jenkins Pipeline Maven & Gradle 설정)

1. Jenkins Configure Global Security  구성

2. Jenkins Pipeline 으로 새로운 Item 등록

3. GitLab에 등록되어 파이프라인에 구동할 Maven git-jenkins-sonar 파일 설정

properties([gitLabConnection('KSTiGitlab'), buildDiscarder(logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '30', numToKeepStr: '30'))])

def jobname=env.JOB_BASE_NAME

node {
    stage ('Clone') {
        git url: 'https://m1-dev-gitlab.xxxxxxxx/xxxxxx/poi.git', branch: 'master', credentialsId: 'kim.yhee'
    }
    stage ('Artifacts Build') {
        mvnHome = tool '3.6.2'          
        def mvn_cli = """
        ${mvnHome}/bin/mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent install -Dmaven.test.skip=false --batch-mode -V -U -e
        checkstyle:checkstyle pmd:pmd pmd:cpd findbugs:findbugs
        """
        sh mvn_cli.replaceAll('\n', ' ')
    }
    

    stage('Code Style Analysis') {
        def checkstyle = scanForIssues tool: [$class: 'CheckStyle'], pattern: '**/target/checkstyle-result.xml'
        publishIssues issues:[checkstyle]
    
        def pmd = scanForIssues tool: [$class: 'Pmd'], pattern: '**/target/pmd.xml'
        publishIssues issues:[pmd]
         
        def cpd = scanForIssues tool: [$class: 'Cpd'], pattern: '**/target/cpd.xml'
        publishIssues issues:[cpd]
         
        def findbugs = scanForIssues tool: [$class: 'FindBugs'], pattern: '**/target/findbugsXml.xml'
        publishIssues issues:[findbugs]
 
        def maven = scanForIssues tool: [$class: 'MavenConsole']
        publishIssues issues:[maven]
         
        publishIssues id:'analysis', name:'White Mountains Issues', 
            issues:[checkstyle, pmd, findbugs], 
            filters:[includePackage('io.jenkins.plugins.analysis.*')]          
        
        archiveArtifacts artifacts: 'target/*.jar', fingerprint: true
    }
    
    stage('Sonarqube') {

        def scannerHome = tool 'KSTiSonarScanner';
        withSonarQubeEnv('KSTiSonarQube') {
            def sonar_cli = """
            ${scannerHome}/bin/sonar-scanner
            -Dsonar.projectKey=poi
            -Dsonar.projectName=poi
            -Dsonar.projectVersion=1.0.0
            -Dsonar.sources='src'
            -Dsonar.java.libraries=target/*.jar
            -Dsonar.java.binaries=target/classes
            -Dsonar.junit.reportsPath=target/surefire-reports
            -Dsonar.cobertura.reportPath=target/site/cobertura/coverage.xml
            -Dsonar.dynamicAnalysis=reuseReports
            -Dsonar.java.coveragePlugin=plugin
            """
            sh sonar_cli.replaceAll('\n', ' ')
        }          
    }      

    stage ('Send Result Message'){
        sh "curl -i -X POST -H 'Content-Type: application/json' -d '{\"channel\": \"@Jenkins\",\"text\": \"Jenkins Job **_'${jobname}'_** is Success!:tada:\"}' https://macaronmsg.duckdns.org/hooks/wg7og7urkjyzugh38igjtnac8h"
    }
}

Jenkins관리 Jenkins Global Tool Configuration의 SonarQube Scanner에 등록된 명칭(def scannerHome = tool 'KSTiSonarScanner'; )과 Maven Name과 일치(mvnHome = tool '3.6.2' )하고 Jenkins관리 시스템 설정의 SonarQube servers의 Name(KSTiSonarQube)과 일치한다

4. GitLab에 등록되어 파이프라인에 구동할 Gradle git-jenkins-sonar 파일 설정

properties([gitLabConnection('KSTiGitlab'), buildDiscarder(logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '30', numToKeepStr: '30'))])

def jobname=env.JOB_BASE_NAME

node {
    stage ('Clone') {
        git url: 'https://m1-dev-gitlab.xxxxxxxx/xxxxxxxx/sbs.git', branch: 'master', credentialsId: 'kim.yhee'
    }
    stage ('Artifacts Build') {
        def gradle_cli = """
        /var/lib/jenkins/workspace/sbs/gradlew clean build
        """
        sh gradle_cli.replaceAll('\n', ' ')
    }

    stage('Sonarqube') {
        def scannerHome = tool 'KSTiSonarScanner';
        withSonarQubeEnv('KSTiSonarQube') {
            def sonar_cli = """
            ${scannerHome}/bin/sonar-scanner
            -Dsonar.projectKey=sbs
            -Dsonar.projectName=sbs
            -Dsonar.projectVersion=1.0.0
            -Dsonar.sources='src'
-Dsonar.java.binaries=build/classes
-Dsonar.junit.reportsPath=build/surefire-reports
            -Dsonar.cobertura.reportPath=build/site/cobertura/coverage.xml
            -Dsonar.dynamicAnalysis=reuseReports
-Dsonar.java.coveragePlugin=plugin
            """
            sh sonar_cli.replaceAll('\n', ' ')
        }

    }

    stage ('Send Result Message'){
        sh "curl -i -X POST -H 'Content-Type: application/json' -d '{\"channel\": \"@Jenkins\",\"text\": \"Jenkins Job **_'${jobname}'_** is Success!:tada:\"}' https://macaronmsg.duckdns.org/hooks/wg7og7urkjyzugh38igjtnac8h"
    }
}