pipeline { agent { label 'test-agent' } environment { IMAGE_NAME = 'ghcr.io/sdpxultimate/jenkins-assignment' REGISTRY_CREDENTIALS = credentials('ghcr-credentials') APP_NAME = 'web-api' ROBOT_REPO = 'https://github.com/sdpxultimate/jenkins-robot' ROBOT_BRANCH = 'main' } stages { stage('Install & Run Unittest') { steps { sh "pip install -r requirements.txt" sh "python3 unit_test.py" } } stage('Create Image') { steps { sh "docker build -t ${IMAGE_NAME}:${BUILD_ID} ." } } stage('Run Container & Run Robot Testing') { steps { sh "docker run -dp 5000:5000 --name ${APP_NAME} ${IMAGE_NAME}:${BUILD_ID}" git branch: "${ROBOT_BRANCH}", url: "${ROBOT_REPO}" sh "robot plus.robot" } post { always { sh returnStatus: true, script: "docker stop ${APP_NAME}" sh returnStatus: true, script: "docker rm ${APP_NAME}" } } } stage('Push Image to Registry') { steps { sh 'echo $REGISTRY_CREDENTIALS_PSW | docker login ghcr.io -u $REGISTRY_CREDENTIALS_USR --password-stdin' sh "docker push ${IMAGE_NAME}:${BUILD_ID}" } } stage('Deploy') { agent { label 'pre-prod-agent' } steps { sh returnStatus: true, script: "docker stop ${APP_NAME}" sh returnStatus: true, script: "docker rm ${APP_NAME}" sh 'echo $REGISTRY_CREDENTIALS_PSW | docker login ghcr.io -u $REGISTRY_CREDENTIALS_USR --password-stdin' sh "docker run -dp 5001:5000 --name ${APP_NAME} ${IMAGE_NAME}:${BUILD_ID}" } } } post { always { sh "docker system prune -af" } } }