DataWorks 与 Git 深度集成,赋能数据研发新模式。DataWorks 的代码同步及合并功能实现了平台与 Git 仓库的无缝对接。无论是代码的保存还是发布,所有变更都能自动同步至指定的 Git 分支。同时,您也可以轻松地将 Git 分支上的代码修改合并回 DataWorks。
本功能仅支持DataWorks企业版,且处于邀测阶段。您可提交工单联系技术支持人员开通白名单。
功能概述
DataWorks与Git的集成包含两种流程,可实现DataWorks的本工作空间的代码管理和跨工作空间的代码合并:
DataWorks到Git的同步:保存或发布DataWorks中的代码时,变更内容将自动提交至Git仓库的保护分支。该过程由专用的Git账户和具备网络访问能力的Serverless资源组自动执行。
Git到DataWorks的合并:将Git仓库的主分支或独立分支的代码变更,合并回DataWorks。
DataWorks在Git仓库中自动创建并管理以下三个分支,并通过分支保护规则防止手动更改:
dataworks_${region}_${projectId}_save:对应在DataWorks中执行保存操作后的代码。dataworks_${region}_${projectId}_release_dev:对应成功发布到开发环境的代码。dataworks_${region}_${projectId}_release_prod:对应成功发布到生产环境的代码。
配置与初始化
步骤一:准备云资源与网络环境
代码同步任务依赖Serverless资源组执行,并需通过网络访问Git仓库和OSS。
准备Serverless资源组并配置网络。
准备一个DataWorks的Serverless资源组,并绑定到目标工作空间。
确保该资源组可访问Git服务器的SSH端口(仅支持22端口)。
准备OSS数据源。 代码同步功能使用OSS进行临时存储。
在与DataWorks工作空间相同的地域(Region)下,创建一个OSS Bucket。
在DataWorks工作空间的数据源管理页面,创建一个指向该Bucket的OSS数据源。
说明仅支持使用访问密钥(Access Key)模式的数据源。
步骤二:准备Git环境
在Git平台创建专用账户、配置SSH密钥及设置分支保护规则。
创建Git专用账户并生成SSH密钥。
在Git平台(例如云效、GitLab)创建专用于代码自动提交的账户(例如
dataworks_pusher),并配置有效邮箱。为该账户生成RSA算法模式的SSH密钥对,生成过程中无需设置口令(passphrase)。
目的:生成用于认证的SSH公钥和私钥。
命令:
# 将 "your_user_email@example.com" 替换为上一步中配置的账户邮箱 ssh-keygen -t rsa -C "your_user_email@example.com" # 在提示输入口令时,直接按回车键跳过 # Enter passphrase (empty for no passphrase): [回车] # Enter same passphrase again: [回车]结果:命令执行成功后,在
~/.ssh/目录下生成id_rsa(私钥)和id_rsa.pub(公钥)文件。后续步骤将使用这两个文件的内容。# 复制并保存公钥与私钥内容,后续步骤需要使用 cat ~/.ssh/id_rsa.pub cat ~/.ssh/id_rsa
在Git平台添加公钥。
登录Git平台,在
dataworks_pusher账户的SSH密钥管理页面,添加上一步生成的公钥(id_rsa.pub文件内容)。创建代码仓库并配置分支保护规则。
创建专用于DataWorks代码管理的Git仓库,例如
DataWorks_code。在仓库中设置分支保护规则,确保DataWorks自动管理的分支不被直接修改。此操作需由仓库管理员完成。
重要未正确配置分支保护规则可能导致DataWorks自动管理的分支被意外修改,从而破坏同步一致性。
分支名模式:
dataworks_*允许推送:选择指定成员,并添加
dataworks_pusher账户。允许合并:选择不允许任何人。
步骤三:配置并初始化代码同步
仅支持租户管理员及工作空间管理员设置当前空间的代码同步配置,其他角色无权限新增或者变更该内容。
建立DataWorks工作空间与Git仓库的连接,并启动初始化。

进入DataWorks工作空间列表页,在顶部切换至目标地域,找到已创建的工作空间,单击操作列的,进入Data Studio。
(可选)连接性测试。正式配置前,可在Data Studio中创建临时Shell节点,使用已准备的Serverless资源组进行调试,以验证网络连通性和SSH私钥的有效性。
测试网络连通性:运行
telnet命令。如果日志显示“Connected to ...”,表示网络连通,网络连通后,即可停止运行。# 替换为您的Git服务器域名或IP,如云效地址:codeup.aliyun.com telnet your_git_server_domain 22以云效为例,当日志出现以下内容,则说明网络已连通,可停止运行任务;否则,需要检查网络配置是否成功。

测试SSH密钥有效性:运行以下脚本。如果日志出现“Welcome to ...”等成功认证信息,表示私钥配置正确。
# SSH私钥是否正确,期望输出“Welcome to xxx,……” # 以下脚本将在一个临时的运行环境中,将您提供的私钥内容写入标准SSH密钥文件(~/.ssh/id_rsa),并以此测试与Git服务器的连接,验证私钥的有效性。 # 将私钥内容编码为Base64 id_rsa_base64=$(cat <<'EOF' | base64 -w 0 # [此处粘贴私钥(id_rsa文件)完整内容] -----BEGIN OPENSSH PRIVATE KEY----- ... -----END OPENSSH PRIVATE KEY----- EOF ) # 在运行环境中重建SSH密钥文件 id_rsa=$(base64 -d <<< "$id_rsa_base64") mkdir ~/.ssh echo "$id_rsa" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub chmod 644 ~/.ssh/id_rsa.pub # 测试SSH连接(将your_git_server_domain替换为您的Git SSH地址,如codeup.aliyun.com) ssh -T git@your_git_server_domain单击运行,以云效为例,若运行日志中出现以下内容,说明该账号的私钥正确。

在左侧导航栏单击
代码管理按钮,进入代码同步配置页面。配置以下参数:注意:代码管理需开通白名单才能看到。
名称
描述
SSH地址
目标Git代码库的SSH地址。
私钥
粘贴步骤二中生成的私钥(
id_rsa文件)的完整内容。重要私钥内容需要包括
-----BEGIN OPENSSH PRIVATE KEY-----和-----END OPENSSH PRIVATE KEY-----。OSS 数据源
选择已准备好的OSS数据源。
说明界面若提示:“未授权当前资源组访问OSS数据源权限,去授权”,点击去授权即可。
OSS 路径
指定一个OSS路径用于存放代码元数据,例如:
dataworks-workspace-code。通用资源组
选择上文准备的Serverless资源组。
配置完成后,单击开始同步。开启同步后,需要对Git代码库进行初始化。单击初始化,系统将自动在Git仓库中创建DataWorks所需的分支并同步当前工作空间中的代码,可能需要数分钟,在此期间,单击右上角的
按钮,可以查看初始化日志。|说明关闭同步后,再次开启同步,需要重新初始化。重新初始化之前需要清理
配置生效后,DataWorks会自动在您的Git仓库中创建并管理以下三个分支,请勿手动创建或修改它们:
dataworks_${region}_${projectId}_save:对应在DataWorks中保存操作的代码。dataworks_${region}_${projectId}_release_dev:对应发布到开发环境成功的代码,如工作空间为简单模式,则dev分支不生成。dataworks_${region}_${projectId}_release_prod:对应发布到生产环境成功的代码。
此后,在DataWorks中的每一次保存和发布操作,都会自动将相应的代码和配置变更内容同步到Git对应的分支中。
点击默认的save分支,可查看当前工作空间中已保存的节点代码、工作流、目录等信息。

步骤四:验证代码同步
新建数据开发Shell节点,命名为:shell_test。
在代码编辑页中填写如下代码,并单击工具栏的保存按钮。
echo 'Code push test.'登录Git,进入目标代码库,选择save分支,找到shell_test文件夹,可观察到文件夹下存在
shell_test.sh(代码文件)、shell_test.spec.json(调度配置文件)和dataworks.properties(变量文件)三个文件,单击shell_test.sh可查看到shell_test节点及其代码内容,即为同步成功。
其余两个分支的同步情况,可通过发布节点到相应的环境中验证,发布操作详见:同工作空间发布。
场景与功能
赋能反向合并
DataWorks 不仅支持将代码同步至 Git,更实现了强大的反向合并能力。您可以轻松将 Git 远端分支的最新变更合并回 DataWorks 平台。
这不仅包括主同步分支,也完全兼容基于该分支创建的各类特性分支(Feature Branch)。开发者可以遵循主同步分支的开发范式,在独立分支上进行开发、测试与代码审查(Code Review),最终将成熟的代码安全地集成回 DataWorks,赋能专业、高效的团队协同开发。
此功能需要开启同步,支持开发及更高权限的角色。
合并入口
在界面,展开代码合并一栏。
合并预览
输入要合并的分支名称后,单击合并预览,系统将比较来源分支与DataWorks默认的
save分支之间的新增,变更,删除的内容。无冲突:界面将展示变更内容的Diff,清晰地列出将被新增、修改或删除的节点及代码改动详情。
有冲突:界面将直接提示冲突,并展示具体的冲突内容。此时您需要返回本地,在Git中手动解决冲突后,再重新发起合并。



确认合并
在预览无误后,单击确认合并。
系统将开始执行合并任务,您可以实时看到合并进度。
所有历史合并记录都会展示在下方的 代码合并历史 区域,您可以随时查看责任人、合并状态和分支明细。

赋能跨空间合并
Git同步功能支持对DataWorks项目进行跨空间乃至跨地域的克隆,旨在将一套标准化的代码逻辑作为“模板”,快速复用或分发至多个业务场景。例如,用户可将一套通用的用户分析模型,快速部署到不同业务线的独立工作空间中,并使其运行在各自专属的计算资源和数据源上。
初始化设置
跨项目合并策略
代码分支跨项目合并时,仅合并节点代码、基本属性和调度配置,运行配置不会合并入目标空间。
由于两个工作空间所使用的计算资源、资源组、数据源等配置不一定相同,因此,需要配置资源映射
merge_mapping。打开本地电脑终端,将源工作空间的save分支clone到本地,并切换至源工作空间project1的save分支,如:
dataworks_cn_shenzhen_270256_save。# 将远程Git仓库的代码克隆到本地 git clone git@your_git_server_domain:64dc86a16800a4a57137536/cross_project_shenzhen.git # 切换分支至project1的save分支 git checkout <your branch name>创建merge_mapping映射文件。
# cross_project_shenzhen为代码库名称 cd cross_project_shenzhen # 创建目录 mkdir -p DATAWORKS_SYSTEM_CONFIG/merge_mapping # 创建映射文件,文件名称如:cn_shenzhen_270256_to_cn_shenzhen_270257.properties vi DATAWORKS_SYSTEM_CONFIG/merge_mapping/<region>_<projectId>_to_<region>_<projectId>.properties根据实际情况配置文件内容,并修改
=左右两边参数的实际值,每种类型都支持填写多个参数。# 数据源 # spec.datasource.name.<project1数据源名称>=<project2数据源名称> spec.datasource.name.mysql_01=mysql_02 # 资源组 # spec.runtimeResource.resourceGroup.<project1资源组ID>=<project2资源组ID> spec.runtimeResource.resourceGroup.group_524257424564736=Serverless_res_group_524257424564736_764027070300961 # 节点输出名前缀 # spec.output-prefix.<project1名称>=<project2名称> spec.output-prefix.git_cross_project_1=git_cross_project_2 # MaxCompute SQL中的表的项目前缀 # script.project-identifier.<project1名称>=<project2名称> script.project-identifier.git_cross_project_1=git_cross_project_2 # 镜像 # spec.script.runtime.container.imageId.<project1中使用的镜像ID>=<project2中使用的镜像ID> spec.script.runtime.container.imageId.Default=System_python311_ubuntu2204_20251201 # RAM角色 # spec.script.runtime.linkedRoleArn.<project1中使用的ram角色ARN>=<project2中使用的ram角色ARN> spec.script.runtime.linkedRoleArn.acs:ram::1107550004253538:role/aliyundataworksaccessingenirole=acs:ram::1107550004253538:role/aliyundataworksaccessingossrole将代码推送到Git代码仓库。
# 添加当前目录变更至git git add . # 推送分支内容至远程Git仓库 git push
跨项目合并代码
进入目标工作空间git_cross_project_2的数据开发,单击左侧导航的代码管理,并找到代码合并页签。
在分支输入框中填入源工作空间的save分支的名称,如:
dataworks_cn_shenzhen_270256_save。
点击合并预览,确认无误后,将工作空间git_cross_project_1的代码合并入工作空间git_cross_project_2。合并操作详见从 Git 分支反向合并。
产品计费
涉及的计费资源主要包括:
Serverless资源组:同步任务使用的资源规格为1CU,根据购买资源组的计费方式不同,产生的费用也不相同。详见:Serverless资源组计费。
公网NAT网关与EIP:如果Git仓库位于公网,会产生相应的流量费用。详见:NAT 网关计费。
OSS存储:用于存储代码同步数据,按存储容量和请求次数计费。详见:OSS计费概述。
常见问题FAQ
Q: 显示初始化成功,但是Git仓库中未创建分支,怎么办?
A: 请按连接性测试章节,依次排查telnet和ssh连接是否成功。重点检查Serverless资源组的网络配置(NAT网关/VPC)是否正确。
Q: 合并代码时提示冲突,该如何处理?
A: 请在您的本地开发环境中,将DataWorks的save分支 (dataworks_${region}_${projectId}_save) 拉取到本地,与您的开发分支进行合并(git merge或git rebase),解决冲突后,再将您的开发分支推送到远程,最后回到DataWorks页面重新发起合并。







