From 2c67a10d4a1656c3ae01d2dfadf4c2e0bda4b63b Mon Sep 17 00:00:00 2001 From: Ionel Andrei Cataon Date: Thu, 12 Feb 2026 16:40:23 +0200 Subject: [PATCH] pj2 --- project2/famousquotes.py | 27 ++++++++-------- project2/jenkinsfile | 69 ++++++++++++++++------------------------ 2 files changed, 42 insertions(+), 54 deletions(-) diff --git a/project2/famousquotes.py b/project2/famousquotes.py index 7bfafd8..e7121d0 100644 --- a/project2/famousquotes.py +++ b/project2/famousquotes.py @@ -2,32 +2,33 @@ import requests import os import sys -# Luăm URL-ul din variabila de mediu sau folosim unul default API_URL = os.getenv("QUOTE_API_URL", "https://api.quotable.io/random") def get_quote(): try: - response = requests.get(API_URL, timeout=10, verify=True) + # Folosim verify=False doar dacă avem în continuare erori de SSL pe serverul Jenkins + response = requests.get(API_URL, timeout=10) response.raise_for_status() data = response.json() - if isinstance(data, list): - data = data[0] + if isinstance(data, list): data = data[0] quote = data.get('content') or data.get('advice') or data.get('q') or "No quote found." author = data.get('author') or data.get('a') or "Unknown Author" - # Afișăm în consola Jenkins pentru debug - print(f"Citat extras: {quote} - {author}") - - with open("quote.txt", "w", encoding="utf-8") as f: - f.write(f"📜 *\"{quote}\"* \n\n✍️ **{author}**") + # Mesaj formatat pentru Discord + full_message = f"📜 *\"{quote}\"* \n\n✍️ **{author}**" + + # Salvăm în folderul /app (care este mapat cu volumul Jenkins) + with open("/app/quote.txt", "w", encoding="utf-8") as f: + f.write(full_message) + print(f"Succes! Citat salvat: {author}") + except Exception as e: - print(f"Eroare la apelarea API-ului: {e}") - # În caz de eroare, scriem un mesaj de fallback în fișier - with open("quote.txt", "w", encoding="utf-8") as f: - f.write(f"⚠️ Nu am putut recupera citatul, dar build-ul a reușit.") + print(f"Eroare: {e}") + with open("/app/quote.txt", "w", encoding="utf-8") as f: + f.write("⚠️ Nu am putut prelua citatul, dar aplicația a rulat.") sys.exit(1) if __name__ == "__main__": diff --git a/project2/jenkinsfile b/project2/jenkinsfile index cf71f0b..0df5f5b 100644 --- a/project2/jenkinsfile +++ b/project2/jenkinsfile @@ -2,32 +2,21 @@ pipeline { agent any stages { - stage('Checkout') { - steps { - checkout scm - } - } - - stage('Build Image') { + stage('Build & Run') { steps { script { dir('project2') { - // Construim imaginea aplicației sh "docker build -t quotes-app ." - } - } - } - } - - stage('Run & Save Quote') { - steps { - script { - dir('project2') { - echo "🚀 Rulăm aplicația și salvăm citatul..." - /* -v \$(pwd):/app -> mapează folderul curent din Jenkins în /app din container. - Astfel, quote.txt creat de Python va apărea direct în folderul project2. - */ - sh "docker run --rm --network host -v \$(pwd):/app -e QUOTE_API_URL='https://api.quotable.io/random' quotes-app" + + // 1. Rulăm containerul și îi dăm un nume pentru a putea copia din el + // Nu folosim -v aici pentru a evita eroarea "No such file" + sh "docker run --name temp-container --network host -e QUOTE_API_URL='https://api.quotable.io/random' quotes-app" + + // 2. Copiem fișierul generat din container în workspace-ul Jenkins + sh "docker cp temp-container:/app/quote.txt ." + + // 3. Ștergem containerul temporar + sh "docker rm temp-container" } } } @@ -35,28 +24,26 @@ pipeline { } post { - success { + always { script { - def discordUrl = "https://discord.com/api/webhooks/1471492658336891013/T5s6ZKZjJjDMHXc3k3jjZdk6m5EV12bKF1wda9d5I_gZJrsDZQ1m1m078IiLJWK38mqa" + def discordUrl = "WEBHOOK_TAU_AICI" + def status = currentBuild.result ?: 'SUCCESS' - def quoteContent = readFile('project2/quote.txt').trim() - - echo "Trimitem citatul pe Discord..." - sh """ - curl -X POST -H 'Content-Type: application/json' \ - -d '{"content": "✅ **Build #${env.BUILD_NUMBER} Finalizat cu Succes!**\\n\\n${quoteContent}"}' \ - '${discordUrl}' - """ - } - } - failure { - script { - def discordUrl = "https://discord.com/api/webhooks/1471492658336891013/T5s6ZKZjJjDMHXc3k3jjZdk6m5EV12bKF1wda9d5I_gZJrsDZQ1m1m078IiLJWK38mqa" - sh """ - curl -X POST -H 'Content-Type: application/json' \ - -d '{"content": "❌ **Build #${env.BUILD_NUMBER} a eșuat!** Verifică log-urile din Jenkins."}' \ - '${discordUrl}' + // Citim citatul (dacă există) sau punem un mesaj de eroare + def quoteText = "" + try { + quoteText = readFile('project2/quote.txt').trim() + } catch (e) { + quoteText = "Nu am putut citi citatul din fișier." + } + + def payload = """ + { + "content": "✅ **Build #${env.BUILD_NUMBER} Finalizat**\\n\\n${quoteText}" + } """ + + sh "curl -X POST -H 'Content-Type: application/json' -d '${payload}' '${discordUrl}'" } } }