diff --git a/JenkinsFile b/JenkinsFile new file mode 100644 index 00000000..a0d0e9a5 --- /dev/null +++ b/JenkinsFile @@ -0,0 +1,80 @@ +pipeline { + agent any + parameters { + string(name: "BRANCH_NAME", defaultValue: "file/dev", description: "Specify the branch name to deploy") + } + + + + stages { + stage(age('Checkout') { + environment { + GITHUB_USER = vault(path: 'secret/github', key: 'username') + GITHUB_TOKEN = vault(path: 'secret/github', key: 'token') + } + steps { + git url: "https://${GITHUB_USER}:${GITHUB_TOKEN}@github.com/myorg/node-app.git", branch: 'main' + } + } + + stage('Test') { + steps { + sh 'npm ci' + sh 'npm test' + } + } + + stage('Build') { + when { + expression { + def pkgChanged = sh(script: "git diff --name-only HEAD~1 HEAD | grep package.json || true", returnStdout: true).trim() + def srcChanged = sh(script: "git diff --name-only HEAD~1 HEAD | grep -E '\\.js$|\\.ts$' || true", returnStdout: true).trim() + return (pkgChanged || srcChanged) + } + } + steps { + echo "Building project since changes detected..." + sh 'npm run build' + } + } + + stage('SonarQube Analysis') { + environment { + SONARQUBE_TOKEN = vault(path: 'secret/sonarqube', key: 'token') + SONARQUBE_URL = '3.238.111.36:9000' + } + steps { + withSonarQubeEnv('MySonarQubeServer') { + sh """ + npx sonar-scanner \ + -Dsonar.projectKey=node-app \ + -Dsonar.sources=. \ + -Dsonar.host.url=${SONARQUBE_URL} \ + -Dsonar.login=${SONARQUBE_TOKEN} + """ + } + } + } + + stage('Docker Build') { + steps { + sh """ + docker build -t myorg/node-app:${BUILD_NUMBER} . + """ + } + } + + stage('Docker Push') { + environment { + DOCKER_USER = vault(path: 'secret/dockerhub', key: 'username') + DOCKER_PASS = vault(path: 'secret/dockerhub', key: 'password') + } + steps { + sh """ + echo ${DOCKER_PASS} | docker login -u ${DOCKER_USER} --password-stdin + docker push myorg/node-app:${BUILD_NUMBER} + """ + } + } + } +}