質問: 今日。githubにyoutube APIに依存するコードをプッシュしました。 ですが、一部コードはローカルにあるので、ビルドする為にはそのコードをgit cloneした人それぞれで書く必要があります。ソースコードを編集されるような場合だとそれも仕方ないかなと思うんですが、使用するだけの人を想定した場合、バイナリ配布を行ったほうがいいのだろうなと思っています。クラウドのCIサービスを使用する場合、シークレットコードをCIサービスに配置する必要があると思いますが、その内容を外部の人に知られないようにする方法はありますか?その場合はプライベートリポジトリを作成してそのリポジトリのバイナリとして作成するほうが良いのでしょうか?(できるかどうかはわからないのですが) ここでいうシークレットコードは、 OAuth2 のクライアントコードを想定しています。なので、以下の性質があります。 * ソースコードを記述している際には、定まっていない * バイナリを配布する際には、その中に組み込まれていてほしい
回答: disclaimer: バイナリの中にシークレットコードを埋め込む以上、頑張ればその情報は復元可能にはなってしまっていると考えます。 CI サービスは、外部からは見えない環境変数 (など) を、そのビルドに対して定義できるようになっているはずだと考えます。また、シェルの実行もできるのではないか、と考えています。 上記を満たすサービスを利用しているのであれば、 1. 置き換えたいシークレットコード部分を適当な、ほかでは利用されない文字列で埋めておく (以下、プレースホルダー) 2. 環境変数でもって、プレースホールダーを置換するシェルを書く 3. 通常のビルドを行う と私だったら行うと思います。