ぷろじぇくと、みすじら。

App Centerでユーザー定義環境変数を取得できない

Created at:

Visual Studio App Centerではビルド時の環境変数を定義でき、ビルドスクリプトやGradleのようなビルドシステムから値を取得できるのですが、定義しても環境変数が取れないという現象が発生しました。

tl;dr

SECRET のようなApp Centerが許可しないキーワードを含んだ環境変数を定義している場合、そのままの名前で露出しないようになっているようです。PASSWORD のような単語は通るので SECRET のみの制限かもしれません(ドキュメントに特に書いてない)。

ユーザー定義の環境変数は USER-DEFINED_ というプレフィックスがついた環境変数も定義されるのでそちらから取得する方法もありますが、ハイフンを含んでいるため参照も定義も一筋縄ではいかないのでお勧めできません。

問題と調査

API_KEYNUGET_USERNAME のような環境変数を定義してみたところ特に問題なく取得できたので、もしかして変数名に問題があるのでは?と思いいくつかのパターンを試してみました。すると以下のパターンで違いが出ることがわかりました。

この定義を設定した上でビルドし、pre-buildスクリプトで環境変数をすべて出力すると…

##[section]Starting: Pre Build Script
==============================================================================
Task : Shell Script
Description : Run a shell script using bash
Version : 2.1.3
Author : Microsoft Corporation
Help : [More Information](https://go.microsoft.com/fwlink/?LinkID=613738)
==============================================================================
[command]/bin/bash /Users/vsts/agent/2.127.0/work/1/s/app/appcenter-pre-build.sh
...snip...
SECRE__HAUHAU=hauhau3
...snip...
USER-DEFINED_SEECRET_HAUHAU=hauhau2
...snip...
USER-DEFINED_SECRE__HAUHAU=hauhau3
...snip...
USER-DEFINED_SECRET_HAUHAU=hauhau1
...snip...
SEECRET_HAUHAU=hauhau2
...snip...

…となり、SECRET_HAUHAU という変数のみそのまま露出しないようになっています。この結果からApp Centerは SECRET を含む環境変数をそのまま変数として露出しないようにしているようです。セキュリティのためでしょうか。

というわけで特別必要がなければ SECRET という名前を含めないでおくというのがハマらないポイントです。