十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

使用 GitHub Actions 部署 dlt 数据管道:从零到定时运行实战指南

使用 GitHub Actions 部署 dlt 数据管道:从零到定时运行实战指南 使用 GitHub Actions 部署 dlt 数据管道从零到定时运行实战指南【免费下载链接】dltdata load tool (dlt) is an open source Python library that makes data loading easy ️项目地址: https://gitcode.com/GitHub_Trending/dl/dltdltdata load tool是一个开源的 Python 数据加载库让「从任意数据源抽取数据、规范化并加载到目标数据库或数据仓库」变得简单。在本地跑通一个 pipeline 之后下一步通常是将它放到云端按计划定时运行。本指南基于 dlt 仓库官方文档 deploy-with-github-actions.md并结合 dlt deploy 命令的源码实现完整讲解如何使用dlt deploy命令生成 GitHub Actions workflow把 pipeline 部署为每 30 分钟或任意 cron 间隔自动执行的云端任务。读完本文你将掌握从项目入库、命令生成、密钥配置、提交推送到监控与手动触发的完整闭环并理解命令背后的工作机制与调度精度限制。部署前置条件在真正执行部署之前需要先准备好三件事安装 dlt参见 安装文档确保本地环境可以正常执行dlt命令。创建并跑通一个 pipeline参见 从 API 加载数据教程产出一个可以正常运行的 pipeline 脚本例如本文示例中的chess_pipeline.py。注册 GitHub 账号因为整个部署方案基于 GitHub Actions你需要一个 GitHub 账号来承载仓库与 workflow。这三步是后续所有操作的基础缺一不可dlt deploy命令在生成部署文件时会实际读取本地 pipeline 的运行状态与配置并检查当前目录是否是一个带有 GitHub remote 的 git 仓库详见下文「命令背后发生了什么」。将 dlt 项目目录推送到 GitHub部署目标是一个 GitHub 仓库。如果还没有仓库需要先在dlt项目目录里初始化 git 仓库并推送到 GitHub官方说明参见 GitHub 文档「Adding locally hosted code to GitHub」。这一步的核心目的有两个让 workflow 文件有地方落地.github/workflows目录让 GitHub Actions 能读取并执行仓库中的 pipeline 脚本。在源码层面dlt deploy会调用 get_repo 打开当前目录的 git 仓库并通过 get_origin 校验远程地址若仓库没有设置 origin命令会直接报错并提示先设置远程地址若 origin不是 GitHub例如指向 GitLab 或本地路径命令同样会中断因为 GitHub Actions 部署只支持 GitHub 仓库。所以请务必在部署前把代码推送或至少设置好到 GitHub 远程仓库。确认 pipeline 本地可运行部署的本质是「把本地已经验证过的运行流程搬到云端定时执行」因此必须先在本地成功运行一次 pipeline。文档中的验证方式很简单python3 chess_pipeline.py # 将 chess_pipeline.py 替换为你的 pipeline 文件这条命令需要成功地把数据从源source加载到目标destination至少一次。这一步不仅仅是「习惯建议」而是硬性校验dlt deploy在生成部署时会调用 get_state_and_trace 读取 pipeline 的 trace 记录并检查最后一次运行是否存在且包含执行步骤否则抛出PipelineWasNotRun提示「请先在本地至少成功运行一次 pipeline」最后一步是否成功结束且无异常最后一步是否真正到达了load加载阶段——只有成功把数据写入目标才算「可部署」。换句话说dlt deploy不是凭空生成配置而是基于你本地这次真实运行的轨迹trace来收集需要注入 workflow 的环境变量与密钥详见下文「密钥收集机制」。初始化部署生成 GitHub Actions workflow安装 CLI 扩展依赖deploy命令属于 dlt 的 CLI 扩展功能需要先安装额外的依赖包pip install dlt[cli]从 commands.py 中 deploy 子命令的文档字符串 可以看到安装该扩展会为当前环境补充 deploy 所需的相关包例如 cron 表达式解析、依赖树分析等。执行 deploy 命令安装完成后执行下面的命令生成一个每 30 分钟运行一次 pipeline 的 GitHub workflowdlt deploy chess_pipeline.py github-action --schedule */30 * * * *命令执行后dlt 会解析chess_pipeline.py确认脚本确实调用了pipeline.run()见 get_visitors从脚本中解析出 pipeline 名称如果脚本里有多个 pipeline 或pipeline_name无法静态确定会交互式地让你选择或回退到默认名称见 parse_pipeline_info读取本地最近一次成功运行的状态与 trace在.github/workflows目录生成一个名为run_chess_workflow.yml的 workflow 文件命名规则为run_{pipeline_name}_workflow.yml见 _generate_workflow生成一个名为requirements_github_action.txt的依赖清单文件用于在云端复现本地环境见 _generate_workflow。可选的运行触发方式除了必填的--schedulecron 表达式例如*/30 * * * *表示每 30 分钟注意用引号包裹deploy 子命令还支持两个可选开关定义见 commands.py参数默认值作用--schedule */30 * * * *必填以 cron 表达式指定 pipeline 的运行计划--run-manuallyTrue允许在 GitHub Actions UI 中手动触发运行--run-on-pushFalse每次向仓库推送代码时也运行 pipeline在源码 GithubActionDeployment._create_new_workflow 中可以看到这些开关对生成结果的实际影响若未启用run_on_pushworkflow 的on.push触发条件会被删除若未启用run_manuallyon.workflow_dispatch会被删除on.schedule始终被设置为[{cron: 你的调度表达式}]。workflow 的密钥与环境变量注入生成的 workflow 不只是「定时跑一个脚本」这么简单它还会把你本地 pipeline 用到的配置一并带上。在 _update_envs 中dlt 会遍历上次运行 trace 里解析出的所有配置项并分两类处理密钥secret来自 secrets 提供方如secrets.toml的敏感值会被写入 workflow 的env但值本身不会写进文件而是以 GitHub Actions secrets 的模板占位符形式${{ secrets.XXX }}注入由 GitHub 在运行时安全地替换普通配置非密钥那些不是来自config.toml的配置值会被直接写入 workflow 的env作为普通环境变量。这就是为什么部署后你还需要手动去 GitHub 配置 secrets——密钥的值始终由 GitHub Secrets 保管不落盘、不提交保证凭证安全。在 GitHub 上添加 Secret 值执行dlt deploy后命令行工具会打印出每一对Name和Secret同时打印一个形如github.com/.../settings/secrets/actions的链接。你需要把这些键值对逐一复制粘贴到该页面的 GitHub Actions secrets 配置中。从 _echo_instructions 的源码可以看出如果 pipeline 完全不需要任何密钥命令会直接提示「Your pipeline does not seem to need any secrets.」跳过此步否则会列出需要配置的 secret 名称通常来自本地的secrets.toml见 make_dlt_settings_path并给出 GitHub secrets 配置页面的直达链接通过 github_origin_to_url 从你的仓库 origin 拼接生成。值得一提的是从 dlt 1.0 开始密钥不再存储在 trace 中命令会尝试从本地可用的配置例如secrets.toml重新读取并展示。如果某些密钥读取不到命令行会提示「please set me up!」并建议你在运行 pipeline 的同一工作目录执行 deploy 命令见 _display_missing_secret_info。添加、提交并推送文件完成 secrets 配置后将生成的部署文件提交到 git。文档给出的标准做法是git add . git commit -m pipeline deployed with github action然后推送到 GitHubgit push origin更精确的做法是只提交 deploy 生成的两个文件——dlt deploy在输出中会直接给出这两条命令见 _echo_instructionsgit add requirements_github_action.txt .github/workflows/run_chess_workflow.yml git commit -m run chess_pipeline pipeline with github action git push origin如果你的仓库还有未提交的修改例如 pipeline 脚本本身的改动dlt 还会额外给出警告提醒你一并推送见 is_dirty 检查避免云端运行的代码与本地不一致。监控与手动触发pipeline推送完成后workflow 即按你设定的 cron 计划开始运行。dlt deploy会在输出中打印一个形如github.com/.../actions/workflows/run_chess_workflow.yml的链接打开它即可在 GitHub Actions UI 中监控运行历史查看每次运行的成功 / 失败状态手动触发如果部署时启用了--run-manually默认开启页面会提供手动运行按钮方便你在任意时刻触发一次 pipeline。顶层监控视角在 GitHub Actions 页面顶部可以直观地看到计划中或未运行的 workflow 列表运行历史例如成功 / 失败状态、持续时间、触发方式。下面是文档配图中展示的 workflow 列表页可以看到run_chess_workflow.yml、run_twitter_workflow.yml等按 pipeline 命名的 workflow 及其历史运行状态workflow 内部 DAG 视角单个 workflow 运行内部是一个由 job 和 step 组成的有向无环图DAG。以run_twitter_workflow.yml为例图中依次展示maybe_skip与run_pipeline两个 job 的执行链路与各自耗时从源码看生成的 workflow 中run_pipelinejob 的最后一步会执行python {pipeline脚本名}并且会自动加上cd进入脚本所在目录见 _create_new_workflow保证在云端也能在正确的路径下运行。已知限制GitHub cron 调度的精度GitHub Actions 的 cron 调度器保真度约为 30 分钟——也就是说你无法指望任务在精确的时间点、以精确的间隔被触发。这是平台级限制不是 dlt 或本 workflow 的问题。文档给出的实际经验如下官方支持的最小间隔是5 分钟如果设置 5 分钟实际运行间隔可能在5 到 30 分钟之间波动从实践来看任何大于 30 分钟的间隔平均而言都能按预期工作。因此在设计调度计划时应把这一精度误差纳入考虑如果你的业务对「准点」有强要求建议使用大于 30 分钟的间隔或考虑其他调度方案例如部署到 Airflow Composerdlt 同样支持见 AirflowDeployment。命令背后发生了什么一次完整的 deploy 流程把上面的步骤串起来一次dlt deploy chess_pipeline.py github-action --schedule */30 * * * *的完整内部流程如下对应 run_deployment 与 deploy_command环境校验确认 git 命令可用、当前目录是 git 仓库且 origin 指向 GitHub脚本解析用 PipelineScriptVisitor 静态解析 pipeline 脚本确认其中调用了pipeline.run()并提取 pipeline 名称状态读取dlt.attach挂载到该 pipeline读取最近一次成功运行的 state 与 trace收集环境变量与密钥get_state_and_trace模板获取从 dlt 的 deploy 模板仓库克隆最新模板含run_pipeline_workflow.yml见 _create_new_workflowworkflow 定制填充 cron 计划、注入 env 与 secrets 占位符、改写最后的运行命令依赖冻结基于当前环境的 pip 依赖树生成requirements_github_action.txt排除黑名单中的包见 generate_pip_freeze落地文件在.github/workflows/写入run_{pipeline_name}_workflow.yml在仓库根目录写入requirements_github_action.txt见 _make_modification输出指引打印 secrets 清单、GitHub secrets 配置链接、提交命令与监控链接。整个流程的设计目标很明确把你本地已验证的一次运行无损、安全地复刻到云端定时执行——密钥走 GitHub Secrets、依赖走冻结清单、运行路径自动适配最大程度减少手工步骤。总结本文以 dlt 官方文档为主线完整走通了「本地跑通 pipeline → 推送到 GitHub →dlt deploy生成 workflow → 配置 secrets → 提交推送 → 监控运行」的 GitHub Actions 部署闭环。关键要点回顾部署前必须先本地成功运行 pipeline因为 deploy 命令会基于这次运行的 trace 收集配置与密钥dlt deploy生成的 workflow 会正确处理环境变量与密钥注入密钥以 GitHub Secrets 占位符形式存在安全不落盘调度采用 cron 表达式配合--run-on-push、--run-manually可以组合出适合自己的触发策略GitHub cron 调度精度约为 30 分钟5 分钟是最小官方间隔设计调度计划时务必预留误差如需更高精度的调度或更复杂的 DAG 编排dlt 还提供了 Airflow Composer 部署方案dlt deploy script airflow-composer作为备选。相关源码与文档可以进一步参考deploy 命令实现、deploy 辅助逻辑、CLI 命令定义 以及 官方部署文档。【免费下载链接】dltdata load tool (dlt) is an open source Python library that makes data loading easy ️项目地址: https://gitcode.com/GitHub_Trending/dl/dlt创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表