Werckerの環境変数やwercker.ymlで$(ドルマーク)を使う
Werckerの環境変数やwercker.ymlで$(ドルマーク)を使う

Werckerの環境変数やwercker.ymlで$(ドルマーク)を使う

タグ
WerckerCI
投稿日
Oct 14, 2018
著者
💩 うんち

Werckerで $ を使うと変数として解釈されてしまい、期待通りの結果になりません。ドキュメントなどでも $ をエスケープする方法なども載っておらず、ググっても $ をエスケープする方法を紹介しているサイトは見つかりません。おそらくエスケープする方法は用意されていないのだと思います。

$(echo $) を使う

いろいろ試して挙動を見ていくと shell 文として解釈されてそうな雰囲気だったので $(echo $) とすると $ になってくれました。どうしても環境変数に $ を使いたい場合は $(echo $) を使えばとりあえず動きます。

$(echo $) => $ $(echo $)foo => $foo foo$(echo $)bar => foo$bar

環境変数にはコメントが書けないので、この仕様を知らない人が見ると何をしているのかわからないという大きなデメリットがあります。また、今後のWerckerの仕様変更に伴い使えなくなる可能性があるので、使用には気をつけたほうがいいと思います。

可能な場合は環境変数には $ を使わないという選択がよさそうですね。(base64にエンコードしてしまうなど)

wercker.ymlでも同じ

wercker.ymlでも $ を使うと変数として扱われ展開されてしまうので、 $(echo $) を使うことで解決します。

box: ruby:latest

services:
  - id: mysql:latest
    env:
      # ダメな例
      MYSQL_ROOT_PASSWORD: hoge$fuga$piyo
      # OKな例
      MYSQL_ROOT_PASSWORD: hoge$(echo $)fuga$(echo $)piyo

build:
  steps:
    - script:
      # ダメな例
      code: hoge$fuga$piyo
      # OKな例
      code: hoge$(echo $)fuga$(echo $)piyo