From ca8079078d02eeece79d68fe7f29418b35db8171 Mon Sep 17 00:00:00 2001 From: thienqb123456 Date: Tue, 24 Dec 2024 01:24:29 +0700 Subject: [PATCH] Thienvv - fix --- be/be-acp/cd-acp-backend.Jenkinsfile | 7 +++-- fe/fe-acp/cd-acp-frontend.Jenkinsfile | 38 ++++++++++++++++------- fe/fe-acp/ci-acp-frontend.Jenkinsfile | 43 +++++++++++++++++---------- 3 files changed, 60 insertions(+), 28 deletions(-) diff --git a/be/be-acp/cd-acp-backend.Jenkinsfile b/be/be-acp/cd-acp-backend.Jenkinsfile index 4bb595c..504091e 100644 --- a/be/be-acp/cd-acp-backend.Jenkinsfile +++ b/be/be-acp/cd-acp-backend.Jenkinsfile @@ -26,13 +26,13 @@ pipeline { } stages { - stage('Retrieve Artifact From CI Job') { + stage('Retrieve Artifact Metadata From CI Job') { steps { script { def ciJobBuildNumber = params.CI_JOB_BUILD_NUMBER echo "Retrieving artifact from CI_JOB_BUILD_NUMBER: ${ciJobBuildNumber}" - def metadata = handleArtifactAndMetadata(env.CI_JOB_NAME, ciJobBuildNumber, CI_JOB_METADATA_FILENAME) + def metadata = retrieveArtifactMetadataFromCIJOB(env.CI_JOB_NAME, ciJobBuildNumber, CI_JOB_METADATA_FILENAME) env.NEXUS_URL = metadata.nexusUrl echo "env.NEXUS_URL : ${env.NEXUS_URL}" @@ -156,7 +156,8 @@ def checkoutFromGit( } } -def handleArtifactAndMetadata(String ciJobName, String ciJobBuildNumber, String metadataFilename) { +//Hàm lấy artifact metadata file từ CI job +def retrieveArtifactMetadataFromCIJOB(String ciJobName, String ciJobBuildNumber, String metadataFilename) { try { def selector = null diff --git a/fe/fe-acp/cd-acp-frontend.Jenkinsfile b/fe/fe-acp/cd-acp-frontend.Jenkinsfile index d3c76ef..45d0266 100644 --- a/fe/fe-acp/cd-acp-frontend.Jenkinsfile +++ b/fe/fe-acp/cd-acp-frontend.Jenkinsfile @@ -2,17 +2,19 @@ pipeline { agent any parameters { choice(name: 'ENV', choices: ['uat', 'prod'], description: 'Choose Environment') + string(name: 'CI_JOB_BUILD_NUMBER', defaultValue: '', description: 'Build number of CI Job') + } environment { - JOB_BUILD_NAME = 'CI_FE_ACP' // tên của job build code - METADATA_FILENAME = "${params.ENV}_metadata.json" // tên file metadata đã được lưu từ job build code + PROJECT_NAME = 'acp' + CI_JOB_NAME = 'CI_FE_ACP' // tên của job build code + CI_JOB_METADATA_FILENAME = "${params.ENV}_${PROJECT_NAME}_metadata.json" // tên file metadata đã được lưu từ job build code GIT_PAT_CREDENTIALS_ID = 'd3de261f-8f1e-470b-b6d1-2fb4965e0129' // Id của Personal Access Token lưu trên jenkins GIT_ANSIBLE_URL = 'work.gct.com.vn/thienvv/nsg_ansible.git' GIT_ANSIBLE_BRANCH = 'v2' NEXUS_CREDENTIALS = credentials('Nexus_credential') - PROJECT_NAME = 'acp' ANSIBLE_SSH_CONNECTION = 'root@103.166.183.172 -p 24700' ANSIBLE_FOLDER_PATH = '/srv/ansible_v2' @@ -24,10 +26,16 @@ pipeline { } stages { - stage('Fetch Metadata File From Job Build') { + stage('Retrieve Artifact Metadata From CI Job') { steps { script { - def metadata = handleArtifactAndMetadata(env.JOB_BUILD_NAME, env.METADATA_FILENAME) + def ciJobBuildNumber = params.CI_JOB_BUILD_NUMBER + echo "Retrieving artifact from CI_JOB_BUILD_NUMBER: ${ciJobBuildNumber}" + + def metadata = retrieveArtifactMetadataFromCIJOB( + env.CI_JOB_NAME, ciJobBuildNumber, + CI_JOB_METADATA_FILENAME) + env.NEXUS_URL = metadata.nexusUrl echo "env.NEXUS_URL : ${env.NEXUS_URL}" @@ -88,8 +96,6 @@ pipeline { } } } - - } //Thienvv- hàm checkout git code ansible về máy ansible @@ -150,16 +156,27 @@ def checkoutFromGit( } } -def handleArtifactAndMetadata(String jobBuildName, String metadataFilename) { +//Hàm lấy artifact metadata file từ CI job +def retrieveArtifactMetadataFromCIJOB(String ciJobName, String ciJobBuildNumber, String metadataFilename) { try { + def selector = null + + if (ciJobBuildNumber != '') { // nếu ciJobBuildNumber khác rỗng thì + selector = [$class: 'SpecificBuildSelector', buildNumber: ciJobBuildNumber] // selector = ciJobBuildNumber + } else { //còn nếu ciJobBuildNumber = rỗng thì + selector = lastSuccessful() //selector = build thành công gần nhất + } // Sao chép artifact từ dự án khác - copyArtifacts projectName: jobBuildName, + copyArtifacts projectName: ciJobName, + selector: selector, filter: metadataFilename, target: '.' // Kiểm tra sự tồn tại của file metadata if (!fileExists(metadataFilename)) { - error "File '${metadataFilename}' after copyArtifacts!" + error "File ${metadataFilename} not found after copyArtifacts!" + } else { + echo "File ${metadataFilename} successfully copied." } // Đọc dữ liệu từ file JSON @@ -172,6 +189,7 @@ def handleArtifactAndMetadata(String jobBuildName, String metadataFilename) { } } + def triggerAnsible( String sshAnsibleConnection, String ansibleansibleFolderPath, diff --git a/fe/fe-acp/ci-acp-frontend.Jenkinsfile b/fe/fe-acp/ci-acp-frontend.Jenkinsfile index 0f2a19f..d281899 100644 --- a/fe/fe-acp/ci-acp-frontend.Jenkinsfile +++ b/fe/fe-acp/ci-acp-frontend.Jenkinsfile @@ -8,23 +8,24 @@ pipeline { GIT_URL = 'http://work.gct.com.vn/anhln/NSG_2025.git' GIT_BRANCH = 'main' + PROJECT_NAME = 'acp' TRIGGER_JOB_NAME = 'CD_FE_ACP' - METADATA_FILENAME = "${params.ENV}_metadata.json" + METADATA_FILENAME = "${params.ENV}_${PROJECT_NAME}_metadata.json" NUXT_BUILD_FOLDER_PATH = "${env.WORKSPACE}" OUTPUT_FOLDER_PATH = '.output' // đường dẫn đến .output (sau khi build xong) COMMAND_NUXT_INSTALL = 'npm install' //command install dependencies + COMMAND_NUXT_BUILD_UAT = 'yarn linux-builder' // command build COMMAND_NUXT_BUILD_PROD = 'yarn linux-builder:production' // command build - COMPRESSED_FILE_NAME = "${params.ENV}_output.zip" // tên file nén + COMPRESSED_FILE_NAME = "${params.ENV}_${PROJECT_NAME}_output.zip" // tên file nén COMPRESSED_FILE_PATH = "${env.WORKSPACE }/${COMPRESSED_FILE_NAME}" NEXUS_CREDENTIALS = credentials('Nexus_credential') - - NEXUS_REPO_URL = 'https://nexus.gct.com.vn/repository/acp-frontend' + NEXUS_REPO_URL = "https://nexus.gct.com.vn/repository/${PROJECT_NAME}-frontend" GROUP_ID = 'vn.kinhtedothi' - ARTIFACT_ID = "${params.ENV}-acp-frontend" + ARTIFACT_ID = "${params.ENV}-${PROJECT_NAME}-frontend" PACKAGING = 'zip' VERSION = '1.0.0' // Phiên bản cơ bản @@ -99,24 +100,36 @@ pipeline { env.VERSION, env.NEXUS_URL, env.NEXUS_ARTIFACT_NAME) + + echo "metadataFileName: ${env.METADATA_FILENAME}" + archiveArtifacts artifacts: "${env.METADATA_FILENAME}", allowEmptyArchive: false } } } post { - success { - echo "metadataFileName: ${env.METADATA_FILENAME}" - archiveArtifacts artifacts: "${env.METADATA_FILENAME}", allowEmptyArchive: false - - build job: "${TRIGGER_JOB_NAME}", parameters: [ - string(name: 'ENV', value: 'uat') ] } - - failure { - echo 'Pipeline failed!' - } always { echo 'Pipeline execution finished.' } + success { + echo "Job '${env.JOB_NAME}' completed successfully. Attempting to trigger Job '${TRIGGER_JOB_NAME}'..." + script { + try { + def buildResult = build job: "${TRIGGER_JOB_NAME}", parameters:[ + string(name: 'ENV', value: 'uat'), + string(name: 'CI_JOB_BUILD_NUMBER', value: env.BUILD_NUMBER) + ], + propagate: false + if (buildResult.result != 'SUCCESS') { + echo "[WARNING] Job 2 failed with result: ${buildResult.result}" + } + } + catch (Exception e) { + echo "[ERROR] Failed to trigger job: ${TRIGGER_JOB_NAME}. Error: ${e.message}" + throw e + } + } + } } }