Wercker からマイグレーションせよというメールが来たので対応してみた

CI サービスの Wercker からマイグレーションせよという以下のメールが来た。

Attention: Manual Migration required on your Wercker Account

Hi Mallowlabs,

We informed you a couple of months ago that we're going to start deprecating our non-Docker (or classic) stack in the future.

Since you have projects on our classic stack, we are pleased to announce that the time has come.

Non Docker-based applications will require a manual effort to migrate please follow this link to our stack migration wizard to start the process.
...

今回、このマイグレーションに対応した記録を共有する。

まずは https://app.wercker.com/applications/migrate にアクセスする。


Heroku deploy targets を使っているのがまずいらしい。

該当アプリの Deploys から edit をクリックする。

更に Edit をクリックする。

Delete Target をクリックして、Deploy Target を削除する。

もう一度 https://app.wercker.com/applications/migrate にアクセスすると、以下のような表示になるのでチェックを入れて、Migrate をクリックする。

リロードすると Up-to-date になる。

アプリの Workflows タブから Add new pipeline をクリックする。

Name に heroku-deploy、YML Pipeline name に deploy を入力して Create をクリックする。

環境変数を設定する画面に遷移するので、以下の3つを入力する。

  • HEROKU_APP_NAME
  • HEROKU_USER
  • HEROKU_KEY

Workflows タブに戻って build の後ろに heroku-deploy Pipeline を追加する。

ここでやっとソースを変更する。

diff --git a/config/mongoid.yml b/config/mongoid.yml
index ccd80db..b658599 100644
--- a/config/mongoid.yml
+++ b/config/mongoid.yml
@@ -3,7 +3,7 @@ development:
   database: asakusa_satellite_development

 test:
-  host: <%= ENV['WERCKER_MONGODB_HOST'] || 'localhost' %>
+  host: <%= ENV['MONGO_PORT_27017_TCP_ADDR'] || 'localhost' %>
   database: asakusa_satellite_test

 production:
diff --git a/wercker.yml b/wercker.yml
index 0ce7ab5..80c1a0b 100644
--- a/wercker.yml
+++ b/wercker.yml
@@ -1,6 +1,6 @@
-box: wercker/rvm
+box: ruby:2.3
 services:
-  - wercker/mongodb
+  - id: mongo
 build:
     steps:
         - bundle-install
@@ -19,3 +19,10 @@ build:
     after-steps:
         - mzp/http-notify:
             url: $DASHBOZU_URL
+deploy:
+  steps:
+    - heroku-deploy:
+        key: $HEROKU_KEY
+        user: $HEROKU_USER
+        app-name: $HEROKU_APP_NAME

ポイントとしては以下の通り。

  • box を指定したところは Docker コンテナを指定するようにする
  • MongoDB などの services も Docker になるのでホスト名等を工夫する
  • Heroku deploy は heroku-deploy を使うようにする

このあと、 変更を master に push すれば Wercker でビルド後、Heroku に deploy される。

所感

Wercker のドキュメントが Wercker Workflows に対応していないものが多くて苦労した。
この記事が誰かの役にたてば嬉しい。