pipeline{ agent any tools{ jdk 'jdk17' nodejs 'node16' } environment { SCANNER_HOME=tool 'sonar-scanner' } stages { stage('clean workspace'){ steps{ cleanWs() } } stage('Checkout from Git'){ steps{ git branch:'main', url:'https://github.com/AbdulAziz-uk/Netflix-clone.git' } } stage("Sonarqube Analysis "){ steps{ withSonarQubeEnv('sonar') { sh ''' $SCANNER_HOME/bin/sonar-scanner -Dsonar.projectName=Netflix \ -Dsonar.projectKey=Netflix ''' } } } stage("quality gate"){ steps { script { waitForQualityGate abortPipeline:false, credentialsId:'Sonar-token' } } } stage('Install Dependencies') { steps { sh "npm install" } } stage('OWASP FS SCAN') { steps { dependencyCheck additionalArguments: '--scan ./ --disableYarnAudit --disableNodeAudit', odcInstallation: 'DC' dependencyCheckPublisher pattern: '**/dependency-check-report.xml' } } stage('TRIVY FS SCAN') { steps { sh "trivy fs . > trivyfs.txt" } } stage("Docker Build & Push"){ steps{ script{ withDockerRegistry(credentialsId: 'docker-cred', toolName: 'docker'){ sh "docker build --build-arg TMDB_V3_API_KEY=6e58b651592be72ee24408895c99499d -t netflix ." sh "docker tag netflix aziz27uk/netflix:latest " sh "docker push aziz27uk/netflix:latest " } } } } stage("TRIVY"){ steps{ sh "trivy image aziz27uk/netflix:latest > trivyimage.txt" } } stage('Deploy to container'){ steps{ sh 'docker run -d --name netflix -p 8085:80 aziz27uk/netflix:latest' } } stage('Deploy to kubernets'){ steps{ script{ dir('Kubernetes') { withKubeConfig(caCertificate: '', clusterName: '', contextName: '', credentialsId: 'k8s', namespace: '', restrictKubeConfigAccess: false, serverUrl: '') { sh 'kubectl apply -f deployment.yml' sh 'kubectl apply -f service.yml' } } } } } } post { always { emailext attachLog: true, subject: "'${currentBuild.result}'", body: "Project: ${env.JOB_NAME}
" + "Build Number: ${env.BUILD_NUMBER}
" + "URL: ${env.BUILD_URL}
", to: 'postbox.aj99@gmail.com', attachmentsPattern: 'trivyfs.txt,trivyimage.txt' } } }