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.
-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.