From 24cc3491883d846c5b306fa940a20495b697e036 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E8=9A=82=E8=9A=81=E4=BA=91?= Date: Thu, 10 Sep 2026 22:09:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0CI/CD=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .jenkins/.env.yml | 2 +- .jenkins/.jenkinsfile | 155 ------------------- .jenkins/.jenkinsfile-k8s | 237 ---------------------------- .jenkins/.jenkinsfile2 | 316 -------------------------------------- .jenkins/Jenkinsfile | 2 +- .jenkins/Jenkinsfile2 | 3 - 6 files changed, 2 insertions(+), 713 deletions(-) delete mode 100644 .jenkins/.jenkinsfile delete mode 100644 .jenkins/.jenkinsfile-k8s delete mode 100644 .jenkins/.jenkinsfile2 delete mode 100644 .jenkins/Jenkinsfile2 diff --git a/.jenkins/.env.yml b/.jenkins/.env.yml index a86acc6..a7e7425 100644 --- a/.jenkins/.env.yml +++ b/.jenkins/.env.yml @@ -1,6 +1,6 @@ masterProfiles: ['','uat','prod'] Profiles: ['','dev'] -jobConfigFile: "xiaomayiConfig.yml" +jobConfigFile: "djangoadminConfig.yml" npmCompileCMD: | set -e \ && yarn config set registry https://registry.npmmirror.com \ diff --git a/.jenkins/.jenkinsfile b/.jenkins/.jenkinsfile deleted file mode 100644 index f1acd6a..0000000 --- a/.jenkins/.jenkinsfile +++ /dev/null @@ -1,155 +0,0 @@ -pipeline { - agent any - options { - buildDiscarder(logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '2', numToKeepStr: '2')) - } - stages { - stage('Setup Parameters & ENV') { - steps { - configFileProvider([configFile(fileId: 'xiaomayi-web', variable: 'settingsFile')]) { - script { - def config = readJSON file:"$settingsFile" - def jobNameStr = JOB_NAME.tokenize('/') as String[] - def jobName = jobNameStr[0] - def branchConfig = config."branchConfig"."${env.BRANCH_NAME}" - def serviceConfig = config."serviceConfig"."${jobName}" - - MAVEN_SET = branchConfig.MAVEN_SET - registry = branchConfig.registry - registryCredential = branchConfig.registryCredential - namespace = branchConfig.namespace - jenkinsAgent = branchConfig.jenkinsAgent - serverPort = branchConfig.serverPort - - echo "jobName: ${jobName}" - echo "The Maven Set XML for the ${env.BRANCH_NAME} branch is: ${MAVEN_SET}" - - projectName = serviceConfig.containerName - servicePath = serviceConfig.servicePath - jarPackageName = serviceConfig.jarPackageName - baseImage = "${registry}/xiaomayi-base/jdk:17.0.16-rocky8-dos" - port = serviceConfig."port" - jarFile = "${jarPackageName}" - jarFilePath = "${servicePath}/target" - - serverHost01= serviceConfig.serverHost01 - - echo "jarFile: ${jarFile}" - echo "jarFilePath: ${jarFilePath}" - echo "serverHost01: ${serverHost01}" - echo "serverPort:${serverPort}" - - if ("${env.BRANCH_NAME}" == "dev") { - serverIP01 = branchConfig."${serverHost01}" - echo "serverIP01: ${serverIP01}" - properties([ - parameters([ - string( - defaultValue: 'dev', - description: '编译参数', - name: 'PROFILES', - trim: true - ) - ]) - ]) - } else if ("${env.BRANCH_NAME}" == "test"){ - serverIP01 = branchConfig."${serverHost01}" - echo "serverIP01: ${serverIP01}" - properties([ - parameters([ - string( - defaultValue: 'test', - description: '编译参数', - name: 'PROFILES', - trim: true - ) - ]) - ]) - } else if ("${env.BRANCH_NAME}" == "master") { - properties([ - parameters([ - string( - defaultValue: 'prod', - description: '编译参数', - name: 'PROFILES', - trim: true - ) - ]) - ]) - serverIP01 = branchConfig."${serverHost01}" - echo "serverIP01: ${serverIP01}" - } else { - error("Build failed because failed to fetch settings for branch") - } - echo "The serverIP for the branch: ${env.BRANCH_NAME}, profile: ${PROFILES} is: ${serverIP01}" - } - } - - } - } - stage('Build') { - agent { -// docker { -// image "maven:3.8.6-openjdk-8" -// args '-v /etc/hosts:/etc/hosts:ro' -// label jenkinsAgent -// } - label { - label jenkinsAgent - } - } - steps { - configFileProvider([configFile(fileId: MAVEN_SET, variable: 'MAVEN_SETTINGS_XML')]) { - sh "/usr/local/maven/bin/mvn --settings ${MAVEN_SETTINGS_XML} dependency:purge-local-repository -Dinclude=com.xiaomayi -fpom.xml clean package -P${PROFILES} -Dmaven.test.skip=true" - sh "ls -lsh ${jarFilePath}/${jarFile}" - sh "md5sum ${jarFilePath}/${jarFile}" - // echo "MD5 ${jarFile}: `md5sum ${jarFilePath}/${jarFile}`" - } - } - - } - stage('Container Build') { - options { - skipDefaultCheckout() - } - agent { - label { - label jenkinsAgent - } - } - steps { - script { - echo "VAR_BASE_IMAGE: ${baseImage}" - echo "VAR_PORT: ${port}" - echo "VAR_JARFILE: ${jarFile}" - echo "VAR_JARFILE_PATH: ${jarFilePath}" - - docker.withRegistry("https://"+registry, registryCredential) { - dockerImage = docker.build("${namespace}/${projectName}:${PROFILES}-${env.BUILD_ID}", "--build-arg VAR_PROFILES=${PROFILES} --build-arg VAR_BASE_IMAGE=${baseImage} --build-arg VAR_PORT=${port} --build-arg VAR_JARFILE=${jarFile} --build-arg VAR_JARFILE_PATH=${jarFilePath} -f .jenkinsfile/Dockerfile ./") - dockerImage.push() - // dockerImage.push('latest') - } - sh "docker rmi -f ${namespace}/${projectName}:${PROFILES}-${env.BUILD_ID}" - sh "docker rmi -f ${registry}/${namespace}/${projectName}:${PROFILES}-${env.BUILD_ID}" - } -// cleanWs() - } - - } - stage("Deploy") { - options { - skipDefaultCheckout() - } - agent { - label { - label jenkinsAgent - } - } - steps { - script { - sh "ssh -o StrictHostKeyChecking=no esxi@${serverIP01} -p ${serverPort} 'cd /usr/local/docker/xiaomayi-web/; ./deploy.sh deploy ${projectName} ${PROFILES}-${env.BUILD_ID}'" - } - } - } - } -} \ No newline at end of file diff --git a/.jenkins/.jenkinsfile-k8s b/.jenkins/.jenkinsfile-k8s deleted file mode 100644 index 9eb536b..0000000 --- a/.jenkins/.jenkinsfile-k8s +++ /dev/null @@ -1,237 +0,0 @@ -pipeline { - agent any - options { - buildDiscarder(logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '2', numToKeepStr: '2')) - } - stages { - stage('Setup Parameters & ENV') { - options { - skipDefaultCheckout() - } - agent { - label "${env.BRANCH_NAME}" - } - steps { - checkout scmGit([ - branches: [[name: '*/master']], - userRemoteConfigs: [[ - credentialsId: 'c9b5eae2-5df5-485f-bebd-9cd5393b03e1', - url: 'http://192.168.10.202:3000/cicd/pipeline-files.git' - ]], - extensions: [[ - $class: 'RelativeTargetDirectory', - relativeTargetDir: '.pipeline-files' - ]], - ]) - script { - def settingsJson = readJSON file: ".pipeline-files/jenkins-file/xiaomayi.k8s.JsonConfig.json" - // def config = readJSON file:"$settingsFile" - def jobNameStr = JOB_NAME.tokenize('/') as String[] - def projName = jobNameStr[0] - def branchConfig = settingsJson."branchConfig"."${env.BRANCH_NAME}" - def serviceConfig = settingsJson."serviceConfig"."${projName}" - - MAVEN_SET = branchConfig.MAVEN_SET - registry = branchConfig.registry - registryCredential = branchConfig.registryCredential - registry_project = branchConfig.registry_project - jenkinsAgent = branchConfig.jenkinsAgent - - echo "projName: ${projName}" - echo "The Maven Set XML for the ${env.BRANCH_NAME} branch is: ${MAVEN_SET}" - - containerName = serviceConfig.containerName - servicePath = serviceConfig.servicePath - baseImage = "${registry}/xiaomayi-base/jdk:17.0.11-centos8" - servicePort = serviceConfig."port" - jarFile = "${containerName}.jar" - jarFilePath = "${servicePath}/target" - serverHost01 = serviceConfig.serverHost01 - - echo "jarFile: ${jarFile}" - echo "jarFilePath: ${jarFilePath}" - - if ("${env.BRANCH_NAME}" == "master" && "${params.PROFILES}" != "null") { - k8s_namespace = branchConfig."${params.PROFILES}".k8s_namespace - k8s_cluster = branchConfig."${params.PROFILES}".k8s_cluster - serverIP01 = branchConfig."${params.PROFILES}"."${serverHost01}" - } else { - k8s_namespace = branchConfig.k8s_namespace - k8s_cluster = branchConfig.k8s_cluster - serverIP01 = branchConfig."${serverHost01}" - } - echo "k8s_cluster: ${k8s_cluster}" - echo "k8s_namespace: ${k8s_namespace}" - echo "serverIP01: ${serverIP01}" - - if ("${serviceConfig."nodePort"}" != 'null') { - nodePort = serviceConfig."nodePort"."${env.BRANCH_NAME}" - echo "nodePort: ${nodePort}" - } else { - nodePort = "null" - echo "nodePort: ${nodePort}" - } - - if ("${serviceConfig."pvcName"}" != 'null') { - pvcName = serviceConfig."pvcName" - echo "PVC Name: ${pvcName}" - } else { - pvcName = "null" - echo "PVC Name: ${pvcName}" - } - - if ("${env.BRANCH_NAME}" != "master") { - properties([ - parameters([ - string( - defaultValue: "${env.BRANCH_NAME}", - description: '编译参数', - name: 'PROFILES', - trim: true - ), - choice ( - choices: ['service','api','all'], - description: '编译参数: api:附带deploy api, all: 包含子路径pom', - name: 'APICHOICE' - ) - ]) - ]) - } else if ("${env.BRANCH_NAME}" == "master") { - properties([ - parameters([ - choice ( - choices: ['','uat', 'prod'], - description: '编译参数: uat-uat环境,prod-生产环境', - name: 'PROFILES' - ), - choice ( - choices: ['service','api','all'], - description: '编译参数: api:附带deploy api, all: 包含子路径pom', - name: 'APICHOICE' - ) - ]) - ]) - } else { - error("Build failed because failed to fetch settings for branch") - } - } - } - } - stage('Build') { - agent { - // docker { - // image "maven:3.8.6-openjdk-8" - // args '-v /etc/hosts:/etc/hosts:ro' - // label jenkinsAgent - // } - label { - label jenkinsAgent - } - } - steps { - configFileProvider([configFile(fileId: MAVEN_SET, variable: 'MAVEN_SETTINGS_XML')]) { - sh "/usr/local/maven/bin/mvn --settings ${MAVEN_SETTINGS_XML} dependency:purge-local-repository -Dinclude=com.xiaomayi -fpom.xml clean package -P${PROFILES} -Dmaven.test.skip=true" - sh "ls -lsh ${jarFilePath}/${jarFile}" - sh "md5sum ${jarFilePath}/${jarFile}" - } - } - } - stage('Container Build') { - when { - expression { params.APICHOICE == "service" || params.APICHOICE == "all" } - } - options { - skipDefaultCheckout() - } - agent { - label { - label jenkinsAgent - } - } - steps { - script { - echo "VAR_BASE_IMAGE: ${baseImage}" - echo "VAR_PORT: ${servicePort}" - echo "VAR_JARFILE: ${jarFile}" - echo "VAR_JARFILE_PATH: ${jarFilePath}" - - def dockerImage = docker.image("${registry_project}/${containerName}:${PROFILES}-${env.BUILD_ID}") - sh """ - docker build -t ${dockerImage.imageName()} \ - -f Dockerfile \ - --build-arg VAR_BASE_IMAGE=${baseImage} \ - --build-arg VAR_PROFILES=${PROFILES} \ - --build-arg VAR_PORT=${servicePort} \ - --build-arg VAR_JARFILE_PATH=${jarFilePath} \ - --build-arg VAR_JARFILE=${jarFile} . - """ - - docker.withRegistry("https://"+registry, registryCredential) { - dockerImage.push() - } - sh """ - docker rmi -f ${registry_project}/${containerName}:${PROFILES}-${env.BUILD_ID} - docker rmi -f ${registry}/${registry_project}/${containerName}:${PROFILES}-${env.BUILD_ID} - """ - } - cleanWs() - } - } - stage("Deploy") { - options { - skipDefaultCheckout() - } - when { - allOf { - expression { params.PROFILES != "uat" } - anyOf { - expression { params.APICHOICE == "service" || params.APICHOICE == "all" } - } - } - } - agent { - label { - label jenkinsAgent - } - } - steps { - checkout scmGit([ - branches: [[name: '*/master']], - userRemoteConfigs: [[ - credentialsId: 'c9b5eae2-5df5-485f-bebd-9cd5393b03e1', - url: 'http://192.168.10.202:3000/cicd/pipeline-files.git' - ]], - extensions: [[ - $class: 'RelativeTargetDirectory', - relativeTargetDir: '.pipeline-files' - ]], - ]) - script { - sh """ - sed -i 's#REGISTRY_URL#${registry}#g' .pipeline-files/k8s-file/${containerName}.yaml - sed -i 's#NAMESPACE#${k8s_namespace}#g' .pipeline-files/k8s-file/${containerName}.yaml - sed -i 's#VERSION#${PROFILES}-${env.BUILD_ID}#g' .pipeline-files/k8s-file/${containerName}.yaml - sed -i 's#SERVICE_PORT#${servicePort}#g' .pipeline-files/k8s-file/${containerName}.yaml - """ - if ("${nodePort}" != "null") { - sh """ - sed -i 's#NODE_PORT#${nodePort}#g' .pipeline-files/k8s-file/${containerName}.yaml - """ - } - if ("${pvcName}" != "null") { - sh """ - sed -i 's#PVC_NAME#${pvcName}#g' .pipeline-files/k8s-file/${containerName}.yaml - """ - } - sshagent(['jenkins-ssh-207']) { - sh """ - ssh ${k8s_cluster} 'mkdir -p /home/esxi/k8s-yaml' - scp .pipeline-files/k8s-file/${containerName}.yaml ${k8s_cluster}:/home/esxi/k8s-yaml - ssh ${k8s_cluster} 'cd /home/esxi/k8s-yaml && kubectl apply -f ${containerName}.yaml' - """ - } - } - } - } - } -} \ No newline at end of file diff --git a/.jenkins/.jenkinsfile2 b/.jenkins/.jenkinsfile2 deleted file mode 100644 index e68e4d7..0000000 --- a/.jenkins/.jenkinsfile2 +++ /dev/null @@ -1,316 +0,0 @@ -pipeline { - agent any - options { - // 构建记录保留策略 - buildDiscarder(logRotator( - artifactDaysToKeepStr: '', - artifactNumToKeepStr: '', - daysToKeepStr: '2', - numToKeepStr: '2' - )) - // 防止并发构建冲突 - disableConcurrentBuilds() - // 设置构建超时时间(30分钟) - timeout(time: 30, unit: 'MINUTES') - } - - // 定义构建参数 - parameters { - string( - name: 'PROFILES', - defaultValue: getDefaultProfile(), // 根据分支自动设置默认值 - description: '编译环境参数(dev/test/prod)', - trim: true - ) - } - - stages { - // 阶段1:环境配置和参数设置 - stage('Setup Parameters & ENV') { - steps { - // 从Jenkins配置管理获取配置文件 - configFileProvider([configFile(fileId: 'xiaomayi-web', variable: 'settingsFile')]) { - script { - setupEnvironment() // 调用环境设置函数 - } - } - } - } - - // 阶段2:代码编译构建 - stage('Build') { - agent { - label { - label "${env.JENKINS_AGENT}" // 使用动态指定的Jenkins agent - } - } - steps { - // 使用指定的Maven配置进行构建 - configFileProvider([configFile(fileId: "${env.MAVEN_SET}", variable: 'MAVEN_SETTINGS_XML')]) { - sh """ - # 使用Maven进行依赖清理和项目构建 - /usr/local/maven/bin/mvn --settings ${MAVEN_SETTINGS_XML} \ - dependency:purge-local-repository -Dinclude=com.xiaomayi \ - -f pom.xml clean package -P${params.PROFILES} \ - -Dmaven.test.skip=true - """ - // 验证构建产物 - sh "ls -lsh ${env.JAR_FILE_PATH}/${env.JAR_FILE}" - sh "md5sum ${env.JAR_FILE_PATH}/${env.JAR_FILE}" - } - } - post { - always { - // 归档构建产物以便后续使用和审计 - archiveArtifacts artifacts: "${env.JAR_FILE_PATH}/${env.JAR_FILE}", fingerprint: true - } - } - } - - // 阶段3:Docker镜像构建和推送 - stage('Container Build') { - agent { - label { - label "${env.JENKINS_AGENT}" - } - } - steps { - script { - buildAndPushDockerImage() // 调用镜像构建函数 - } - } - post { - always { - cleanDockerImages() // 清理本地Docker镜像节省空间 - } - } - } - - // 阶段4:部署到目标服务器 - stage('Deploy') { - agent { - label { - label "${env.JENKINS_AGENT}" - } - } - steps { - script { - deployToServer() // 调用部署函数 - } - } - } - } - - // 构建后处理 - post { - success { - echo "✅ Pipeline执行成功 - 分支: ${env.BRANCH_NAME} - 构建ID: ${env.BUILD_ID} - 环境: ${params.PROFILES}" - } - failure { - echo "❌ Pipeline执行失败 - 分支: ${env.BRANCH_NAME} - 构建ID: ${env.BUILD_ID}" - // 此处可以添加邮件通知、钉钉通知等 - } - aborted { - echo "⚠️ Pipeline被中止 - 分支: ${env.BRANCH_NAME} - 构建ID: ${env.BUILD_ID}" - } - cleanup { - cleanWs() // 清理工作空间,释放磁盘空间 - } - } -} - -/** - * 根据当前分支获取默认的Profile参数 - * @return 对应的环境参数(dev/test/prod) - */ -def getDefaultProfile() { - def branch = env.BRANCH_NAME ?: 'dev' - switch(branch) { - case 'dev': - return 'dev' - case 'test': - return 'test' - case 'master': - return 'prod' - default: - return 'dev' // 默认使用dev环境 - } -} - -/** - * 设置构建环境变量和配置参数 - * 从配置文件中读取分支和服务的具体配置 - */ -def setupEnvironment() { - // 读取JSON配置文件 - def config = readJSON file: "${settingsFile}" - - // 解析任务名称(处理多级目录结构) - def jobNameStr = env.JOB_NAME.tokenize('/') - def jobName = jobNameStr[0] - - // 获取分支配置和服务配置 - def branchConfig = config.branchConfig."${env.BRANCH_NAME}" - def serviceConfig = config.serviceConfig."${jobName}" - - // 验证配置是否存在 - if (!branchConfig || !serviceConfig) { - error("❌ 无法获取分支 ${env.BRANCH_NAME} 或服务 ${jobName} 的配置") - } - - // 设置分支相关环境变量 - env.MAVEN_SET = branchConfig.MAVEN_SET - env.REGISTRY = branchConfig.registry - env.REGISTRY_CREDENTIAL = branchConfig.registryCredential - env.NAMESPACE = branchConfig.namespace - env.JENKINS_AGENT = branchConfig.jenkinsAgent - env.SERVER_PORT = branchConfig.serverPort - - // 设置服务相关环境变量 - env.PROJECT_NAME = serviceConfig.containerName - env.SERVICE_PATH = serviceConfig.servicePath - env.JAR_PACKAGE_NAME = serviceConfig.jarPackageName - env.BASE_IMAGE = "${env.REGISTRY}/xiaomayi-base/jdk:17.0.16-rocky8-dos" - env.PORT = serviceConfig.port - env.JAR_FILE = "${env.JAR_PACKAGE_NAME}" - env.JAR_FILE_PATH = "${env.SERVICE_PATH}/target" - env.SERVER_HOST_01 = serviceConfig.serverHost01 - - // 根据分支设置服务器IP地址 - if (['dev', 'test', 'master'].contains(env.BRANCH_NAME)) { - env.SERVER_IP_01 = branchConfig."${env.SERVER_HOST_01}" - if (!env.SERVER_IP_01) { - error("❌ 无法获取服务器IP地址配置: ${env.SERVER_HOST_01}") - } - } else { - error("❌ 不支持的分支: ${env.BRANCH_NAME}") - } - - // 打印环境配置信息用于调试和验证 - echo """ - 📋 ============ 环境配置信息 ============ - 🔹 分支: ${env.BRANCH_NAME} - 🔹 项目: ${jobName} - 🔹 环境参数: ${params.PROFILES} - 🔹 Maven配置: ${env.MAVEN_SET} - 🔹 镜像仓库: ${env.REGISTRY} - 🔹 命名空间: ${env.NAMESPACE} - 🔹 项目名称: ${env.PROJECT_NAME} - 🔹 JAR文件: ${env.JAR_FILE} - 🔹 目标服务器: ${env.SERVER_IP_01}:${env.SERVER_PORT} - 🔹 Jenkins Agent: ${env.JENKINS_AGENT} - ==================================== - """ -} - -/** - * 构建并推送Docker镜像到镜像仓库 - */ -def buildAndPushDockerImage() { - // 打印镜像构建参数 - echo """ - 🐳 ============ 镜像构建参数 ============ - 🔹 基础镜像: ${env.BASE_IMAGE} - 🔹 暴露端口: ${env.PORT} - 🔹 JAR文件: ${env.JAR_FILE} - 🔹 JAR文件路径: ${env.JAR_FILE_PATH} - 🔹 镜像标签: ${env.NAMESPACE}/${env.PROJECT_NAME}:${params.PROFILES}-${env.BUILD_ID} - ==================================== - """ - - // 使用Docker凭证连接到镜像仓库 - docker.withRegistry("https://${env.REGISTRY}", env.REGISTRY_CREDENTIAL) { - def dockerImage = docker.build( - "${env.NAMESPACE}/${env.PROJECT_NAME}:${params.PROFILES}-${env.BUILD_ID}", - // 构建参数传递 - "--build-arg VAR_PROFILES=${params.PROFILES} " + - "--build-arg VAR_BASE_IMAGE=${env.BASE_IMAGE} " + - "--build-arg VAR_PORT=${env.PORT} " + - "--build-arg VAR_JARFILE=${env.JAR_FILE} " + - "--build-arg VAR_JARFILE_PATH=${env.JAR_FILE_PATH} " + - "-f .jenkinsfile/Dockerfile ./" // 指定Dockerfile路径 - ) - // 推送镜像到仓库 - dockerImage.push() - echo "✅ Docker镜像推送成功: ${env.NAMESPACE}/${env.PROJECT_NAME}:${params.PROFILES}-${env.BUILD_ID}" - } -} - -/** - * 清理本地Docker镜像,释放磁盘空间 - */ -def cleanDockerImages() { - echo "🧹 开始清理本地Docker镜像..." - - try { - // 删除本地构建的镜像 - sh """ - docker rmi -f ${env.NAMESPACE}/${env.PROJECT_NAME}:${params.PROFILES}-${env.BUILD_ID} || true - docker rmi -f ${env.REGISTRY}/${env.NAMESPACE}/${env.PROJECT_NAME}:${params.PROFILES}-${env.BUILD_ID} || true - """ - // 清理悬空镜像(不再被任何容器引用的镜像) - sh "docker image prune -f || true" - echo "✅ Docker镜像清理完成" - } catch (Exception e) { - echo "⚠️ 镜像清理过程中出现警告: ${e.message}" - // 镜像清理失败不影响主要流程,继续执行 - } -} - -/** - * 部署应用到目标服务器 - * 通过SSH连接到服务器执行部署脚本 - */ -def deployToServer() { - // 构建部署命令 - def deployCmd = """ - ssh -o StrictHostKeyChecking=no \ - -o ConnectTimeout=30 \ - -o ServerAliveInterval=60 \ - esxi@${env.SERVER_IP_01} -p ${env.SERVER_PORT} \ - 'cd /usr/local/docker/xiaomayi-web/; ./deploy.sh deploy ${env.PROJECT_NAME} ${params.PROFILES}-${env.BUILD_ID}' - """ - - echo """ - 🚀 ============ 开始部署 ============ - 🔹 目标服务器: ${env.SERVER_IP_01}:${env.SERVER_PORT} - 🔹 服务名称: ${env.PROJECT_NAME} - 🔹 镜像版本: ${params.PROFILES}-${env.BUILD_ID} - ==================================== - """ - - echo "执行部署命令: ${deployCmd}" - - // 部署过程添加重试机制和超时控制 - try { - retry(3) { // 最多重试3次 - timeout(time: 10, unit: 'MINUTES') { // 部署超时时间10分钟 - sh deployCmd - } - } - echo "✅ 部署成功完成" - } catch (Exception e) { - error("❌ 部署失败: ${e.message}") - } -} - -/** - * 验证必要环境变量是否设置(可选,可用于前置检查) - */ -def validateEnvironment() { - def requiredEnvVars = [ - 'BRANCH_NAME', 'MAVEN_SET', 'REGISTRY', 'REGISTRY_CREDENTIAL', - 'NAMESPACE', 'JENKINS_AGENT', 'PROJECT_NAME', 'SERVER_IP_01' - ] - - def missingVars = [] - requiredEnvVars.each { var -> - if (!env."${var}") { - missingVars.add(var) - } - } - - if (missingVars) { - error("❌ 缺少必要环境变量: ${missingVars.join(', ')}") - } -} \ No newline at end of file diff --git a/.jenkins/Jenkinsfile b/.jenkins/Jenkinsfile index 8c2fd41..6f293d4 100644 --- a/.jenkins/Jenkinsfile +++ b/.jenkins/Jenkinsfile @@ -1,3 +1,3 @@ @Library('share-library@master')_ -orgName = 'xiaomayi' +orgName = 'djangoadmin' pipelineJDKService(orgName) \ No newline at end of file diff --git a/.jenkins/Jenkinsfile2 b/.jenkins/Jenkinsfile2 deleted file mode 100644 index a59225b..0000000 --- a/.jenkins/Jenkinsfile2 +++ /dev/null @@ -1,3 +0,0 @@ -@Library('share-library@master')_ -orgName = 'xiaomayi' -pipelineNodeService(orgName) \ No newline at end of file