Travis、Maven、github を使ってフォークからのプルリクエストで Sonarcloud を実行するにはどうすればよいですか? 質問する

Travis、Maven、github を使ってフォークからのプルリクエストで Sonarcloud を実行するにはどうすればよいですか? 質問する

最近の質問を調べているときにTravis、Maven、github での Sonarcloud の失敗私は間違った質問をしていたことに気づきました。根本的な問題ではなく、症状に対処しようとしていたのです。

私が取り組んでいるプロジェクト(日食/スキャン) は、リポジトリとして Github を使用し、継続的インテグレーションとコード分析のために Travis と Sonarcloud を使用しています。

Sonarcloud 分析は内部プル リクエスト (Eclipse/Scanning に直接プッシュされたブランチからのプル リクエスト) では正常に実行されますが、外部プル リクエスト (フォークされたリポジトリからのプル リクエスト) に対して Travis を実行すると機能しません。

根本的な問題は、現時点で sonarcloud を実行する方法が、セキュリティ上の理由から外部プル リクエストに対して設定されていない環境変数に依存していることです。

Encrypted environment variables have been removed for security reasons.
See https://docs.travis-ci.com/user/pull-requests/#Pull-Requests-and-Security-Restrictions

私たちのリポジトリはSonarcloudが実行されるかどうかは気にしないように設定されていますが、それはSonarcloudのルールに違反している変更をマージしてしまうことが多いことを意味します。なぜなら、違反していることに気付かないからです。私たちは、ルールが違反していることに気付くのは、次回これらは、リポジトリに直接プッシュするユーザーによって変更されます。これにより、Sonarcloud で検出された問題を修正する負担が共同作業者からコミッターに移ります。

それで、

  • セキュリティ上の問題を招くことなく、フォークされたリポジトリからのプルリクエストの Sonarcloud 分析を有効にする方法はありますか?

この質問は、Travis パブリック リポジトリで、プル リクエストでも機能するセキュア変数を追加する方法まだ答えは出ていません。

ベストアンサー1

これはおそらくあなたが探している簡単な解決策ではないでしょうが、Travis が何らかの形でサポートを追加しない限り、プル リクエストを作成するときにシークレットにアクセスするより簡単な方法はないと思います。結局のところ、プル リクエストにはビルド中に実行される任意のコードが含まれる可能性があるため、シークレット変数が利用できないのは正当な理由があります。攻撃者はこれを利用して、ビルド プロセスを変更し、復号化された環境変数を読み取り、それを攻撃者に送信するプル リクエストを作成する可能性があります。

根本的な問題は、ビルドを実行するコードとビルドされるコードが同じ (場合によっては信頼できない) ソースから取得されることです。ビルド プロセスでシークレットを使用できるようにするには、ビルドするコードとビルドされるコードを分離する必要があり、ビルド コードは信頼できるソースから取得する必要があります。信頼できないソースからのコードは、シークレットにアクセスできないようにサンドボックス化されていない限り、実行してはなりません。

私の知る限り、Travis はこれを実現するための標準的な方法を提供していません。

ビルド コードとビルドされるコードを分離するという考え方に従うことで、外部のプル リクエストに対して Sonarqube 分析を実行することが可能になります。

最初のステップは、信頼できるビルド スクリプトのみを含む新しいリポジトリ「ビルド コード」を Github に作成することです。これらのスクリプトは、プル リクエストをチェックアウトし、Sonarqube 分析を実行する役割を担います。これらは外部プル リクエストの一部ではないため、シークレット変数にアクセスできます。ただし、プル リクエスト内のユニット テストは信頼できないため、実行しないように注意してください。

2番目のステップは、実際のソースコードリポジトリに対してプルリクエストが行われた場合に、「ビルドコード」リポジトリのビルドをトリガーすることです。TravisはビルドをトリガーするAPIただし、これにはシークレットも必要です。そのため、プルリクエストを作成するときに「ビルドコード」リポジトリのビルドを単純にトリガーすることはできません。ただし、インストールすることは可能です。ウェブフックGithub のソース コード リポジトリでは、プル リクエストが行われると小さな Web サービスを呼び出します。次に、このサービスは Travis API を呼び出して、信頼できるビルド コード リポジトリのビルドをトリガーします。

これが意味を成すといいのですが、不明な点があればお知らせください。

私はまだこれを自分でやったことがないので、コードを提供することはできません。しかし、Github リクエストからの Webhook を Travis のビルド リクエストに変換する小さな Web サービスを設定するのはそれほど難しくないと思います。

おすすめ記事