diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..f1bd3b1 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,107 @@ +pipeline { + agent any + + environment { + // Replace with your Docker Hub username/organization + DOCKER_HUB_USERNAME = 'aimodocker' + // Use credentials for Docker Hub + DOCKER_CREDENTIALS = credentials('aimodocker') + // Replace with your image name + IMAGE_NAME = 'lcca-service' + // Replace with your docker compose service name + SERVICE_NAME = 'lcca-app' + // Variable for Git commit hash + GIT_COMMIT_HASH = '' + + // Replace with the SSH credentials for development server + // SSH_CREDENTIALS = credentials('backend-server-digitaltwin') + // SSH_CREDENTIALS_USR = 'aimo' + // SSH_SERVER_IP = '192.168.1.82' + } + + stages { + stage('Checkout') { + steps { + script { + // Checkout and get git commit hash + checkout scm + def commitHash = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim() + GIT_COMMIT_HASH = commitHash + echo "Git commit hash: ${GIT_COMMIT_HASH}" + } + } + } + + stage('Docker Login') { + steps { + sh ''' + echo ${DOCKER_CREDENTIALS_PSW} | docker login -u ${DOCKER_CREDENTIALS_USR} --password-stdin + ''' + } + } + + stage('Build Docker Image') { + steps { + script { + // Build with commit hash tag + sh """ + docker build -t ${DOCKER_HUB_USERNAME}/${IMAGE_NAME}:latest . + docker tag ${DOCKER_HUB_USERNAME}/${IMAGE_NAME}:latest ${DOCKER_HUB_USERNAME}/${IMAGE_NAME}:${GIT_COMMIT_HASH} + """ + } + } + } + + stage('Push to Docker Hub') { + steps { + sh """ + # Push both tags + docker push ${DOCKER_HUB_USERNAME}/${IMAGE_NAME}:${GIT_COMMIT_HASH} + docker push ${DOCKER_HUB_USERNAME}/${IMAGE_NAME}:latest + """ + } + } + + // stage('Deploy') { + // steps { + // script { + // sshagent(credentials: ['backend-server-digitaltwin']) { + // sh """ + // ssh -o StrictHostKeyChecking=no -p 12558 aimo@0.tcp.ap.ngrok.io ' + // cd ~/digital-twin/Docker + // sudo docker compose pull ${SERVICE_NAME} + // sudo docker compose up -d ${SERVICE_NAME} + // ' + // """ + // } + // } + // } + // } + } + + post { + always { + // Clean up + sh 'docker logout' + + // Clean up local images + script { + try { + sh """ + # Push both tags + docker rmi ${DOCKER_HUB_USERNAME}/${IMAGE_NAME}:${GIT_COMMIT_HASH} + docker rmi ${DOCKER_HUB_USERNAME}/${IMAGE_NAME}:latest + """ + } catch (err) { + echo "Failed to clean up images: ${err}" + } + } + } + success { + echo "Successfully built, pushed, and deployed Docker image with tags: latest and ${GIT_COMMIT_HASH}" + } + failure { + echo 'Failed to build/push/deploy Docker image!' + } + } +} \ No newline at end of file