今日は有給で家でアレしています。今の会社に入ってから技術的な話は会社の技術ブログに書いてたんだけど、やはり自分のところにも書いていこうかな、と。件のとおりなんだが、Circle CIに設定する環境変数を管理するツールを書いた。



Circle CIと環境変数

Circle CIはプロジェクトごとに環境変数の設定ができる。ここで設定された環境変数はCircle CIのコンテナにセットされ、テストやデプロイ時に参照することができる。Ansibleのvaultパスワードをセットしておいて、リポジトリ内で暗号化して管理しておいた秘密鍵を複合してテスト時に利用する、AWSなどのアクセスキーをセットしておいて、テストがパスされたらAWSキーを利用してデプロイを行う…など。

スクリーンショット 2016-12-16 14.59.13

とりあえずこいつらのポチポチがつらい。一度セットすると人間の目では見れなくなるので、何がセットされているか設定したやつにしかわからない。どのプロジェクトに何が設定されているか把握できない、といった課題がある。

en

そこで作った。enというネーミングはcircleの和訳が円だから。

https://github.com/hiroakis/en

使い方

READMEに書いたとおりなんだが、

export CIRCLE_TOKEN=xxxxxxxxxxx

などとしてから、

en -export

で設定のエクスポート。ファイルに書き出す時は `>` などとする。Circle CIの仕様上、ここでエクスポートしたファイルはそのまま使うことができない。なぜなら、Circle CI上では環境変数が `xxxxS73Z` などと隠蔽されて格納してあり、API経由でもこのような隠蔽された文字列として取得される。なのでエクスポートしたファイルをそのままapplyする場合は要編集。で、設定ファイルを整えたら

en -dry-run -file en.json

などとしてドライランで確認する。-fileのデフォルトは `./en.json` である。で、

en -apply -file en.json

で適用。もちろん冪等性()も担保するので、Circle CIに設定されていて手元のen.jsonに存在しない環境変数については削除する動きとなる。実行イメージは下記のとおり。なお、何度も述べている通り、環境変数が `xxxxS73Z` などと隠蔽されているため、既に存在している変数についてはどんな値がセットされているか正確に知ることができない。なので、設定値に変化がない場合でも出力上は `updated` として扱われる。

スクリーンショット 2016-12-16 15.06.04

その他所感

* 特にこだわりはないんだけど、標準パッケージだけで書いてある。
* やはりgolangはjsonの扱いがやはりめんどくさいやはり。LLに比べて、だが。

おわり

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">

Set your Twitter account name in your settings to use the TwitterBar Section.