Windows環境でCIを行えるAppVeyorでも、Travis CIなどのほかのCIサービスと同様にセキュアな環境変数を設定できます。しかし、Travis CIの場合とは少し勝手が違います。以下にTravis CIの場合と比較したAppVeyorでの設定方法を書き付けておきます。

Travis CIの場合

Travis CIの場合は、CLIクライアントを使って環境変数のキーごと暗号化します。例えば、GITHUB_ACCESS_TOKEN=foobarを暗号化したいのであれば、プロジェクトディレクトリに移動した後、以下のようなコマンドで暗号化します。

$ travis encrypt GITHUB_ACCESS_TOKEN=foobar
Please add the following to your .travis.yml file:

  secure: " ... 暗号化された値 ... "

出力された文字列を、.travis.ymlファイルに以下のように貼り付けます。暗号化された変数のキーであるGITHUB_ACCESS_TOKENは設定ファイル上では隠蔽されます。

env:
  global:
    - secure: ' ... 暗号化された値 ... '

実際のビルド結果に以下のようなログがあれば、変数が正しく設定されていることになります。

Setting environment variables from .travis.yml
$ export GITHUB_ACCESS_TOKEN=[secure]

詳細な方法は以下のドキュメントで確認できます。

AppVeyor の場合

AppVeyorの場合は、Encrypt configuration dataという専用のWebページを使って、キーを含まずに環境変数の値だけ暗号化します。

例えば、

set GITHUB_ACCESS_TOKEN=foobar

を暗号化して行いたいのであれば、foobarのみをフォームに入力します(GITHUB_ACCESS_TOKEN=foobarを丸ごと入力すると期待した値は得られません)。暗号化された値が出力されたら、ドキュメントに記載されているように以下の形式で設定ファイルのappveyor.ymlに書き加えます。

environment:
  暗号化した環境変数のキー:
    secure: ' ... 暗号化された値 ... '

例のGITHUB_ACCESS_TOKENの場合は、以下のようになります。

environment:
  GITHUB_ACCESS_TOKEN:
    secure: ' ... 暗号化された値 ... '

Travis CIの場合と違い、暗号化された変数のキーであるGITHUB_ACCESS_TOKENは設定ファイル上では隠蔽されません。

同じsecureというキーワードを設定ファイル上で用いること、それでいてキー - バリューの関係が大きく異なることが手違いを生みやすいように思います。しかし、設定さえ正しく行えば、同一のセキュア変数を使って複数OS上でのテストが可能、という便利なCIを構築できます。

実際に、gulp-gh-pagesというプロジェクトではTravis CIAppVeyor両方で共通のセキュア変数を使ったテストを行っています。

更新の滞ったプロジェクトを引き継ぐ