はじめに
CI/CDパイプラインを組んでいて、ライセンスファイルの中身をGitHubでいうところのSecretsに置き、echo 環境変数 > ライセンスファイルでファイルを生成することがあると思います。
そこで認証が上手くいかなかった場合、真っ先に認証方法のミスを疑いドキュメントを見直したりしますが、意外にも原因はライセンスファイルの生成方法自体だったりします。
これに自分も何度かハマったことがあり、その度に共有しようと思うものの忘れてしまうので、今回忘れる前に投稿したいと思います。
echo $hogeとecho "$hoge"の違い
変数の値をファイルに出力したい場合、echo $hogeとecho "$hoge"の違いを理解しておかないと、想定と違った動作を見せることがあります。
具体的に見ていきましょう。
echo $hogeの場合
hoge.yaml
a:-b:hoge$ hoge=$(cat hoge.yaml)# hoge.yamlは上記のもの$ echo$hoge
a: - b: hoge # 改行が消えるecho $hogeの場合だと、変数内に含まれる改行やタブはスペースに変換されてしまいます。
この挙動により、例えばライセンスファイルを生成しようとすると、改行なしのファイルが生成されてしまい、正しく認証されなくなってしまいます。
変数の値に含まれる改行も一緒に出力したい場合は、変数をダブルクオーテーションで囲う必要があります。
echo "$hoge"の場合
$ hoge=$(cat hoge.yaml)# hoge.yamlは先ほどのものと同じ$ echo"$hoge"
a:
- b: hoge
まとめ
APIキーやbase64エンコードしたものなど改行が含まれないものをSecretsに置くことが多いので、たまにこういったことをやろうとすると、うっかりハマってしまうことがあります。
記事にすることで、ハマらなくなったり、ハマってもすぐに気づけるようになれると嬉しいです。