[Heroku] 稼働中のAppをパイプライン化したい場合 [Pipeline]


# Heroku Pipelines とは

Heroku には、継続的デリバリー(Continuous Delivery)ワークフローを提供する、[Heroku Pipelines](https://devcenter.heroku.com/articles/pipelines)という機能を持っています。

> A pipeline is a group of Heroku apps that share the same codebase. Apps in a pipeline are grouped into “review”, “development”, “staging”, and “production” stages representing different deployment steps in a continuous delivery workflow. A code change will typically be deployed first to a pull request, which automatically creates a review app, then merged into master which is automatically deployed to staging for further testing before promotion to production where the new feature will be available to end users of the app. The pipelines overview page helps you visualize this flow, as well as meta information about the status of each stage. For example, you can see if your production app is running different code than staging. (from [Pipelines](https://devcenter.heroku.com/articles/pipelines))

なお、[Google翻訳](https://translate.google.com/?hl=ja)すると

> パイプラインは、同じコードベースを共有するHerokuアプリケーションのグループです。 パイプライン内のアプリケーションは、継続的な配信ワークフローで異なる展開手順を表す「レビュー」、「開発」、「ステージング」、および「プロダクション」ステージに分類されます。 コード変更は通常プルリクエストに展開され、自動的にレビューアプリが作成され、マスタにマージされ、自動的にアプリケーションのエンドユーザが新しい機能を利用できるように、プロダクションへのプロモーションを行う前に、 。 パイプラインの概要ページは、このフローと各ステージのステータスに関するメタ情報を視覚化するのに役立ちます。 たとえば、プロダクションアプリがステージングと異なるコードを実行しているかどうかを確認できます。

制度の上がった翻訳のおかげで、私がすることがほとんどありませんが、記載あるとおり、「開発」「ステージング」「本番」用の Heroku App環境を準備・定義して、本番へのデプロイプロセスを一貫して提供してくれるお便利ツールです。Github の Pull Request とも連携していて、プルリクがあがってくると、即座にプルリクを取り込んだレビュー環境が立ち上がり、テストすることが可能という仕組みも持っています。とにかく便利です。Githubで開発されている開発者は、今まで通りの開発手法を使って、Heroku の CDワークフローを利用できるということです。

# Heroku Pipelines を途中から利用する場合

さて、`Heroku Pipelines` は一般的に開発を始める前に、先に Heroku Appを準備して、パイプラインを準備してないとならなそうですが、すでに作成済みの Heroku App を元に`パイプライン`を作成したり、既に作成済みの`パイプライン`へ、そのApp環境を組み込むこともできます。

## Heroku App をパイプライン化すると

それでは、すでに稼働中の Heroku App を元に、Pipelines 化するとどうなるでしょうか。実際にやってみましょう。

こちらは、すでに存在している `production-001` という Heroku App です。phpのWeb Dynoが一つ動いています。

 ![Screen Shot 2017-03-13 at 16.48.33.png](https://qiita-image-store.s3.amazonaws.com/0/37263/7c5b63ed-07c1-8efd-8e10-4e27d9a71808.png "Screen Shot 2017-03-13 at 16.48.33.png")

次に `Deploy` メニューに移りますと、`New Pipeline...` というボタンがありますので、おもむろにこちらをクリックします。

![Screen Shot 2017-03-13 at 16.49.21.png](https://qiita-image-store.s3.amazonaws.com/0/37263/536ae023-a597-1dcd-f07d-14e18c17bcf5.png "Screen Shot 2017-03-13 at 16.49.21.png")

すると `Pipeline Name` を入力する欄が出てきますので、ここに好きなパイプライン名を入れます。Heroku App名と異なり、Heroku 上で唯一(unique)である必要はなく、英文字から始まる3文字以上なら、全く同じ名前でも良いです。が、同じ名前のパイプラインをたくさん作ると意味不明になりますので、あとで区別できるようにしておきましょう。

![Screen Shot 2017-03-13 at 16.49.52.png](https://qiita-image-store.s3.amazonaws.com/0/37263/54cc0c71-ff46-f1ad-c969-7801afe833c1.png "Screen Shot 2017-03-13 at 16.49.52.png")

ここで、素直に `Create Pipeline` をクリックすると、元の `Heroku App` が `Production`(本番) となる`パイプライン`を作成できました。

![Screen Shot 2017-03-13 at 16.50.31.png](https://qiita-image-store.s3.amazonaws.com/0/37263/6e318b46-c2be-aa77-2bc4-baa337acaccd.png "Screen Shot 2017-03-13 at 16.50.31.png")

なお、パイプラインを削除するときは、`パイプライン` を指定した状態で、右上の `Mange` → `Delete Pipeline...` で削除できます。パイプライン内の`Heroku App`は「削除されません」。

![Screen Shot 2017-03-13 at 17.17.04.png](https://qiita-image-store.s3.amazonaws.com/0/37263/398d124c-743c-04b3-e505-dddc073a91c0.png "Screen Shot 2017-03-13 at 17.17.04.png")

## 既にあるパイプラインへ、既存の Appを登録するには

２つ方法があります。

### Heroku App からパイプラインへ登録する

パイプラインへ移したい `Heroku App` から `Deploy` を開いて `Add to a Pipeline` で移動先のパイプラインを選択すると、パイプライン内の `Production` へ移動されます。

![Screen Shot 2017-03-13 at 17.20.25.png](https://qiita-image-store.s3.amazonaws.com/0/37263/bd32c66e-7da4-694c-188a-615ae6114b40.png "Screen Shot 2017-03-13 at 17.20.25.png")

移動後は、必要に応じて該当の Appを `development` や `staging` へ移します。`Remove from pipeline` を指定すれば、元の単独のAppへ戻ります。

![Screen Shot 2017-03-13 at 17.25.58.png](https://qiita-image-store.s3.amazonaws.com/0/37263/884954e1-915c-596c-b0fb-99c24133c9ee.png "Screen Shot 2017-03-13 at 17.25.58.png")

### パイプラインから登録する

登録したいパイプラインを開いてから、該当の環境(`development`や`staging`)から `Add Existing App...` をクリックします。検索フォームが出てくるので、登録したい `Heroku App`名を入力するとドロップダウンメニューにでてきますので、そちらから選択します。

![Screen Shot 2017-03-13 at 17.28.01.png](https://qiita-image-store.s3.amazonaws.com/0/37263/f4517fc9-9366-81ef-2ad4-a9478965b39f.png "Screen Shot 2017-03-13 at 17.28.01.png")

かんたんですね!