本文介绍如何通过 DataLeap New IDE 的参数系统实现开发环境与生产环境的配置差异化,确保同一套代码和 Pipeline 在不同环境中使用正确的配置。
数据管道在开发和生产环境中通常需要使用不同的配置:
配置项 | 开发环境 | 生产环境 |
|---|---|---|
数据库地址 | 测试库地址 | 生产库地址 |
存储路径 |
|
|
计算队列 |
|
|
数据量 | 采样数据 / 小分区 | 全量数据 |
告警通知 | 开发者个人 | 值班群组 |
如果在代码中硬编码这些值,每次发布时都需要手动修改,容易出错且难以维护。DataLeap New IDE 通过项目参数机制实现环境隔离。
环境隔离主要通过项目参数实现——同一个项目在开发环境和生产环境各自维护一套项目参数值。Pipeline 和 Activity 通过引用项目参数获取当前环境的配置。
在项目设置中定义项目级参数,不同环境设置不同的值:
参数名 | 开发环境值 | 生产环境值 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
在 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 发布至生产环境后:
开发环境: {{project.parameters.source_database}} → "dev_ods" 生产环境: {{project.parameters.source_database}} → "prod_ods"
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_queue、source_database、target_database、python_resource_group、alert_webhook 和 scheduling_group 均通过项目参数注入,Pipeline 本身不包含任何环境相关的硬编码值。
建议 | 说明 |
|---|---|
环境配置全部参数化 | 数据库地址、存储路径、计算队列、告警配置等与环境相关的值一律使用项目参数。 |
禁止硬编码环境信息 | 代码和 Pipeline 配置中不直接写入环境特定的值。 |
统一命名规范 | 项目参数使用 |
文档化参数含义 | 在项目参数中填写 description,说明每个参数的用途和取值规范。 |
最小权限原则 | 生产环境参数仅限 Admin 修改,避免误操作。 |
定期审计参数 | 检查是否有过时或冗余的参数,及时清理。 |