scramble cadenza

技術ネタのガラクタ置き場

Wercker で build API を叩いてもテストが始まらない件

イントロ

最近 Wercker を使っています。 Wercker でも CircleCI と同じように build を行う API があるのですが、どうしても build の API が叩けなくてハマったのでメモ。

現象

build API を使って build を行うと、Invalid stack というエラーが出る。
エラーメッセージの意味がよくわからない。

$ jq . -c <<JSON | curl -s -d @- -H 'Authorization: Bearer token' -H 'Content-type: application/json' 'https://app.wercker.com/api/v3/builds' | jq .
{
  "applicationId": "applicationid",
  "branch":"develop",
  "envVars":[
    {"key":"HOGE_FOO","value":"true"}
  ]
}
JSON

{
  "statusCode": 400,
  "error": "Bad Request",
  "message": "Invalid stack, only stack 1 and 5 are supported for builds"
}

結論

build API を使うのではなく、Runs API を使う。

現在の Wercker は二つの環境が同居していて、その環境のことを Stack と呼ぶ。
古い環境を Classic stack と呼び、新しい環境を Docker Workflows Stack というらしい。

今は新しく環境を作ると、全て Docker Workflows Stack になるようで、build API は古い stack 用の API で、Runs API は新しい stack 用の API となっている。
どちらも叩くと CI の build が走る。

したがって最近作った CI の場合、runs API を叩いて、build を走らせる必要がある、というネタでした。

なお、必須パラメータが Build API とは若干異なり、Runs API では、pipelineId という値が必須になる。
pipelineId というのは、repository を選択して、Workflows タブから下の方にある、pipeline 名をクリックしたときのURL から取得する。(app.wercker.com/{user}/{reponame}/workflows/pipeline/{pipelineId})
API 経由でもちょっと面倒くさいけど頑張れば取れる。

f:id:mgi:20170309230422p:plain f:id:mgi:20170309230605p:plain

curl で叩く場合、以下のようになる。

jq . <<JSON | curl -X POST -s -d @- -H "Authorization: Bearer token" -H 'Content-type: application/json' https://app.wercker.com/api/v3/runs | jq .
{
  "pipelineId": "pipeline_id",
  "branch": "develop",
  "envVars": [
    {
      "key": "HOGE_FUGA",
      "value": "true"
    }
  ]
}
JSON

おわり

Runs ってなんだよ… 「走る」かよ…
隅々まで document を読まないと、こういう恥をかきます。

こんなつまらないことでハマって、初 StackOverflow デビューしました。
速攻で英語の添削が入りました。おわり。

wercker - What does “Invalid stack, only stack 1 and 5 are supported for builds” means? - Stack Overflow