DevOpsGenel

CI-Continuous Integration Pipeline With Jenkins

Flow
-Nexus Setup
-Sonarqube Setup
-Security Group
-Plugins
-Integrate (Nexus-Sonarqube)
-Write Pipeline Script


1-Jenkins-Nexus-Sonarqube Setups
-Tüm infra tarafını AWS Free Tier üzerinde kuracağız. Amazon üzerinden free tier instance oluşturmak için aşağıdaki linki kullanıp bir hesap oluşturarak kullanmaya başlayabilirsiniz.
https://aws.amazon.com/tr/free/

-Instance kurulum scriptlerini aşağıdaki github repo’dan kendi ortamınıza clonelayabilirsiniz. Instance’ları launch ederken bu scriptler ile linux üzerinde kurulu bir şekilde ayağa kaldıracağız.

https://github.com/onuromertunc/jenkins-nexus-sonarqube.git

-Kurulumlar tamamlandı. Ve Makinelerimiz hazır durumda.

-Servis kontrolleri başarılı.

-Url Kontrolleri
Jenkins:8080 portu

SonarQube:80 portu

Nexus:8081 Portu

Kurulum Konfigürasyonları

*Jenkins kurulum sonrası konfigürasyonları için aşağıdaki linki ziyaret edebilirsiniz.
https://www.jenkins.io/doc/book/installing/linux/#unlocking-jenkins

*Nexus için kurulum ekranında belirtilen path’den şifreyi alıyoruz ve giriş yapıyoruz.

*SonarQube için default password ve username admin – admin

-Plugin Installation of Jenkins
-Nexus Integration Plugin
-Sonarqube Integration Plugin
-Git Integration Plugin
-Pipeline Maven Integration Plugin
-BuildTimeStamp Plugin

-Jenkins Plugin Install Menüsünden aşağıdaki pluginleri seçip install without restart butonuna basıyoruz.

-İlk pipeline oluşturuyoruz.

Pipeline scriptimizi aşağıdaki alana yapıştırıyoruz. Ve Save-Build

pipeline {
	agent any
	tools {
	    maven "MAVEN3"
	    jdk "OracleJDK8"
	}

	stages {
	    stage('Fetch code') {
            steps {
               git branch: 'vp-rem', url: 'https://github.com/devopshydclub/vprofile-repo.git'
            }

	    }

	    stage('Build'){
	        steps{
	           sh 'mvn install -DskipTests'
	        }

	        post {
	           success {
	              echo 'Now Archiving it...'
	              archiveArtifacts artifacts: '**/target/*.war'
	           }
	        }
	    }

	    stage('UNIT TEST') {
            steps{
                sh 'mvn test'
            }
        }
	}
}

-Build İşlemi başarılı.

-Artifact oluşturulmuş durumda. Bir sonraki adımda sonarqube ile code analiz yapacağız.

-Code Analysis via SonarQube

Detect vulnerability and functional errors. This not software testing, this is code testing.

-Entegrasyon için Jenkins dashboardda aşağıdaki menüden sonarqube scanner ekliyoruz.


-Aşağıdaki menüden ilgili ayarları girdikten sonra Sonarqube üzerinden oluşturduğumuz auth. Token giriyoruz.

Create Sonarqube Token

-Test için Jenkins > New Item > Create Pipeline

pipeline {
    agent any
    tools {
	    maven "MAVEN3"
	    jdk "OracleJDK8"
	}
    stages{
        stage('Fetch code') {
          steps{
              git branch: 'vp-rem', url:'https://github.com/devopshydclub/vprofile-repo.git'
          }  
        }

        stage('Build') {
            steps {
                sh 'mvn clean install -DskipTests'
            }
            post {
                success {
                    echo "Now Archiving."
                    archiveArtifacts artifacts: '**/*.war'
                }
            }
        }
        stage('Test'){
            steps {
                sh 'mvn test'
            }

        }

        stage('Checkstyle Analysis'){
            steps {
                sh 'mvn checkstyle:checkstyle'
            }
        }

        stage('Sonar Analysis') {
            environment {
                scannerHome = tool 'sonar4.7'
            }
            steps {
               withSonarQubeEnv('sonar') {
                   sh '''${scannerHome}/bin/sonar-scanner -Dsonar.projectKey=vprofile \
                   -Dsonar.projectName=vprofile \
                   -Dsonar.projectVersion=1.0 \
                   -Dsonar.sources=src/ \
                   -Dsonar.java.binaries=target/test-classes/com/visualpathit/account/controllerTest/ \
                   -Dsonar.junit.reportsPath=target/surefire-reports/ \
                   -Dsonar.jacoco.reportsPath=target/jacoco.exec \
                   -Dsonar.java.checkstyle.reportPaths=target/checkstyle-result.xml'''
              }
            }
        }

    }
}

-Save ve Build Now ile pipeline çalıştırıyoruz. Ve Testler başarılı durumda.

Upload Nexus Repository

Nexus üzerinde yeni bir repo oluşturuyoruz.

Authentication için Jenkins panelde bir hesap oluşturuyoruz.

-Yukarıda oluşturduğumuz pipeline’da bir stage daha oluşturuyoruz ve bu stage’de artifacti nexus repoya upload edeceğiz.

pipeline {
    agent any
    tools {
	    maven "MAVEN3"
	    jdk "OracleJDK8"
	}
    stages{
        stage('Fetch code') {
          steps{
              git branch: 'vp-rem', url:'https://github.com/devopshydclub/vprofile-repo.git'
          }  
        }

        stage('Build') {
            steps {
                sh 'mvn clean install -DskipTests'
            }
            post {
                success {
                    echo "Now Archiving."
                    archiveArtifacts artifacts: '**/*.war'
                }
            }
        }
        stage('Test'){
            steps {
                sh 'mvn test'
            }

        }

        stage('Checkstyle Analysis'){
            steps {
                sh 'mvn checkstyle:checkstyle'
            }
        }

        stage('Sonar Analysis') {
            environment {
                scannerHome = tool 'sonar4.7'
            }
            steps {
               withSonarQubeEnv('sonar') {
                   sh '''${scannerHome}/bin/sonar-scanner -Dsonar.projectKey=vprofile \
                   -Dsonar.projectName=vprofile \
                   -Dsonar.projectVersion=1.0 \
                   -Dsonar.sources=src/ \
                   -Dsonar.java.binaries=target/test-classes/com/visualpathit/account/controllerTest/ \
                   -Dsonar.junit.reportsPath=target/surefire-reports/ \
                   -Dsonar.jacoco.reportsPath=target/jacoco.exec \
                   -Dsonar.java.checkstyle.reportPaths=target/checkstyle-result.xml'''
              }
            }
        }

        

        stage("UploadArtifact"){
            steps{
                nexusArtifactUploader(
                  nexusVersion: 'nexus3',
                  protocol: 'http',
                  nexusUrl: '172.31.18.114:8081',
                  groupId: 'QA',
                  version: "${env.BUILD_ID}-${env.BUILD_TIMESTAMP}",
                  repository: 'vprofile-repo',
                  credentialsId: 'nexuslogin',
                  artifacts: [
                    [artifactId: 'vproapp',
                     classifier: '',
                     file: 'target/vprofile-v2.war',
                     type: 'war']
    ]
 )
            }
        }



    }
}

-Build Now komutu ile kodumuz git hub repository’den alınıp build,test,sonar analiz işlemlerinden sonra başarılı bir şekilde nexus repository’e upload edildi.