pipeline { agent any environment { APP_NAME = "petclinic" DOCKER_USER = "rizjosel" IMAGE_TAG = "${BUILD_NUMBER}" IMAGE_NAME = "${DOCKER_USER}/${APP_NAME}:${IMAGE_TAG}" } stages { stage('Notify GitHub Pending') { steps { setGitHubPullRequestStatus( context: 'Jenkins CI', status: 'PENDING' ) } } stage('CI / Unit Tests') { steps { sh './gradlew clean build -x test' junit 'build/test-results/test/*.xml' } } stage('CI / Docker Build') { steps { sh "docker build -t ${IMAGE_NAME} ." } } stage('CI / Docker Integration') { steps { script { try { sh "docker run -d --name ${APP_NAME}-test -p 8080:8080 ${IMAGE_NAME}" sh "sleep 15" sh "curl -f http://localhost:8080/actuator/health" } finally { sh "docker stop ${APP_NAME}-test || true" sh "docker rm ${APP_NAME}-test || true" } } } } } post { success { setGitHubPullRequestStatus( context: 'Jenkins CI', status: 'SUCCESS' ) } failure { setGitHubPullRequestStatus( context: 'Jenkins CI', status: 'FAILURE' ) } } }