# CircleCI を使用したワークフローの継続的デプロイ

Treasure ワークフロー は [Git](https://git-scm.com/) などのバージョン管理ツールや [CircleCI](https://circleci.com/) などの継続的インテグレーションツールと併用できます。このチュートリアルでは、GitHub と CircleCI を使用して継続的デプロイパイプラインをセットアップする方法を説明します。

## 前提条件

* Treasure ワークフロー
* [GitHub](https://github.com/) アカウント
* [CircleCI](https://circleci.com/) アカウント


## GitHub リポジトリ

まだ行っていない場合は、ワークフロープロジェクトを含む git リポジトリを GitHub に作成します。Git と GitHub の使用方法の詳細については、[GitHub Bootcamp](https://help.github.com/categories/bootcamp/) を参照してください。

## CircleCI の設定

プロジェクトに CircleCI 設定ファイルを追加します。ファイル名は `config.yml` とし、`.circleci` というトップディレクトリに配置し、以下の内容を記述します。その後、コミットして GitHub にプッシュします。


```yaml
version: 2.1
executors:
  my_executor:
    docker:
      - image: ruby:2.7.2-buster

jobs:
  digdag:
    executor: my_executor
    steps:
      - checkout
      - run:
          name: Setup
          command: |
            gem install td
            yes | td -e https://api.treasuredata.com -k dummy wf || true
      - run:
          name: Check config
          command: cd workflow && td wf check
      - run:
          name: Push project
          command: td -e https://api.treasuredata.com -k $TD_API_KEY wf push $WF_PROJECT -r `date -u +"%Y-%m-%dT%H:%M:%SZ"`-`git rev-parse HEAD`

workflows:
  version: 2
  build-n-deploy:
    jobs:
      - digdag
        # If you would like to restrict branches/tags to running Digdag jobs, use `filters` option.
        # Following filter means `digdag` job will run only `dev` and `user-` starting branches.
        # @see: https://circleci.com/docs/2.0/workflows/
        #  - digdag:
        #      filters:
        #        branches:
        #          only:
        #            - dev
        #            - /user-.*/
```

この設定では、CircleCI が `master` ブランチの変更のみをデプロイするように指定しています。これにより、他のブランチやプルリクエストの変更は `master` にマージされるまでデプロイされません。

CircleCI 設定の詳細については、[CircleCI 設定ドキュメント](https://circleci.com/docs/configuration-reference/)を参照してください。

## CircleCI の接続

1. CircleCI ダッシュボードを開きます。
2. 左側の Add Projects を選択します。
3. アカウントを選択します。Treasure ワークフロー プロジェクトを含む GitHub リポジトリがリストに表示されます。
4. 右側の Build Project を選択して、継続的デプロイパイプラインを開始します。


CircleCI はパイプラインの最初の実行を行いますが、TD 認証情報がまだ設定されていないため失敗します。

## TD 認証情報の設定

ワークフローを Treasure Data にプッシュするには、プロジェクトに Treasure API Key を設定する必要があります。

1. CircleCI ダッシュボードを再度開きます。ワークフロープロジェクトが左側にリストされています。
2. ワークフロープロジェクトを選択します。
3. 右上の Project Settings を選択します。
4. 左側の Build Settings の下にある Environment Variables を選択します。
5. Name フィールドに `TD_API_KEY` を入力し、Value フィールドに Treasure API キーを入力します。
6. Save variables を選択します。


## デプロイの開始

1. CircleCI ダッシュボードを再度開き、失敗したワークフロープロジェクトのビルドを選択します。
2. 右上の Rebuild を選択します。


CircleCI はワークフローを Treasure Data に正常にプッシュし、GitHub に変更をプッシュするたびにこれを実行します。

## トラブルシューティング

以下のエラーが表示された場合は、エンドポイントに https:// を追加してください。


```
error: RESTEASY004655: Unable to invoke request (processing)
```