タグ
WerckerCI
投稿日
October 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