すべてのプロダクト
Search
ドキュメントセンター

DataWorks:Git コード同期とマージ

最終更新日:Mar 21, 2026

DataWorks は Git と統合され、データ開発の新しいモデルを提供します。コード同期およびマージ機能により、DataWorks プラットフォームとご利用の Git リポジトリがシームレスに接続されます。コードを保存または公開すると、変更内容が指定された Git ブランチに自動的に同期されます。また、Git ブランチからのコード変更を DataWorks にマージすることも可能です。

重要

この機能は DataWorks Enterprise Edition のみで利用可能であり、現在プライベートプレビュー中です。この機能をご利用になるには、テクニカルサポートにチケットを送信し、ホワイトリストへの追加を依頼してください。

概要

DataWorks と Git の統合には、ワークスペース内でのコード管理と、ワークスペース間でのコードマージという 2 つのワークフローが含まれます。

  • DataWorks から Git への同期:DataWorks でコードを保存または公開すると、変更内容が Git リポジトリ内の保護されたブランチに自動コミットされます。このコミットは専用の Git アカウントおよびネットワークアクセス権を持つ Serverless Resource Group を介して実行されます。

  • Git から DataWorks へのマージ:Git リポジトリの main ブランチまたはフィーチャーブランチからコード変更を DataWorks にマージします。

DataWorks は、ご利用の Git リポジトリ内に以下の 3 つのブランチを自動的に作成・管理し、ブランチ保護ルールを適用して手動での変更を防止します。

  • dataworks_${region}_${projectId}_save:DataWorks での保存操作後のコードに対応します。

  • dataworks_${region}_${projectId}_release_dev:開発環境に正常に公開されたコードに対応します。

  • dataworks_${region}_${projectId}_release_prod:本番環境に正常に公開されたコードに対応します。

設定と初期化

ステップ 1:クラウドリソースとネットワークの準備

コード同期タスクは Serverless Resource Group を使用して実行され、Git リポジトリおよび Object Storage Service (OSS) へのネットワークアクセスが必要です。

  1. Serverless Resource Group を準備し、ネットワークを構成します。

    • DataWorks Serverless Resource Group を準備し、対象のワークスペースにバインドします。

    • リソースグループが Git サーバーの SSH ポートにアクセスできることを確認します。ポート 22 のみがサポートされています。

      • パブリック Git リポジトリ(例:Apsara DevOps または GitHub.com):リソースグループが配置されている Virtual Private Cloud (VPC) に インターネット NAT Gateway および EIP を構成し、パブリックネットワークアクセスを有効にします。

      • 非公開 Git リポジトリ:リソースグループの VPC と Git サーバーとのネットワーク接続を確保します。詳細については、「VPC Peering Connection」をご参照ください。

  2. OSS データソースを準備します。 コード同期機能では OSS を一時ストレージとして使用します。

    • DataWorks ワークスペースと同じリージョンに OSS バケット を作成します。

    • DataWorks ワークスペースの データソース ページで、そのバケット用の OSS データソース を作成します。

      説明

      Access Key を使用した認証を行うデータソースのみがサポートされています。キーには、次の権限が付与されている必要があります:oss:GetObjectoss:ListObjectsoss:PutObject、および oss:DeleteObject

ステップ 2:Git 環境の準備

ご利用の Git プラットフォームで専用アカウントを作成し、SSH キーを構成して、ブランチ保護ルールを設定します。

  1. 専用 Git アカウントを作成し、SSH キーを生成します。

    1. Apsara DevOps や GitLab などの Git プラットフォームで、自動コードコミット用の専用アカウント(例:dataworks_pusher)を作成します。このアカウントに有効なメールアドレスを設定します。

    2. このアカウント用に RSA アルゴリズム を使用して SSH キーペアを生成します。生成時にパスフレーズは設定しないでください。

      • 目的:認証用の SSH 公開鍵および秘密鍵を生成します。

      • コマンド

        # "your_user_email@example.com" を前のステップで設定したアカウントのメールアドレスに置き換えます。
        ssh-keygen -t rsa -C "your_user_email@example.com"
        
        # パスフレーズの入力が求められた場合は、Enter キーを押してスキップします。
        # Enter passphrase (empty for no passphrase): [Enter]
        # Enter same passphrase again: [Enter]
      • 結果:コマンドが正常に実行されると、id_rsa(秘密鍵)および id_rsa.pub(公開鍵)ファイルが ~/.ssh/ ディレクトリに生成されます。これらのファイルの内容は以降のステップで必要になります。

        # 公開鍵および秘密鍵の内容をコピーして保存します。後続のステップで必要になります。
        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 アカウントを追加します。

      • マージを許可するユーザーなし を選択します。

ステップ 3:コード同期の構成と初期化

重要

テナント管理者およびワークスペース管理者のみが、ワークスペースのコード同期を構成できます。

DataWorks ワークスペースを Git リポジトリに接続し、その後接続を初期化します。

image

  1. DataWorks コンソールの ワークスペース ページに移動します。上部ナビゲーションバーで目的のリージョンを選択し、目的のワークスペースを見つけ、操作 列で ショートカット > Data Studio を選択します。

  2. (オプション)接続性をテストします。 構成を完了する前に、DataStudio で一時的な Shell ノードを作成し、準備済みの Serverless Resource Group を使用してネットワーク接続および SSH 秘密鍵の有効性を検証できます。

    1. ネットワーク接続をテストします:telnet コマンドを実行します。ログに「Connected to ...」と表示された場合、接続は成功しています。その後、タスクを停止できます。

      # your_git_server_domain を Git サーバーのドメイン名または IP アドレス(例:Apsara DevOps の場合は codeup.aliyun.com)に置き換えます。
      telnet your_git_server_domain 22

      Apsara DevOps の場合、ログに次の内容が表示されればネットワークは接続されています。タスクを停止できます。それ以外の場合は、ネットワーク構成を確認する必要があります。

      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

      [実行] をクリックします。Apsara DevOps の場合、実行ログに次の内容が表示されれば、アカウントの秘密鍵は正しいです。

      image

  3. 左側のナビゲーションウィンドウで、imageコード管理 をクリックして コード同期 設定ページに移動します。次のパラメーターを構成します。

    注:DataStudio 設定項目タブは、ホワイトリストに追加された後にのみ表示されます。

    パラメーター

    説明

    Git リポジトリ アドレス

    対象の Git コードリポジトリの SSH アドレス。

    秘密鍵

    ステップ 2 で生成した秘密鍵(id_rsa ファイル)の全文を貼り付けます。

    重要

    秘密鍵の内容には、-----BEGIN OPENSSH PRIVATE KEY----- および -----END OPENSSH PRIVATE KEY----- が含まれている必要があります。

    DataWorks OSS データソース

    準備済みの OSS データソースを選択します。

    説明

    UI に「現在のリソースグループは OSS データソースへのアクセスが許可されていません。承認ページへ移動しますか?」と表示された場合は、[承認ページへ移動] をクリックします。

    OSS ストレージパス

    コードメタデータを格納する OSS パスを指定します(例:dataworks-workspace-code)。

    DataWorks OSS ユニバーサルリソースグループ

    事前に準備した Serverless Resource Group を選択します。

  4. 構成を完了したら、同期を有効化 をクリックします。次に、初期化 をクリックして Git コードリポジトリを初期化します。システムは Git リポジトリ内に必要な DataWorks ブランチを自動的に作成し、現在のワークスペースからコードを同期します。この処理には数分かかる場合があります。その間、右上隅の image ボタンをクリックして初期化ログを確認できます。

    説明

    同期を無効化して再度有効化する場合は、再度初期化を実行する必要があります。再初期化の前にはクリーンアップが必要です。

    構成が有効になると、DataWorks はご利用の Git リポジトリ内に以下の 3 つのブランチを自動的に作成・管理します。これらを手動で作成または変更しないでください。

    • dataworks_${region}_${projectId}_save:DataWorks での保存操作からのコードに対応します。

    • dataworks_${region}_${projectId}_release_dev:開発環境に正常に公開されたコードに対応します。ワークスペースがシンプルモードの場合、dev ブランチは生成されません。

    • dataworks_${region}_${projectId}_release_prod:本番環境に正常に公開されたコードに対応します。

    これ以降、DataWorks でのすべての保存および公開操作により、対応するコードおよび構成変更がそれぞれの Git ブランチに自動的に同期されます。

    デフォルトの保存ブランチをクリックすると、現在のワークスペース内の保存済みノードコード、ワークフロー、フォルダなどの情報を確認できます。

ステップ 4:コード同期の検証

  1. DataStudio で新しい Shell ノードを作成し、shell_test と名付けます。

  2. コードエディタで次のコードを入力し、ツールバーの保存ボタンをクリックします。

    echo 'Code push test.'
  3. Git にログインし、対象のリポジトリに移動して保存ブランチを選択します。shell_test フォルダを探します。このフォルダには、shell_test.sh (コードファイル)shell_test.spec.json (スケジューリング構成ファイル)、および dataworks.properties (変数ファイル) の 3 つのファイルが含まれていることを確認できます。shell_test.sh をクリックして shell_test ノードとそのコード内容を確認します。これにより、同期が成功したことが示されます。

  4. 他の 2 つのブランチの同期を検証するには、ノードを対応する環境に公開します。公開の詳細については、「タスクの公開」をご参照ください。

ユースケースと特徴

逆方向マージ

DataWorks はコードを Git に同期するだけでなく、強力な逆方向マージ機能も提供します。リモート Git ブランチからの最新の変更を DataWorks プラットフォームに簡単にマージできます。

この機能は、メインの同期ブランチおよびそこから作成されたフィーチャーブランチの両方と互換性があります。開発者は、メインの同期ブランチからフィーチャーブランチを作成し、開発、テスト、コードレビューを独立して行えます。その後、完成したコードを安全に DataWorks にマージできます。このプロセスにより、プロフェッショナルで効率的なチームコラボレーションが実現します。

重要

この機能を使用するには、同期が有効になっている必要があります。また、開発者以上の権限を持つロールでのみ利用可能です。

  1. マージのエントリーポイント

    DataStudio > DataStudio 設定項目 インターフェイスで、コードマージ セクションを展開します。

  2. マージプレビュー

    マージしたいブランチ名を入力して [マージプレビュー] をクリックすると、システムはソースブランチと DataWorks のデフォルトの save ブランチとの間で追加、変更、削除された内容を比較します。

    • コンフリクトなし:インターフェイスに変更の差分が表示され、追加、変更、または削除されるノードおよびコードの修正内容が明確に一覧表示されます。

    • コンフリクトあり:インターフェイスにコンフリクトの警告と具体的な詳細が表示されます。ローカル環境に戻り、Git でコンフリクトを解決してから、再度マージを試行する必要があります。

    image

    image

    image

  3. マージの確定

    1. プレビュー内容が正しいことを確認したら、マージを確定 をクリックします。

    2. システムがマージタスクを開始します。マージの進捗状況をリアルタイムで確認できます。

    3. すべてのマージレコードは、下部の コードマージ履歴 エリアに表示されます。各レコードの開始者、マージステータス、ブランチの詳細を確認できます。

      image

ワークスペース間マージ

Git 同期機能により、標準化されたコードセット(「テンプレート」)を複数のワークスペース(異なるリージョンであっても)で再利用および配布できます。たとえば、ユニバーサルなユーザーアナリティクスモデルをさまざまなビジネスライン向けの独立したワークスペースに迅速にデプロイし、各ワークスペースで専用の計算リソースおよびデータソースを使用して実行できます。

image
  1. 初期設定

    1. 2 つの別々のプロジェクト(git_cross_project_1 および git_cross_project_2)を作成します。これらは異なるリージョンに配置できます。

    2. ステップ 1 の手順に従い、各ワークスペースのリソースグループおよび OSS データソースを構成します。2 つのデータソースは同一でも構いません。また、ネットワーク接続も構成します。

    3. ステップ 2 の手順に従い、両方のワークスペースで共有される単一の Git コードリポジトリを準備します。

    4. ステップ 3 の手順に従い、両方のワークスペースで Git 同期を構成します。両方に同じ SSH アドレスおよび秘密鍵を使用します。両方の初期化が成功していることを確認します。この時点で、Git コードリポジトリ内に両方のワークスペース(270256(プロジェクト 1)および 270257(プロジェクト 2))に対応するブランチが表示されます。

  2. プロジェクト間マージ戦略

    1. ワークスペース間でコードブランチをマージする際、ノードコード、基本プロパティ、およびスケジューリング構成のみがマージされます。実行構成は対象ワークスペースにマージされません。

    2. 2 つのワークスペースの計算リソース、リソースグループ、およびデータソースの構成が必ずしも同一ではないため、リソースマッピング merge_mapping を構成する必要があります。

      1. ローカルマシンでターミナルを開き、リポジトリをクローンしてから、ソースワークスペース(プロジェクト 1)の保存ブランチ(例:dataworks_cn_shenzhen_270256_save)に切り替えます。

        # リモート Git リポジトリをローカルマシンにクローンします。
        git clone git@your_git_server_domain:64dc86a16800a4a57137536/cross_project_shenzhen.git
        
        # プロジェクト 1 の保存ブランチに切り替えます。
        git checkout <your_branch_name>
      2. merge_mapping ファイルを作成します。

        # `cross_project_shenzhen` はコードリポジトリの名前です。
        cd cross_project_shenzhen 
        
        # ディレクトリを作成します。
        mkdir -p DATAWORKS_SYSTEM_CONFIG/merge_mapping
        
        # マッピングファイルを作成します。ファイル名の形式は:<region>_<projectId>_to_<region>_<projectId>.properties
        vi DATAWORKS_SYSTEM_CONFIG/merge_mapping/cn_shenzhen_270256_to_cn_shenzhen_270257.properties

        要件に基づいてファイル内容を構成し、= 記号の両側のパラメーター値を変更します。各タイプに対して複数のパラメーターを指定できます。

        # データソース
        # spec.datasource.name.<project1_data_source_name>=<project2_data_source_name>
        spec.datasource.name.mysql_01=mysql_02
        
        # リソースグループ
        # spec.runtimeResource.resourceGroup.<project1_resource_group_ID>=<project2_resource_group_ID>
        spec.runtimeResource.resourceGroup.group_524257424564736=Serverless_res_group_524257424564736_764027070300961
        
        # ノード出力名プレフィックス
        # spec.output-prefix.<project1_name>=<project2_name>
        spec.output-prefix.git_cross_project_1=git_cross_project_2
        
        # MaxCompute SQL 内のテーブルのプロジェクトプレフィックス
        # script.project-identifier.<project1_name>=<project2_name>
        script.project-identifier.git_cross_project_1=git_cross_project_2
        
        # イメージ
        # spec.script.runtime.container.imageId.<project1 で使用される image_ID>=<project2 で使用される image_ID>
        spec.script.runtime.container.imageId.Default=System_python311_ubuntu2204_20251201
        
        # RAM ロール
        # spec.script.runtime.linkedRoleArn.<project1 で使用される ram_role_ARN>=<project2 で使用される ram_role_ARN>
        spec.script.runtime.linkedRoleArn.acs:ram::1107550004253538:role/aliyundataworksaccessingenirole=acs:ram::1107550004253538:role/aliyundataworksaccessingossrole

        コードを Git リポジトリにプッシュします。

        # 現在のディレクトリ内の変更を Git に追加します。
        git add .
        # マッピングファイルをコミットします。
        git commit -m "add mapping files"
        # ブランチの内容をリモート Git リポジトリにプッシュします。
        git push
    3. プロジェクト間でコードをマージします

      1. 対象ワークスペース git_cross_project_2DataStudio に移動します。左側のナビゲーションウィンドウで DataStudio 設定項目 をクリックし、コードマージ タブを見つけます。

      2. ブランチ入力ボックスに、ソースワークスペースの保存ブランチ名(例:dataworks_cn_shenzhen_270256_save)を入力します。

        image

      3. [マージプレビュー] をクリックします。変更内容が正しいことを確認した後、ワークスペース git_cross_project_1 からワークスペース git_cross_project_2 にコードをマージします。マージ操作の詳細については、「逆方向マージ」をご参照ください。

課金

この機能では、次のリソースに対して料金が発生します。

  • Serverless Resource Group:同期タスクは 1 CU のリソース仕様を使用します。料金は購入したリソースグループの支払い方法によって異なります。詳細については、「Serverless Resource Groups の課金」をご参照ください。

  • インターネット NAT Gateway および EIP:Git リポジトリがインターネット上にある場合、対応するトラフィック料金が発生します。詳細については、「NAT Gateway の課金」をご参照ください。

  • OSS ストレージ:コード同期データの保存に使用されます。ストレージ容量およびリクエスト数に基づいて課金されます。詳細については、「OSS 課金概要」をご参照ください。

よくある質問

  • Q:初期化が成功と表示されましたが、Git リポジトリにブランチが作成されていません。どうすればよいですか?

    A:接続性のテスト」セクションの手順に従い、telnet および SSH 接続が成功しているかどうかを確認してください。特に、Serverless Resource Group のネットワーク構成(インターネット NAT Gateway/VPC)が正しいかどうかに注意してください。

  • Q:コードをマージする際にコンフリクトが報告されました。どのように対処すればよいですか?

    A:ローカル開発環境で、リモートリポジトリから最新の変更をフェッチします。DataWorks の保存ブランチ(dataworks_${region}_${projectId}_save)と開発ブランチを git merge または git rebase を使用してマージします。コンフリクトを解決した後、開発ブランチをリモートリポジトリにプッシュします。最後に、DataWorks ページに戻り、再度マージを試行します。