Azure Synapse Analytics workspace成果物の Azure DevOps によるCICD【any branch編】

## はじめに

Synapse のupdateを眺めていたら、any branch でデプロイできるよ、との表示があったので試してみます。

![2022-06-01-12-22-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/0f75a108-6d5c-821a-809a-5e102a379e57.png)

## 参考


[Azure Synapse Analytics workspace成果物の Azure DevOps によるCI/CD【基本編(yamlパイプライン)】](https://qiita.com/ryoma-nagata/items/29a0183a14a8cee03924)

### any branch デプロイとは

要するに、発行ボタンを押さずともmaster/main ブランチなどのマージをトリガーにしてデプロイパイプラインが実行できるということです。

Data Factoryでは、新しい **CI/CDフロー** と呼ばれていました。
Data Factory の場合は以下の記事が丁寧です。

[Azure Data FactoryのCI/CDをAzure DevOpsで実装する](https://qiita.com/whata/items/7cad0c01e76d2f22e257#2-%E6%96%B0%E3%81%97%E3%81%84cicd%E3%81%AE%E3%83%95%E3%83%AD%E3%83%BC)

Synapse の場合、以下となります。

現在のフロー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/b694c2b9-96bd-c11a-a7b2-a676b49f1666.png)

新しい CI/CD フロー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/b9afa0e3-4171-e179-8c61-bd86e441bb17.png)



Synapseでは成果物をテンプレートに変えることが発行ボタンしかなかったのですが今回のアップデートでciパイプラインの中でテンプレート生成ができるようになりました。

### Synapse Deployment タスク

cicdパイプラインでは [Synapse-workspace-deployment](https://marketplace.visualstudio.com/items?itemName=AzureSynapseWorkspace.synapsecicd-deploy&ssr=false#overview)　を利用します。



[https://github.com/Azure/Synapse-workspace-deployment](https://github.com/Azure/Synapse-workspace-deployment)はソースリポジトリらしく、git hubアクションでの定義になっていますが、大体同じパラメータをDevOpsでも使用できます。


## 試してみる

例によってtemplate的に使えるGithubリポジトリを用意したのでこれを利用します。

[https://github.com/ryoma-nagata/SynapseCICD-template-workspace](https://github.com/ryoma-nagata/SynapseCICD-template-workspace)

### 前提条件

- 2つのSynapse Workspaceリソースを配置
- 双方のSynapse Workspace リソースで、DevOps用のサービスプリンシパルをSynapse 管理者に設定
- DevOpsサービス接続を作成済み
- DevOps Environment「STG」が作成済み

※ [SynapseCICD-HOL](https://github.com/ryoma-nagata/SynapseCICD-HOL)　を参照ください。

### Synapse Workspace × DevOps連携を構成

DevOpsで、**Import Repositry** を選択し、

![2022-06-01-13-01-45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/182bda79-0d5a-e360-6500-d367cd5610ce.png)


[https://github.com/ryoma-nagata/SynapseCICD-template-workspace.git](https://github.com/ryoma-nagata/SynapseCICD-template-workspace.git) を取り込みます。

![2022-06-01-13-03-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/50ade666-fd1c-c6cf-d4a2-8acd81c0dd78.png)


完了しました。


![2022-06-01-13-04-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/dd58028a-c2b5-9b1d-0d3d-c86704dbe28d.png)

次に、Synapse Workspaceとこのリポジトリを紐づけます。

![2022-06-01-13-05-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/0ed3ee2e-8fca-54ae-dad0-5a001ef3cdfb.png)


接続が完了し、既存の成果物がmainブランチにインポートされました。

![2022-06-01-13-06-48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/46bac3b3-afc7-9aa3-5aba-7b13942ff2fd.png)


### パラメータファイルの作成

発行ボタンを押して、ワークスペーステンプレートファイルを生成しておきます。

![2022-06-01-13-22-39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/74504fbb-ddd1-416d-ffff-47c2985b5157.png)


生成された **TemplateParametersForWorkspace.json** の内容をコピーしておきます。

![2022-06-01-13-23-47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/f96768b3-5b83-8113-472e-71d70dc899d2.png)


任意のブランチ（例ではmain）　で、**TemplateParametersForWorkspace_stg.json**ファイルを作成をします。

![2022-06-01-13-25-28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/827f9039-bf9d-273d-4fc1-610a6794c912.png)

![2022-06-01-13-26-27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/23d99fba-be53-1fad-e1b5-3682c026973b.png)


※パラメータ内容は適宜更新しておきましょう。

### パイプラインの構成

**New pipeline** を選択

![2022-06-01-13-07-45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/aaa89a94-aaea-d8ed-5118-b4196279a681.png)


**Azure Repos Git ** を選択

![2022-06-01-13-08-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/0b0f213c-6a68-9775-d292-3913134e5f19.png)


インポートしたリポジトリを選択

![2022-06-01-13-09-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/d06604b4-7ebc-bc4e-a7ca-d03cfcac4d36.png)


**Existing Azure Pipelines YAML file** を選択

![2022-06-01-13-09-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/6d55b5aa-312c-89c5-584a-f78d98e4053c.png)


**azure-pipelines-ci-cd-synapse-artifacts.yml** を選択

![2022-06-01-13-09-49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/edb3ccc5-b879-6d72-2864-310e68a29968.png)


変数を変更します。

![2022-06-01-13-10-38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/027c8fce-9e5d-69ce-e6f7-4eca63158ec2.png)


- ARTIFACTS_FOLDER: Git構成をした際にRootFolderで設定した値から入力
- AZURE_RESOURCE_MANAGER_CONNECTION_NAME:使用するサービス接続名を入力
- TARGET_WORKSPACE_NAME_STG:デプロイ先のSynapse Woekspace名
- TARGET_RESOURCE_GROUP_NAME_STG:デプロイ先のSynapse Woekspaceが存在するリソースグループ名

私の環境だとこうなりました。

![2022-06-01-13-14-47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/c1ee42c3-6029-c8a1-12b2-eef59b76b85d.png)


**Save and run** を選択

![2022-06-01-13-14-57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/998b13f0-fec4-eeb3-ea18-fe033e1463b5.png)


正常終了し、STG環境に成果物が反映されます。

![2022-06-01-13-36-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/8cfee550-eef1-960c-8a77-85e18cf475bd.png)

以降はmainへのMergeによりこのパイプラインが実行されます。


### CI,CDパイプラインを分ける場合、

リリースは手動で実行したいというケースがあるので、分割版を作成しました。

#### CIパイプライン

パイプラインの作成時に、 **azure-pipelines-ci-synapse-artifacts.yml** を選択

![2022-06-01-13-29-48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/6a6c1948-bc77-023e-05bd-1f8cd36506fe.png)



Save後、URLからプロジェクト名とパイプラインのIDを確認しておきます。

![2022-06-01-13-31-27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/0377f6ff-f484-15a0-bb7d-e660285a0a28.png)


例では
- ProjectName=SynapseCICDDemo
- PipelineId=29

となります。

以降はmainへのMergeによりこのパイプラインが実行されます。

#### CDパイプライン

パイプラインの作成時に、 **azure-pipelines-cd-synapse-artifacts.yml** を選択

![2022-06-01-13-33-07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/6c411e53-3a4e-9a6c-7c1a-d76803b56d02.png)


各変数を設定

![2022-06-01-13-33-49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/bff5733f-6ba3-8059-4cab-ce0d15258887.png)

実行することで、CIパイプラインの最新の実行結果からArtifactをダウンロードし、デプロイに進みます。

以降は手動でリリースパイプラインとして利用可能となります。