diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000000..2729901a4ad --- /dev/null +++ b/Dockerfile @@ -0,0 +1,4 @@ +FROM openjdk:17-jdk-slim +WORKDIR /app +COPY target/spring-petclinic-*.jar app.jar +ENTRYPOINT ["java", "-jar", "/app/app.jar"] diff --git a/Dockerfile.agent b/Dockerfile.agent new file mode 100644 index 00000000000..15f114a3a4d --- /dev/null +++ b/Dockerfile.agent @@ -0,0 +1,13 @@ +FROM jenkins/inbound-agent:latest + +USER root + +RUN apt-get update && \ + apt-get install -y docker.io && \ + rm -rf /var/lib/apt/lists/* + +RUN apt-get update && \ + apt-get install -y maven && \ + rm -rf /var/lib/apt/lists/* + +USER jenkins diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 00000000000..db4d421cf4e --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,67 @@ +pipeline { + agent any + environment { + DOCKER_CREDENTIALS_ID = 'dockerhub-credentials' // ID DockerHub + } + stages { + stage('Checkstyle') { + when { + expression { env.BRANCH_NAME != 'main' } + } + steps { + sh './mvnw checkstyle:checkstyle' + archiveArtifacts artifacts: 'target/checkstyle-result.xml', fingerprint: true + } + } + stage('Test') { + when { + expression { env.BRANCH_NAME != 'main' } + } + steps { + sh './mvnw test' + } + } + stage('Build') { + when { + expression { env.BRANCH_NAME != 'main' } + } + steps { + sh './mvnw clean package -DskipTests' + } + } + stage('Create Docker Image') { + steps { + script { + withCredentials([usernamePassword(credentialsId: "${DOCKER_CREDENTIALS_ID}", usernameVariable: 'DOCKER_USERNAME', passwordVariable: 'DOCKER_PASSWORD')]) { + def repoName = env.BRANCH_NAME == 'main' ? 'main-jenkins' : 'mr-jenkins' + def tag = env.GIT_COMMIT?.substring(0, 7) ?: 'latest' + + // Build Docker image + sh """ + docker login -u \$DOCKER_USERNAME --password \$DOCKER_PASSWORD + docker build -t marijastopa/${repoName}:${tag} . + """ + + // Tag 'latest' for main branch + if (env.BRANCH_NAME == 'main') { + sh """ + docker tag marijastopa/${repoName}:${tag} marijastopa/${repoName}:latest + docker push marijastopa/${repoName}:latest + """ + } + + // Push SHA tag + sh """ + docker push marijastopa/${repoName}:${tag} + """ + } + } + } + } + } + post { + always { + echo "Pipeline execution completed." + } + } +}