【Deploy】Context

部署运行你感兴趣的模型镜像

在这里插入图片描述

在 C 语言中进行深度学习部署时,“上下文”(Context)通常指与模型推理过程相关的运行时环境状态信息资源管理结构的集合,其核心作用是为模型提供执行所需的必要条件,并确保推理过程的高效性和正确性。

1、模型推理的上下文结构体

在 C 语言中部署深度学习模型(如通过 TensorFlow Lite C API 或自定义实现),通常会定义一个上下文结构体(Context)来封装推理所需的所有资源。例如:

typedef struct {
    void* model_data;          // 模型权重数据指针
    int input_dim;             // 输入张量维度
    int output_dim;            // 输出张量维度
    float* input_buffer;       // 输入数据缓冲区
    float* output_buffer;      // 输出数据缓冲区
    // 可能包含其他资源:如内存池、硬件加速器句柄等
} DLContext;

作用:

  • 集中管理模型推理所需的内存、数据和配置参数,避免全局变量污染。
  • 支持多模型并行推理时,每个模型实例拥有独立的上下文,防止资源冲突

2、硬件加速的上下文管理

若部署目标为嵌入式设备(如ARM Cortex-M系列),上下文可能包含硬件加速器的状态信息。例如:

typedef struct {
    int layer_index;           // 当前执行的层索引
    void* accelerator_handle;  // 硬件加速器句柄(如DSP或NPU)
    float* im2col_buffer;      // 卷积优化用的临时缓冲区
} HardwareContext;

作用:

  • 在层间切换时保存/恢复硬件状态(如寄存器配置)。
  • 优化计算密集型操作(如卷积)的内存访问模式。

3、内存管理的上下文隔离

在资源受限的嵌入式场景中,上下文可能包含自定义内存分配器,以避免频繁的 malloc/free 调用:

typedef struct {
    uint8_t* memory_pool;      // 预分配的内存池
    size_t pool_size;          // 内存池总大小
    size_t used_size;          // 已使用内存大小
} MemoryContext;
 
void* context_alloc(DLContext* ctx, size_t size) {
    MemoryContext* mem_ctx = (MemoryContext*)ctx->user_data;
    if (mem_ctx->used_size + size > mem_ctx->pool_size) {
        return NULL; // 内存不足
    }
    void* ptr = mem_ctx->memory_pool + mem_ctx->used_size;
    mem_ctx->used_size += size;
    return ptr;
}

作用:

  • 减少内存碎片化,提升推理速度。
  • 实现内存使用上限控制,防止系统崩溃。

4、多线程安全的上下文设计

在多线程部署场景中,上下文需包含线程同步机制:

typedef struct {
    pthread_mutex_t lock;      // 互斥锁
    int ref_count;             // 引用计数
    // 其他资源...
} ThreadSafeContext;
 
void context_lock(DLContext* ctx) {
    pthread_mutex_lock(&((ThreadSafeContext*)ctx->user_data)->lock);
}

作用:

  • 防止多线程同时访问共享资源(如模型权重)导致数据竞争。
  • 支持模型实例的复用(如通过引用计数管理生命周期)。

5、与编程中通用上下文概念的关联

C语言深度学习部署中的上下文设计,与编程领域通用上下文概念(如Web开发中的HTTP请求上下文、操作系统中的进程上下文)具有共性:

  • 状态封装:均通过结构体/对象封装特定任务执行所需的状态。
  • 资源隔离:确保不同任务/线程独立使用资源,避免冲突。
  • 生命周期管理:控制上下文的创建、销毁和传递。

差异点:

  • 深度学习部署的上下文更侧重计算资源(内存、硬件加速器)的高效利用。
  • 需处理实时性要求(如低延迟推理),因此上下文设计需优化数据局部性。

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.15

TensorFlow-v2.15

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

def RELEASE_VERSION = env.BUILD_NUMBER currentBuild.displayName = RELEASE_VERSION println "Original Release Version: ${RELEASE_VERSION}" /** * 拆分管道脚本,将远程查询命令单独执行,以确保在返回异常exit code时中断pipeline * @param REMOTE_ACQUIRE 远程查询命令 * @param EDIT 本地编辑命令 * @return */ def sh_pipe(REMOTE_QUERY, EDIT) { ret = sh(returnStdout: true, script: "${REMOTE_QUERY} > temp") return sh(returnStdout: true, script: "cat ./temp | ${EDIT}").trim() } def update_values (DEVOPS_CICD_REPOSITORY_NAME, DEVOPS_CICD_BRANCH, SVC) { // sh script: "update_values方法开始执行" sh script: "echo update_values方法开始执行" sh script: "rm -rf devops_cicd && mkdir devops_cicd" sh script: "git clone -b ${DEVOPS_CICD_BRANCH} ${GERRIT_REPO_URL}/${DEVOPS_CICD_REPOSITORY_NAME}" sh script: "rm -rf k8s-values && mkdir k8s-values" sh script: "cp -rf ./devops_cicd/k8s-values/${SVC} ./k8s-values/" sh script: "rm -rf ./devops_cicd" // sh script: "update_values方法执行完毕" } def render_config_map_data (SVC, DEPLOY_ENVIRONMENT, RGN) { OPERATION_FLAG = "error parameter" if ("${DEPLOY_ENVIRONMENT}" == 'dev2' || "${DEPLOY_ENVIRONMENT}" == 'staging2' || "${DEPLOY_ENVIRONMENT}" == 'uat2' || "${DEPLOY_ENVIRONMENT}" == 'uat3' || "${DEPLOY_ENVIRONMENT}" == 'uat4' || "${DEPLOY_ENVIRONMENT}" == 'uat5' || "${DEPLOY_ENVIRONMENT}" == 'uat6' || "${DEPLOY_ENVIRONMENT}" == 'pet2' || "${DEPLOY_ENVIRONMENT}" == 'pet3') { // 多环境参数, 如uat2,uat3, dev2,staging2等 OPERATION_FLAG = "multiple environment parameter" } if ("${DEPLOY_ENVIRONMENT}" == 'dev' || "${DEPLOY_ENVIRONMENT}" == 'uat' || "${DEPLOY_ENVIRONMENT}" == 'staging' || "${DEPLOY_ENVIRONMENT}" == 'pet' || "${DEPLOY_ENVIRONMENT}" == 'prd') { // 单环境参数 OPERATION_FLAG = "single environment parameter" } // 判断devops_cicd仓库中有无存放对应环境配置的文件夹 VERSION_DIR_EXIST_FLAG = sh(returnStdout: true, script: "[ -d ./k8s-values/${env.SERVICE}/${DEPLOY_ENVIRONMENT} ] && echo 'true' || echo 'false'") if (!VERSION_DIR_EXIST_FLAG.toBoolean()) { OPERATION_FLAG = "error parameter" } // 判断devops_cicd仓库中Global文件夹是否存在 GLOBAL_DIR_EXIST_FLAG = sh(returnStdout: true, script: "[ -d ./k8s-values/${SVC}/global ] && echo 'true' || echo 'false'") // 判断devops_cicd仓库中每个环境的common文件夹是否存在 COMMON_DIR_EXIST_FLAG = sh(returnStdout: true, script: "[ -d ./k8s-values/${SVC}/${DEPLOY_ENVIRONMENT}/common ] && echo 'true' || echo 'false'") // 判断devops_cicd仓库中每个环境的每个区域下的config文件是否存在 CONFIG_DIR_EXIST_FLAG = sh(returnStdout: true, script: "[ -d ./k8s-values/${SVC}/${DEPLOY_ENVIRONMENT}/${RGN}/config ] && echo 'true' || echo 'false'") RENDER_FILE_ARG = "" if (OPERATION_FLAG == 'single environment parameter') { RENDER_FILE_ARG += GLOBAL_DIR_EXIST_FLAG.toBoolean() ? "--from-file=./k8s-values/${SVC}/global " : "" RENDER_FILE_ARG += COMMON_DIR_EXIST_FLAG.toBoolean() ? "--from-file=./k8s-values/${SVC}/${DEPLOY_ENVIRONMENT}/common " : "" RENDER_FILE_ARG += CONFIG_DIR_EXIST_FLAG.toBoolean() ? "--from-file=./k8s-values/${SVC}/${DEPLOY_ENVIRONMENT}/${RGN}/config " : "" } else if (OPERATION_FLAG == 'multiple environment parameter'){ VER_COMMON_DIR_EXIST_FLAG = sh(returnStdout: true, script: "[ -d ./k8s-values/${SVC}/${DEPLOY_ENVIRONMENT}/common ] && echo 'true' || echo 'false'") VER_CONFIG_DIR_EXIST_FLAG = sh(returnStdout: true, script: "[ -d ./k8s-values/${SVC}/${DEPLOY_ENVIRONMENT}/${RGN}/config ] && echo 'true' || echo 'false'") RENDER_FILE_ARG += GLOBAL_DIR_EXIST_FLAG.toBoolean() ? "--from-file=./k8s-values/${SVC}/global " : "" RENDER_FILE_ARG += VER_COMMON_DIR_EXIST_FLAG.toBoolean() ? "--from-file=./k8s-values/${SVC}/${DEPLOY_ENVIRONMENT}/common " : "--from-file=./k8s-values/${SVC}/${DEPLOY_ENVIRONMENT}/common " RENDER_FILE_ARG += VER_CONFIG_DIR_EXIST_FLAG.toBoolean() ? "--from-file=./k8s-values/${SVC}/${DEPLOY_ENVIRONMENT}/${RGN}/config " : "--from-file=./k8s-values/${SVC}/${DEPLOY_ENVIRONMENT}/${RGN}/config " } if (OPERATION_FLAG != 'error parameter') { sh script: "kubectl create configmap ${SVC}-${DEPLOY_ENVIRONMENT}-${RGN}-tmp-config \ ${RENDER_FILE_ARG} \ --dry-run -o=yaml > ${SVC}-${DEPLOY_ENVIRONMENT}-${RGN}-tmp.yaml" sh script: "yq read ${SVC}-${DEPLOY_ENVIRONMENT}-${RGN}-tmp.yaml data > ${SVC}-${DEPLOY_ENVIRONMENT}-${RGN}-config-map-data.yaml" sh script: "yq prefix -i ${SVC}-${DEPLOY_ENVIRONMENT}-${RGN}-config-map-data.yaml configMap.data" } } /** * 网络初始化:导入service、istio(gateway/virtualService), Note: 每个服务在所有区建立同名namespace,service将导入所有区 * @param ENV 集群环境,用于指定K8S集群 * @param RGN 部署区域 * @param DEPLOY_ENV 部署环境,用于区分staging、uat2、uat3、pet等环境 * @param ISTIO_RGN Istio主区 * @return */ def networking_init(ENV, RGN, DEPLOY_ENV, ISTIO_RGN) { if ("${DEPLOY_DEPART}" == ("BASIC_CLOUD")) { // 基础云service仅导入部署区 sh script: "kubectl apply -f ./k8s-values/${env.SERVICE}/${DEPLOY_ENV}/${RGN}/networking/service.yaml --context ${params.KUBE_CONTEXT}" } else { // 业务云service导入所有区: if ("${ENV}".contains("dev")) { sh script: "kubectl apply -f ./k8s-values/${env.SERVICE}/${DEPLOY_ENV}/${RGN}/networking/service.yaml --context ${ENV}.ap-southeast-1" } else if ("${ENV}".contains("pet")) { sh script: "kubectl apply -f ./k8s-values/${env.SERVICE}/${DEPLOY_ENV}/${RGN}/networking/service.yaml --context ${ENV}.ap-southeast-1" } else if ("${ENV}".contains("uat")) { sh script: "kubectl apply -f ./k8s-values/${env.SERVICE}/${DEPLOY_ENV}/${RGN}/networking/service.yaml --context ${ENV}.ap-southeast-1" sh script: "kubectl apply -f ./k8s-values/${env.SERVICE}/${DEPLOY_ENV}/${RGN}/networking/service.yaml --context ${ENV}.us-east-1" } else if ("${ENV}".contains("staging")) { sh script: "kubectl apply -f ./k8s-values/${env.SERVICE}/${DEPLOY_ENV}/${RGN}/networking/service.yaml --context ${ENV}.ap-southeast-1" sh script: "kubectl apply -f ./k8s-values/${env.SERVICE}/${DEPLOY_ENV}/${RGN}/networking/service.yaml --context ${ENV}.us-east-1" } else if ("${ENV}".contains("prd")) { sh script: "kubectl apply -f ./k8s-values/${env.SERVICE}/${DEPLOY_ENV}/${RGN}/networking/service.yaml --context ${ENV}.ap-southeast-1" sh script: "kubectl apply -f ./k8s-values/${env.SERVICE}/${DEPLOY_ENV}/${RGN}/networking/service.yaml --context ${ENV}.us-east-1" sh script: "kubectl apply -f ./k8s-values/${env.SERVICE}/${DEPLOY_ENV}/${RGN}/networking/service.yaml --context ${ENV}.eu-west-1" } } sh script: "kubectl apply -f ./k8s-values/${env.SERVICE}/${DEPLOY_ENV}/${RGN}/networking/istio.yaml --context ${ENV}.${ISTIO_RGN}" sh script: "echo networking init successfully" } def helm_upgrade (ENV, ISTIO_RGN, SVC, DEPLOY_ENVIRONMENT, RGN, VER, NSP) { // 获取K8S namespace K8S_NSP = sh(returnStdout: true, script: "yq read ./k8s-values/${env.SERVICE}/${DEPLOY_ENVIRONMENT}/${RGN}/values.yaml app.namespace").trim() // 获取服务名称 PREVIOUS_DEPLOY = sh_pipe("kubectl get deployment -n ${K8S_NSP} --context ${params.KUBE_CONTEXT}", "grep '${env.SERVICE}' | cut -d ' ' -f 1") // 服务第一次部署时,无需对pod扩容 if (PREVIOUS_DEPLOY) { // 获取线上版本的副本数配置 ONLINE_MIN_REPLICAS = sh_pipe("kubectl get hpa ${PREVIOUS_DEPLOY} -o yaml -n ${K8S_NSP} --context ${params.KUBE_CONTEXT}", "yq read - 'spec.minReplicas'") ONLINE_MAX_REPLICAS = sh_pipe("kubectl get hpa ${PREVIOUS_DEPLOY} -o yaml -n ${K8S_NSP} --context ${params.KUBE_CONTEXT}", "yq read - 'spec.maxReplicas'") CURRENT_REPLICAS = sh_pipe("kubectl get deployment ${PREVIOUS_DEPLOY} -o yaml -n ${K8S_NSP} --context ${params.KUBE_CONTEXT}", "yq read - 'spec.replicas'") println("ONLINE_MIN_REPLICAS: ${ONLINE_MIN_REPLICAS}") println("ONLINE_MAX_REPLICAS: ${ONLINE_MAX_REPLICAS}") println("CURRENT_REPLICAS: ${CURRENT_REPLICAS}") // 将该副本数更新到滚动更新所使用values中replicaCount字段的值 sh script: "yq write -i ./k8s-values/${env.SERVICE}/${DEPLOY_ENVIRONMENT}/${RGN}/values.yaml 'replicaCount' ${CURRENT_REPLICAS}" // HPA配置选择线上与CICD配置之间的较大值 CICD_HPA_MIN = sh(returnStdout: true, script: "yq read ./k8s-values/${env.SERVICE}/${DEPLOY_ENVIRONMENT}/${RGN}/values.yaml autoscaling.minReplicas").trim() CICD_HPA_MAX = sh(returnStdout: true, script: "yq read ./k8s-values/${env.SERVICE}/${DEPLOY_ENVIRONMENT}/${RGN}/values.yaml autoscaling.maxReplicas").trim() println("CICD_HPA_MIN: ${CICD_HPA_MIN}") println("CICD_HPA_MAX: ${CICD_HPA_MAX}") if (Integer.parseInt(ONLINE_MIN_REPLICAS) > Integer.parseInt(CICD_HPA_MIN)) { sh script: "yq write -i ./k8s-values/${env.SERVICE}/${DEPLOY_ENVIRONMENT}/${RGN}/values.yaml 'autoscaling.minReplicas' ${ONLINE_MIN_REPLICAS}" } if (Integer.parseInt(ONLINE_MAX_REPLICAS) > Integer.parseInt(CICD_HPA_MAX)) { sh script: "yq write -i ./k8s-values/${env.SERVICE}/${DEPLOY_ENVIRONMENT}/${RGN}/values.yaml 'autoscaling.maxReplicas' ${ONLINE_MAX_REPLICAS}" } } OPERATION_FLAG = "error parameter" if ("${DEPLOY_ENVIRONMENT}" == 'dev2' || "${DEPLOY_ENVIRONMENT}" == 'staging2' || "${DEPLOY_ENVIRONMENT}" == 'uat2' || "${DEPLOY_ENVIRONMENT}" == 'uat3' || "${DEPLOY_ENVIRONMENT}" == 'uat4' || "${DEPLOY_ENVIRONMENT}" == 'uat5' || "${DEPLOY_ENVIRONMENT}" == 'uat6' || "${DEPLOY_ENVIRONMENT}" == 'pet2' || "${DEPLOY_ENVIRONMENT}" == 'pet3') { // 多环境参数, 如uat2,uat3, dev2,staging2等 OPERATION_FLAG = "multiple environment parameter" } if ("${DEPLOY_ENVIRONMENT}" == 'dev' || "${DEPLOY_ENVIRONMENT}" == 'uat' || "${DEPLOY_ENVIRONMENT}" == 'staging' || "${DEPLOY_ENVIRONMENT}" == 'pet' || "${DEPLOY_ENVIRONMENT}" == 'prd') { // 单环境参数 OPERATION_FLAG = "single environment parameter" } // 当为单环境参数时,用这个参数判断“服务/单环境名称/区域”路径是否存在 DIR_EXIST_FLAG = sh(returnStdout: true, script: "[ -d ./k8s-values/${env.SERVICE}/${DEPLOY_ENVIRONMENT}/${RGN} ] && echo 'true' || echo 'false'") // 当为多环境参数时,用这个参数判断“服务/多环境名称/区域”路径是否存在 NEW_DIR_EXIST_FLAG = sh(returnStdout: true, script: "[ -d ./k8s-values/${env.SERVICE}/${DEPLOY_ENVIRONMENT}/${RGN} ] && echo 'true' || echo 'false'") // 网络配置初始化 sh script: "echo networking init" networking_init(ENV, RGN, DEPLOY_ENVIRONMENT, ISTIO_RGN) // 根据集群版本不同,kube-context值不同 if (OPERATION_FLAG == 'single environment parameter' && DIR_EXIST_FLAG.toBoolean()) { sh script: "AWS_DEFAULT_REGION=ap-southeast-1 AWS_PROFILE=uat helm upgrade \ --install ${SVC} prd-tplink-nbu/${SVC} \ --version ${VER} \ --values ./k8s-values/${SVC}/${DEPLOY_ENVIRONMENT}/${RGN}/values.yaml \ --values ${SVC}-${DEPLOY_ENVIRONMENT}-${RGN}-config-map-data.yaml \ --namespace ${NSP} \ --kube-context ${params.KUBE_CONTEXT} \ --timeout 600s \ --wait" } else if (OPERATION_FLAG == 'multiple environment parameter' && NEW_DIR_EXIST_FLAG.toBoolean()) { NEW_NSP = sh (returnStdout: true, script: "echo \$(cat ./k8s-values/${SVC}/${DEPLOY_ENVIRONMENT}/${RGN}/values.yaml | grep 'namespace' | sed 's/namespace://')").trim() sh script: "AWS_DEFAULT_REGION=ap-southeast-1 AWS_PROFILE=uat helm upgrade \ --install ${SVC} prd-tplink-nbu/${SVC} \ --version ${VER} \ --values ./k8s-values/${SVC}/${DEPLOY_ENVIRONMENT}/${RGN}/values.yaml \ --values ${SVC}-${DEPLOY_ENVIRONMENT}-${RGN}-config-map-data.yaml \ --namespace ${NEW_NSP} \ --kube-context ${params.KUBE_CONTEXT} \ --timeout 600s \ --wait" } else { sh script: "echo version ${VER} will not deploy to ${DEPLOY_ENVIRONMENT} ${RGN}" } } pipeline { agent any environment { PIPELINE_DIR = "./build-${env.BUILD_ID}" SERVICE = 'omada-sale-assistant' } parameters { choice( name: 'DEPLOY_ENVIRONMENT', choices: ['dev', 'uat', 'uat2', 'uat3', 'uat4', 'uat5', 'uat6', 'pet', 'pet2', 'pet3', 'staging', 'prd'], description: '部署的环境' ) string( name: 'DEPLOY_VERSION', defaultValue: '', description: '请输入要部署的3位版本号' ) string( name: 'DEPLOY_PASSWORD', defaultValue: '', description: '当进行生产环境部署时,请在此处输入生产环境部署密钥' ) choice( name: 'DEPLOY_REGION', choices: ['ap-southeast-1', 'us-east-1', 'eu-west-1'], description: '部署的区域' ) string( name: 'DEVOPS_CICD_BRANCH', defaultValue: 'master', description: 'devops_cicd使用的分支' ) string( name: 'DEVOPS_CICD_REPOSITORY_NAME', defaultValue: 'SMB/solution/devops_cicd', description: 'devops_cicd仓库名称' ) choice( name: 'KUBE_CONTEXT', choices: ['dev-v2.ap-southeast-1', 'uat-v2.ap-southeast-1', 'uat-v2.us-east-1'], description: 'K8S集群' ) } options { timestamps() } stages { stage('Sync Up Release') { steps { echo "Sync up ${env.SERVICE} release ..." script { println "Major Deploy Version: ${params.DEPLOY_VERSION}" sh script: 'AWS_DEFAULT_REGION=ap-southeast-1 AWS_PROFILE=uat helm repo update' RELEASE_VERSION = sh(returnStdout: true, script: "helm search repo prd-tplink-nbu/${env.SERVICE} --version ${params.DEPLOY_VERSION} | grep -w 'prd-tplink-nbu/${env.SERVICE}' | head -1 | cut -f 2").trim() if (RELEASE_VERSION == '') { error "helm chart ${env.SERVICE}-${params.DEPLOY_VERSION}.tgz doesn't exist" } env.BUILD_NUMBER = RELEASE_VERSION currentBuild.displayName = RELEASE_VERSION println "Latest Release Version: ${RELEASE_VERSION}" } echo 'Creating build directories ...' sh script: "mkdir ${env.PIPELINE_DIR}" } } stage('Promote Stage') { steps { input id: "promote", message: "Promote to ${params.DEPLOY_ENVIRONMENT}-${params.DEPLOY_REGION}?" } } stage('Deploy Stage') { steps { sleep 3 echo "Deploying ${env.SERVICE} Release v${RELEASE_VERSION} to ${params.DEPLOY_ENVIRONMENT}-${params.DEPLOY_REGION} ..." dir("${env.PIPELINE_DIR}") { load "$JENKINS_HOME/tmpEnvVariable.groovy" script { update_values ("${params.DEVOPS_CICD_REPOSITORY_NAME}", "${params.DEVOPS_CICD_BRANCH}", "${env.SERVICE}") if ("${params.KUBE_CONTEXT}".contains("cloud")) { DEPLOY_DEPART = "BASIC_CLOUD" // 判断基础云istio主区,与部署区域相同 ISTIO_RGN = params.DEPLOY_REGION } else { DEPLOY_DEPART = "NBU_CLOUD" // 判断业务云服务istio主区 if (params.DEPLOY_ENVIRONMENT == "prd") { ISTIO_RGN = "eu-west-1" } else if ("${params.DEPLOY_ENVIRONMENT}".contains("dev")) { // dev集群主区为亚太区 ISTIO_RGN = "ap-southeast-1" } else { // 其余uat集群主区为美国区 ISTIO_RGN = "us-east-1" } } // 仅保留部署环境中的字母部分,主要用于istio主区场景下拼接集群参数 ENV = "${params.DEPLOY_ENVIRONMENT}".replaceAll("[^(a-z)]", "") // 红蓝环境ENV定为uat if (params.DEPLOY_ENVIRONMENT == "redblue") { ENV = "uat" } // 若部署集群为v2集群,则环境后添加-v2后缀。 if ("${params.KUBE_CONTEXT}".contains("v2")) { ENV = "${ENV}" + "-v2" } else if ("${params.KUBE_CONTEXT}".contains("cloud")) { // 若部署集群为基础云集群,环境添加-cloud后缀 ENV = "${ENV}" + "-cloud" } echo "ENV: ${ENV}" echo "Deployed to ${params.DEPLOY_ENVIRONMENT}-${params.DEPLOY_REGION}" if ("${params.DEPLOY_ENVIRONMENT}" == 'dev' || "${params.DEPLOY_ENVIRONMENT}" == 'dev2') { render_config_map_data ("${env.SERVICE}", "${params.DEPLOY_ENVIRONMENT}", "${params.DEPLOY_REGION}") helm_upgrade ("${ENV}", "${ISTIO_RGN}", "${env.SERVICE}", "${params.DEPLOY_ENVIRONMENT}", "${params.DEPLOY_REGION}", "${RELEASE_VERSION}", "default") } else if ("${params.DEPLOY_ENVIRONMENT}" == 'uat' || "${params.DEPLOY_ENVIRONMENT}" == 'uat2' || "${params.DEPLOY_ENVIRONMENT}" == 'uat3' || "${params.DEPLOY_ENVIRONMENT}" == 'uat4' || "${params.DEPLOY_ENVIRONMENT}" == 'uat5' || "${params.DEPLOY_ENVIRONMENT}" == 'uat6') { render_config_map_data ("${env.SERVICE}", "${params.DEPLOY_ENVIRONMENT}", "${params.DEPLOY_REGION}") helm_upgrade ("${ENV}", "${ISTIO_RGN}", "${env.SERVICE}", "${params.DEPLOY_ENVIRONMENT}", "${params.DEPLOY_REGION}", "${RELEASE_VERSION}", "default") } else if ("${params.DEPLOY_ENVIRONMENT}" == 'pet' || "${params.DEPLOY_ENVIRONMENT}" == 'pet2' || "${params.DEPLOY_ENVIRONMENT}" == 'pet3') { render_config_map_data ("${env.SERVICE}", "${params.DEPLOY_ENVIRONMENT}", "${params.DEPLOY_REGION}") helm_upgrade ("${ENV}", "${ISTIO_RGN}", "${env.SERVICE}", "${params.DEPLOY_ENVIRONMENT}", "${params.DEPLOY_REGION}", "${RELEASE_VERSION}", "pet") } else if ("${params.DEPLOY_ENVIRONMENT}" == 'staging' || "${params.DEPLOY_ENVIRONMENT}" == 'staging2' || "${params.DEPLOY_ENVIRONMENT}" == 'staging3'){ render_config_map_data ("${env.SERVICE}", "${params.DEPLOY_ENVIRONMENT}", "${params.DEPLOY_REGION}") helm_upgrade ("${ENV}", "${ISTIO_RGN}", "${env.SERVICE}", "${params.DEPLOY_ENVIRONMENT}", "${params.DEPLOY_REGION}", "${RELEASE_VERSION}", "staging") } else if ("${params.DEPLOY_ENVIRONMENT}" == 'prd') { render_config_map_data ("${env.SERVICE}", "${params.DEPLOY_ENVIRONMENT}", "${params.DEPLOY_REGION}") helm_upgrade ("${ENV}", "${ISTIO_RGN}", "${env.SERVICE}", "${params.DEPLOY_ENVIRONMENT}", "${params.DEPLOY_REGION}", "${RELEASE_VERSION}", "default") } else { echo "Internal error" exit -1 } } } } } stage('Test Stage') { steps { echo "Test Successful on ${params.DEPLOY_ENVIRONMENT}-${params.DEPLOY_REGION}" } } } } 给我详细讲一下上面这段脚本的逻辑
最新发布
11-21
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值