2

Mark Murphy は、彼のブログで、どのような種類の情報をパブリック リポジトリから除外する必要があるかを適切に説明しています。OAuth キーやさまざまなサービスへの API キーなどのキー マテリアルは、この代表的な例です。

問題のアプリケーションはモバイル android アプリであるため、誰かがそれを逆コンパイルして秘密鍵を取得することは、この質問の範囲外です。

シークレットがビルド ログやコンパイル ディレクトリに漏洩しないように、cloudbees などのパブリック CI インスタンスでビルド ジョブを構成するにはどうすればよいでしょうか? 私の主な目的は、インターネット全体に秘密鍵を広めることなく、OAuth ベースの認証を使用してアプリのアーキテクチャとビルド プロセスを実証することです。したがって、パブリック コード リポジトリと公開ビルド サーバーが必要です。

現在、Java コードで Maven フィルタリングとプレースホルダーを使用して静的定数クラスを作成していますが、これらのクラスは常にターゲット ディレクトリに表示されます。ターゲットのビルド後のクリーンアップでは、結果の Java ファイルが世界中に表示される短いタイム スロットが残ります。

4

2 に答える 2

0

これは、パブリック ビルド サーバーを使用していない場合でも問題です。

考えてみてください。キーが最終パッケージにある場合、誰もがそれを見ることができます。ビルドのどの段階に到達したかに関係なく、公開されます。誰でもパッケージ (JAR、APK など) をダウンロードして展開し、逆コンパイルし.classてキーを確認できます。すべてを行うのは簡単です。

CloudBees では、この種の情報を環境変数に入れることができます。次のリンクを参照してください: http://developer.cloudbees.com/bin/view/RUN/Configuration+Parameters。私は CloudBees についてあまり知りませんが、すべての公開サーバーにはこの種のオプションがあり、機密情報を公開されていない場所に置くことができると思います。

于 2013-01-29T15:38:38.910 に答える
0

From your description it sounds like you are talking about a key which should not be in the SCM repository, yet needs to be included in the final application. Presumably the application binary is not freely downloadable as such, or else anyway could open it up and get your key, but this is fine if the build result is simply being deployed to some server.

In such a case there is not necessarily any problem in having the key present in the target directory (i.e. Jenkins workspace), or indeed in build artifacts (e.g. lastSuccessfulBuild/artifact/target/myapp.war), so long as these things are not publicly readable. In the case of a CloudBees DEV@cloud Jenkins instance, you can use role-based access control to allow the public to see the changelog for your project, and perhaps the build logs (after vetting them to make sure secrets are not printed), but deny access to the workspace and artifacts.

(As far as artifact read permission is concerned, it seems that this is granted to anyone with overall read permission unless Jenkins is run with -Dhudson.security.ArtifactsPermission=true which is not an option for hosted Jenkins. Probably a plugin needs to be created which enables this permission, and probably also “workspace wipe-out” permission, akin to the existing Extended Read Permission plugin. Workspace browse permission is a standard part of Jenkins at least, which would suffice if you are not archiving artifacts but deploying directly at the end of a successful build.)

于 2013-01-29T15:35:53.377 に答える