Git代码同步与合并

DataWorks 与 Git 深度集成,赋能数据研发新模式。DataWorks 的代码同步及合并功能实现了平台与 Git 仓库的无缝对接。无论是代码的保存还是发布,所有变更都能自动同步至指定的 Git 分支。同时,您也可以轻松地将 Git 分支上的代码修改合并回 DataWorks。

重要

本功能处于邀测阶段,您可提交工单联系技术支持人员开通白名单。

功能概述

DataWorksGit的集成包含两种流程:

  • DataWorksGit的同步:保存或发布DataWorks中的代码时,变更内容将自动提交至Git仓库的保护分支。该过程由专用的Git账户和具备网络访问能力的Serverless资源组自动执行。

  • GitDataWorks的合并:将Git仓库的主分支或独立分支的代码变更,合并回DataWorks。

DataWorksGit仓库中自动创建并管理以下三个分支,并通过分支保护规则防止手动更改:

  • dataworks_${region}_${projectName}_save:对应在DataWorks中执行保存操作后的代码。

  • dataworks_${region}_${projectName}_release_dev:对应成功发布到开发环境的代码。

  • dataworks_${region}_${projectName}_release_prod:对应成功发布到生产环境的代码。

步骤一:准备云资源与网络环境

代码同步任务依赖Serverless资源组执行,并需通过网络访问Git仓库和OSS。

  1. 准备Serverless资源组并配置网络。

    • 准备一个DataWorksServerless资源组,并绑定到目标工作空间。

    • 确保该资源组可访问Git服务器的SSH端口(仅支持22端口)。

      • 公网Git仓库(例如云效CodeUp、GitHub.com):为资源组所在的VPC配置公网NAT网关EIP,以开通公网访问能力。

      • 私网Git仓库:确保资源组与Git服务器之间的私有网络(VPC)可达,详情参见VPC对等连接

  2. 准备OSS数据源。 代码同步功能使用OSS进行临时存储。

    • 在与DataWorks工作空间相同的地域(Region)下,创建一个OSS Bucket

    • DataWorks工作空间的数据源管理页面,创建一个指向该BucketOSS数据源

      说明

      仅支持使用访问密钥(Access Key)模式的数据源。

步骤二:准备Git环境

Git平台创建专用账户、配置SSH密钥及设置分支保护规则。

  1. 创建Git专用账户并生成SSH密钥。

    1. Git平台(例如云效、GitLab)创建专用于代码自动提交的账户(例如 dataworks_pusher),并配置有效邮箱。

    2. 为该账户生成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
  2. Git平台添加公钥。 

    登录Git平台,在 dataworks_pusher 账户的SSH密钥管理页面,添加上一步生成的公钥(id_rsa.pub 文件内容)。

  3. 创建代码仓库并配置分支保护规则。

    1. 创建专用于DataWorks代码管理的Git仓库,例如 DataWorks_code

    2. 在仓库中设置分支保护规则,确保DataWorks自动管理的分支不被直接修改。此操作需由仓库管理员完成。

      重要

      未正确配置分支保护规则可能导致DataWorks自动管理的分支被意外修改,从而破坏同步一致性。

      • 分支名模式dataworks_*

      • 允许推送:选择指定成员,并添加 dataworks_pusher 账户。

      • 允许合并:选择不允许任何人

步骤三:配置并初始化代码同步

重要

仅支持租户管理员及工作空间管理员设置当前空间的代码同步配置,其他角色无权限新增或者变更该内容。

建立DataWorks工作空间与Git仓库的连接,并启动初始化。

image

  1. 进入DataWorks工作空间列表页,在顶部切换至目标地域,找到已创建的工作空间,单击操作列的快速进入 > Data Studio,进入Data Studio。

  2. (可选)连接性测试。正式配置前,可在Data Studio中创建临时Shell节点,使用已准备的Serverless资源组进行调试,以验证网络连通性和SSH私钥的有效性。

    1. 测试网络连通性:运行telnet命令。如果日志显示“Connected to ...”,表示网络连通,网络连通后,即可停止运行。

      # 替换为您的Git服务器域名或IP,如云效地址:codeup.aliyun.com
      telnet your_git_server_domain 22

      以云效为例,当日志出现以下内容,则说明网络已连通,可停止运行任务;否则,需要检查网络配置是否成功。

      image

    2. 测试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

      单击运行,以云效为例,若运行日志中出现以下内容,说明该账号的私钥正确。

      image

  3. 在左侧导航栏底部单击image > Data Studio设置 > 代码同步,进入代码同步页面。配置以下参数:

    注意:代码同步页签需开通白名单才能看到。

    名称

    描述

    Git地址

    目标Git代码库的SSH地址。

    私钥

    粘贴步骤二中生成的私钥(id_rsa文件)的完整内容。

    重要

    私钥内容需要包括-----BEGIN OPENSSH PRIVATE KEY----------END OPENSSH PRIVATE KEY-----

    DataWorks OSS 数据源

    选择已准备好的OSS数据源。

    说明

    界面若提示:“未授权当前资源组访问OSS数据源权限,去授权”,点击去授权即可。

    OSS 存储路径

    指定一个OSS路径用于存放代码元数据,例如:dataworks-workspace-code

    DataWorks OSS 通用资源组

    选择上文准备的Serverless资源组。

  4. 配置完成后,单击开始同步。开启同步后,需要对Git代码库进行初始化。单击初始化,系统将自动在Git仓库中创建DataWorks所需的分支并同步当前工作空间中的代码,可能需要数分钟。

    说明

    关闭同步后,再次开启同步,需要重新初始化。

    image

    配置生效后,DataWorks会自动在您的Git仓库中创建并管理以下三个分支,请勿手动创建或修改它们:

    • dataworks_${region}_${projectName}_save:对应在DataWorks中保存操作的代码。

    • dataworks_${region}_${projectName}_release_dev:对应发布到开发环境成功的代码。

    • dataworks_${region}_${projectName}_release_prod:对应发布到生产环境成功的代码。

    此后,在DataWorks中的每一次保存和发布操作,都会自动将相应的代码和配置变更内容同步到Git对应的分支中。

    点击默认的save分支,可查看当前工作空间中已保存的节点代码、工作流、目录等信息。

    image

步骤四:验证代码同步

  1. 新建数据开发Shell节点,命名为:shell_test。

  2. 在代码编辑页中填写如下代码,并单击工具栏的保存按钮。

    echo 'Code push test.'
  3. 登录Git,进入目标代码库,选择save分支,找到shell_test文件夹,可观察到文件夹下存在shell_test.sh(代码文件)shell_test.spec.json(调度配置文件)两个文件,单击shell_test.sh可查看到shell_test节点及其代码内容,即为同步成功。

    image

  4. 其余两个分支的同步情况,可通过发布节点到相应的环境中验证,发布操作详见:同工作空间发布

赋能多人协同:支持从 Git 分支反向合并

DataWorks 不仅支持将代码同步至 Git,更实现了强大的反向合并能力。您可以轻松将 Git 远端分支的最新变更合并回 DataWorks 平台。

这不仅包括主同步分支,也完全兼容基于该分支创建的各类特性分支(Feature Branch)。开发者可以遵循主同步分支的开发范式,在独立分支上进行开发、测试与代码审查(Code Review),最终将成熟的代码安全地集成回 DataWorks,赋能专业、高效的团队协同开发。

重要

此功能需要开启同步,支持开发及更高权限的角色。

  1. 合并入口

    在数据开发Data Studio界面左侧的导航栏,单击image代码合并,进入代码合并界面。

  2. 合并预览

    输入要合并的分支名称后,单击合并预览,系统将比较来源分支与DataWorks默认的save分支之间的新增,变更,删除的内容。

    • 无冲突:界面将展示变更内容的Diff,清晰地列出将被新增、修改或删除的节点及代码改动详情。

    • 有冲突:界面将直接提示冲突,并展示具体的冲突内容。此时您需要返回本地,在Git中手动解决冲突后,再重新发起合并。

    image

    image

    image

  3. 确认合并

    1. 在预览无误后,单击确认合并

    2. 系统将开始执行合并任务,您可以实时看到合并进度。

    3. 所有历史合并记录都会展示在下方的 代码合并历史 区域,您可以随时查看责任人、合并状态和分支明细。

      image

产品计费

涉及的计费资源主要包括:

  • Serverless资源组:同步任务使用的资源规格为0.5CU,根据购买资源组的计费方式不同,产生的费用也不相同。详见:Serverless资源组计费

  • 公网NAT网关与EIP:如果Git仓库位于公网,会产生相应的流量费用。详见:NAT 网关计费

  • OSS存储:用于存储代码同步数据,按存储容量和请求次数计费。详见:OSS计费概述

常见问题FAQ

  • Q: 显示初始化成功,但是Git仓库中未创建分支,怎么办?

    A: 请按连接性测试章节,依次排查telnetssh连接是否成功。重点检查Serverless资源组的网络配置(NAT网关/VPC)是否正确。

  • Q: 合并代码时提示冲突,该如何处理?

    A: 请在您的本地开发环境中,将DataWorkssave分支 (dataworks_${region}_${projectName}_save) 拉取到本地,与您的开发分支进行合并(git mergegit rebase),解决冲突后,再将您的开发分支推送到远程,最后回到DataWorks页面重新发起合并。