You need to enable JavaScript to run this app.
文档中心
大数据研发治理套件

大数据研发治理套件

复制全文
下载 pdf
发布、部署与环境
多环境参数隔离
复制全文
下载 pdf
多环境参数隔离

本文介绍如何通过 DataLeap New IDE 的参数系统实现开发环境与生产环境的配置差异化,确保同一套代码和 Pipeline 在不同环境中使用正确的配置。

环境隔离的必要性

数据管道在开发和生产环境中通常需要使用不同的配置:

配置项

开发环境

生产环境

数据库地址

测试库地址

生产库地址

存储路径

/dev/warehouse/

/prod/warehouse/

计算队列

dev_queue

prod_queue

数据量

采样数据 / 小分区

全量数据

告警通知

开发者个人

值班群组

如果在代码中硬编码这些值,每次发布时都需要手动修改,容易出错且难以维护。DataLeap New IDE 通过项目参数机制实现环境隔离。

参数层级与环境隔离

环境隔离主要通过项目参数实现——同一个项目在开发环境和生产环境各自维护一套项目参数值。Pipeline 和 Activity 通过引用项目参数获取当前环境的配置。

项目参数配置

在项目设置中定义项目级参数,不同环境设置不同的值:

参数名

开发环境值

生产环境值

source_database

dev_ods

prod_ods

target_database

dev_dwd

prod_dwd

storage_base_path

/dev/warehouse

/prod/warehouse

computing_queue

dev_queue

prod_queue

alert_webhook

https://hook.dev/xxx

https://hook.prod/xxx

Pipeline 中引用项目参数

在 Pipeline YAML 配置中通过 {{project.parameters.<name>}} 引用项目参数:

spec:
  activities:
    - name: extract_orders
      type: sql
      source: WORKSPACE
      path: /Workspace/Users/zhang3/sql/extract_orders.sql
      engineType: emr_serverless_spark
      engineQueue: "{{project.parameters.computing_queue}}"
      parameterValues:
        source_db: "{{project.parameters.source_database}}"
        target_db: "{{project.parameters.target_database}}"

脚本中引用参数

脚本代码中通过名称引用参数(由 Activity 的 parameterValues 传入):

-- SQL 脚本中
INSERT OVERWRITE TABLE {{target_db}}.orders PARTITION (dt = '${date}')
SELECT * FROM {{source_db}}.orders
WHERE dt = '${date}'

关键点:脚本代码中不直接引用 {{project.parameters.xxx}},而是通过 parameterValues 间接传入。这确保脚本与具体环境解耦,可在任意环境中独立调试。

环境切换的工作方式

开发环境

开发者在开发环境中编写和调试代码:

  • Pipeline 引用的项目参数自动取开发环境值。
  • 脚本执行时使用开发环境的数据库和计算资源。
  • 调试运行不影响生产数据。

生产环境

Pipeline 发布至生产环境后:

  • 项目参数自动切换为生产环境值。
  • 无需修改任何代码或 Pipeline 配置。
  • 同一份 YAML 文件在不同环境中使用不同的实际配置。
开发环境: {{project.parameters.source_database}} → "dev_ods"
生产环境: {{project.parameters.source_database}} → "prod_ods"

参数化配置示例

完整的环境隔离 Pipeline

apiVersion: newide.studio.dataleap.volc/v1
kind: Pipeline
metadata:
  name: daily_order_etl
spec:
  displayName: "每日订单 ETL"
  runAs: User/100001
  schedulingResourceGroupName: "{{project.parameters.scheduling_group}}"

  activities:
    - name: extract_orders
      type: sql
      source: WORKSPACE
      path: /Workspace/Users/zhang3/sql/extract.sql
      engineType: emr_serverless_spark
      engineQueue: "{{project.parameters.computing_queue}}"
      parameterValues:
        source_db: "{{project.parameters.source_database}}"
        target_db: "{{project.parameters.target_database}}"
      position:
        x: "200"
        y: "100"

    - name: notify
      type: notebook
      source: WORKSPACE
      path: /Workspace/Users/zhang3/notebooks/notify.notebook
      generalComputingResourceGroupName: "{{project.parameters.python_resource_group}}"
      parameterValues:
        webhook_url: "{{project.parameters.alert_webhook}}"
      dependsOn:
        activities:
          - name: extract_orders
      position:
        x: "400"
        y: "100"

  trigger:
    type: scheduled
    cronExpression: "0 2 * * *"
    frequency: daily

  parameters:
    - name: biz_date
      default: "${date}"

说明

在此配置中,computing_queuesource_databasetarget_databasepython_resource_groupalert_webhookscheduling_group 均通过项目参数注入,Pipeline 本身不包含任何环境相关的硬编码值。

参数管理建议

建议

说明

环境配置全部参数化

数据库地址、存储路径、计算队列、告警配置等与环境相关的值一律使用项目参数。

禁止硬编码环境信息

代码和 Pipeline 配置中不直接写入环境特定的值。

统一命名规范

项目参数使用 snake_case,语义清晰(如 source_databasecomputing_queue)。

文档化参数含义

在项目参数中填写 description,说明每个参数的用途和取值规范。

最小权限原则

生产环境参数仅限 Admin 修改,避免误操作。

定期审计参数

检查是否有过时或冗余的参数,及时清理。

最近更新时间:2026.06.12 11:44:14
这个页面对您有帮助吗?
有用
有用
无用
无用