オープンソースプロジェクトのビルド
概要
このドキュメントでは、CircleCI でのオープンソースプロジェクトのビルドに関するヒントとベストプラクティスを紹介します。
オープンソースコミュニティをサポートする目的で、GitHub または Bitbucket 上の組織には、オープンソースプロジェクト用にクレジットが毎週無料で提供されます。 このクレジットは、Linux のリソースにご使用いただけます。
セキュリティ
オープンソースは開放型の活動ですが、機密情報を「開放」しないように注意が必要です。
- リポジトリをパブリックにすると、CircleCI プロジェクトとそのビルドログもパブリックになります。 表示対象として選択する情報に注意してください。
- CircleCI アプリケーション内に設定されている環境変数は、一般には公開されず、明示的に有効にされない限り フォークされたプルリクエストに共有されることはありません。
オープンソースプロジェクトの機能と設定
以下の機能と設定は、オープンソースプロジェクトにおいて特に便利です。
プライベート環境変数
多くのプロジェクトでは、API トークン、SSH キー、またはパスワードが必要です。 プライベート環境変数を使用すると、プロジェクトがパブリックの場合でもシークレットを安全に保存できます。
詳細については、 環境変数の設定 を参照してください。
プルリクエストのみをビルドする
CircleCI はデフォルトでは、すべてのブランチのすべてのコミットをビルドします。 プライベートプロジェクトよりもきわめて多くのコミットが存在するオープンソースプロジェクトでは、この動作は活動的すぎるかもしれません。
この設定を変更するには、プロジェクトの Project Settings > Advanced に移動して、Only build pull requests (プルリクエストのみビルド) オプションを On に設定します。
Only Build Pull Requests 設定をオーバーライドする機能もサポートされています。 具体的には、CircleCI は正規表現 (例: release.\*
) で指定されたデフォルト以外のブランチからのすべてのコミットに対して検証を実行します。
現時点では、Only Build Pull Requests 設定をオーバーライドする唯一の方法は、 https://support.circleci.com/ でサポートリクエストをオープンすることです。 このリクエストには、CircleCI がすべてのコミットを検証するブランチの 許可リスト
に追加したい正規表現を記載してください。 組織に適用されている正規表現の削除や編集をする際もサポートリクエストを提出する必要があります。 詳細については、 Ideas を参照してください。
フォークされたリポジトリからのプルリクエストをビルドする
多くのオープンソース プロジェクトは、フォークされたリポジトリから PR を受け入れます。 これらの PR をビルドすると、手動で変更をレビューする前にバグを捕捉することができるので、効果的な方法です。
CircleCI はデフォルトでは、フォークされたリポジトリからの PR をビルドしません。 この設定を変更するには、プロジェクトの Project Settings > Advanced に移動して、Build forked pull requests オプションを On に設定します。
ユーザーがフォークからプルリクエストをリポジトリに送信しても、パイプラインがトリガーされない場合、ユーザーは CircleCI のプロジェクトではなく個人アカウントでフォークされたプロジェクトをフォローしている可能性があります。その場合、ジョブは組織のアカウントではなくユーザー個人のアカウントでトリガーされます。 この問題を解決するには、そのユーザーに個人用フォークからフォローを解除してもらい、代わりにソースプロジェクトをフォローしてもらいます。 これにより、プルリクエストを発行した際に、組織アカウントでジョブの実行がトリガーされるようになります。
フォークされたプルリクエストからのビルドにシークレットを渡す
制限を設定していないビルドを親リポジトリ内で実行することは、場合によっては危険です。 プロジェクトにはしばしば機密情報が含まれており、ビルドをトリガーするコードをプッシュできるユーザーならだれでも、この情報を自由に入手できます。
デフォルトでは、CircleCI はオープンソースプロジェクトの場合、フォークされた PR からのビルドにシークレットを渡さず、以下の 4種類の設定データを隠します。
-
アプリケーションを通して設定される 環境変数
-
ビルド中に任意のホストにアクセスするために CircleCI に追加したパスフレーズのないプライベート SSH キー
-
AWS 権限および設定ファイル
シークレットを必要とするオープンソースプロジェクトのフォークされた PR ビルドは、この設定を有効にしない限り CircleCI 上で正しく動作しません。
プロジェクトをフォークし、PR をオープンする任意のユーザーとシークレットを共有しても問題がない場合は、Pass secrets to builds from forked pull requests (フォークされたプルリクエストからのビルドにシークレットを渡す) オプションを有効にできます。 この設定を変更するには、プロジェクトの Project Settings>Advanced に移動して、Pass secrets to builds from forked pull requests (フォークされたプルリクエストからのビルドにシークレットを渡す) オプションを_オン_に設定します。
キャッシュ
キャッシュは、PR の GitHub リポジトリに基づいて分離されます。 CircleCI は、フォーク PR の生成元の GitHub リポジトリ ID を使用してキャッシュを識別します。
- 同じフォークリポジトリからの PR 間でキャッシュを共有します。 たとえば、メインリポジトリからの PR は、メインリポジトリブランチ (特に
main
ブランチ) とキャッシュを共有します。 - それぞれ異なるフォークリポジトリ内にある 2 つの PR は、別々のキャッシュを持ちます。 つまり、フォークからの PR はメインリポジトリの
main
ブランチとはキャッシュを共有しません。 - フォークされたプルリクエストからのビルドにシークレットを渡すを有効にすると、元のリポジトリとフォークされたすべてのビルドでキャッシュを共有できるようになります。
現在、キャッシュの自動入力は行われていません。この最適化がまだ優先順位リストの上位に入っていないためです。
オープンソースプロジェクトの例
CircleCI でビルドされたさまざまな規模のプロジェクトをご紹介します。
- React - Facebook の JavaScript ベースの React は、CircleCI (および他の CI ツール) でビルドされています。
- React Native - JavaScript と React を使用してネイティブ モバイル アプリケーションをビルドします。
- Flow - JavaScript に静的な型指定を追加して、開発者の生産性とコードの品質を向上させます。
- Vue - Vue.js は、Web 上で UI をビルドするための漸進的な JavaScript フレームワークであり、段階的に採用できます。
- Storybook - 対話型 UI コンポーネントの開発とテストを行います (React、React Native、Vue、Angular、Ember)。
- Electron - JavaScript、HTML、および CSS でクロスプラットフォームのデスクトップ アプリケーションをビルドします。
- Angular - ブラウザーおよびデスクトップ Web アプリケーションをビルドするためのフレームワーク。
- Apollo - GraphQL 用の柔軟なオープンソース ツールをビルドしているコミュニティ。
- PyTorch - データ操作および機械学習のプラットフォーム。
- Calypso - WordPress.com を活用するための次世代 Web アプリケーション。
- fastlane - Android および iOS 用の自動ビルド ツール。
- Yarn - npm に代わるツール。
設定ファイルの詳細
サンプル設定 のドキュメントでは、パブリックおよびオープンソースのプロジェクト設定に関する各種のリンクが、CircleCI の機能とプログラミング言語ごとに紹介されています。