BitbucketからHerokuへ自動デプロイ

Herokuさんは有料化してしまいましたが課金してずっとお世話になっております。

HerokuにはGithubにプッシュすると自動でデプロイされる機能が備わっています。
ローカルからはHeroku Gitを使ってデプロイされることも多いでしょう。

今回「Git管理はBitbucketでオネシャス」というお達しがありました。

私はBitbucket使ったことがありません。

Herokuにデプロイできるのかな？と思いましたが
「Bitbucket　Heroku　デプロイ」でGoogle検索

https://support.atlassian.com/ja/bitbucket-cloud/docs/deploy-to-heroku/

Bitbucketサポートのヘルプ記事が出てきたのでまぁどうにかなるやろと

「Bitbucket承知ナリ～～」と返事をしていました。

その後頭を抱えることとなりました／(^o^)＼



# HerokuでAPIトークンを発行
ローカルにHeroku CLIをインストールしてログイン
そしてこのコマンドを実行します。

```
$ heroku authorizations:create
```

これでHerokuの APIトークンを取得することができます。

```00000000-0000-0000-0000-000000000000```みたいなやつです。

あとから使うのでコピーして残しておきましょう。

# Bitbucket Pipelinesを有効化
~~今回は自分が管理者じゃなかったので設定してもらいました~~
それでは書く意味がないのでテスト環境を用意しました。

Repository settings から下の方にある PIPELINES の Settings を開いてパイプラインを有効化します
![2023-01-19_17h05_57.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217361/720be5fa-d58b-ae77-5075-6d42650fdacd.jpeg)
![2023-01-19_17h12_48.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217361/5c79e102-39fc-17f0-d22b-80d2df567994.jpeg)


トグルスイッチになっているところをクリックして緑のチェックにしてください。
![2023-01-19_17h09_10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217361/d26e7224-671a-d49b-d42f-f7ec604dba87.jpeg)



これでBitbucket Pipelinesが使えるようになります。


# Bitbucketのリポジトリの環境変数にAPIトークンとHerokuのapp名を設定

そのままRepository settings 内で PIPELINES の Repository variables を開いて環境変数を設定します。

![2023-01-19_17h16_56.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217361/3b1c5fd8-6948-6d6e-dc05-e3620917fee0.jpeg)

一つ目
Nameに```HEROKU_API_KEY```とValueにHerokuのAPIキー(```00000000-0000-0000-0000-000000000000```みたいなやつ)を入れます。
2つ目
Nameに```HEROKU_APP_NAME```とValueにHeroku作ったappの名前(仮に```test-app```としておきます)を入れます。

![2023-01-19_17h38_10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217361/2d74c303-7131-a66a-90f4-626ad8984736.jpeg)
![2023-01-19_17h37_45.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217361/5bfd88a5-e848-77f8-d086-c56e30f40145.jpeg)

# bitbucket-pipelines.yml を用意
今回デプロイしたのはPythonコードだったのでPython仕様になっていますがこんな感じで書きました。

runtime.txtで設定しるPythonのバージョンを ```image:``` に記載してください。
あとはそのままでも大丈夫だと思います。

```bitbucket-pipelines.yml
# This is a sample build configuration for Python.
# Check our guides at https://ja.confluence.atlassian.com/x/x4UWN for more examples.
# Only use spaces to indent your .yml configuration.
# -----
# You can specify a custom docker image from Docker Hub as your build environment.
image: python:3.10.9

pipelines:
  default:

    - step:
        name: Build
        script:
          - git archive --format=tar.gz master -o sample-app.tar.gz
        artifacts:
          - sample-app.tar.gz

    - step:
        name: Deploy to production
        deployment: production
        caches:
          - pip
        script:

          - pipe: atlassian/heroku-deploy:2.0.0
            variables:
              HEROKU_API_KEY: $HEROKU_API_KEY
              HEROKU_APP_NAME: $HEROKU_APP_NAME
              ACTION: 'deploy' # Optional. 'update' or 'deploy' # Default 'deploy'.
              ZIP_FILE: 'sample-app.tar.gz' #'<string>' # Optional. 'ACTION' 'deploy' specific.
              WAIT:  'true' #'<boolean>' # Optional. 'ACTION' 'deploy' specific # Default: 'false'.

```

前半はBitbucketサポートの記事から

https://support.atlassian.com/ja/bitbucket-cloud/docs/deploy-to-heroku/

この記事を見て、testは必要無いんだなとｗ

https://medium.com/@matkarchirag/deploying-python-django-app-using-bitbucket-pipelines-on-heroku-42471601fe2a

後半のscript部分はBitbucketのパイプラインを作成できるページから


```https://bitbucket.org/[ユーザーID]/[リポジトリ名]/pipelines```

![2023-01-19_17h49_47.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217361/7fc7f6af-823e-acaf-c587-d760d792e179.jpeg)

# Bitbucketのリポジトリにプッシュする

作成したBitbucketのリポジトリにプッシュします。

そうするとBitbucket内でビルドが走り、Herokuにデプロイされます。やったね。

2回デプロイに失敗してるのはご愛嬌。
![2023-01-19_17h51_33.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217361/97e8fe45-d531-f92f-7bc6-ce0c58008a35.jpeg)



よかったらTwitterフォローしてください＼(^o^)／
https://twitter.com/tbshiki