ウェブフックは近年ますます人気になって、githubの、gitlabおよびその他のコードホスティングプラットフォームは、ウェブフック機能を提供しています。ウェブフックが、ここでは詳細に説明しませんが、参考書や材料のより深い理解に関連するインターネットを読み取ることができますについて。それは単にとして理解することができますイベント後のコールバックが完了しています。
継続的な統合環境では、我々は持続放出を達成し、パッケージのアーカイブ機能を解除するウェブフック機能のSonarqubeを使用することができます。一般的なアイデアが完了している私たちはウェブフック構築タスクによってサーバーを伝えることができます成功したプロジェクトをビルドする場合は、次のウェブサーバは、ウェブフックを渡すことができますパラメータは、パッケージに対処することを決定したアーカイブをパッケージ化する方法と、(などのHTTP、FTPを介して)リモートサーバにパッケージを公開する方法(主要プロジェクトによって判断)プロジェクト、パッケージです。
Webサーバーを設定します
ウェブフックを達成するために、コールバックの事前設計されたWebサーバが存在する必要があります。私たちは、Webプロジェクト(新しいMVCを作成するプロジェクト)内蔵事前
それはテストですので、我々は次のように、その後、ホームコントローラの下に新しいアクションを作成し、ビジュアルテンプレートを使用してMVCプロジェクトを生成するためにここにいます。
public IActionResult HookTest([FromBody]SonarQubeVm sonar)
{
return new EmptyResult();
}
Sonarqubeがポスト経由で提出するウェブフックので、そのアクションはリクエストポスト方式をサポートしている必要があります。
ソナーパラメータは、SonarQubeVm
次のように、Sonarqubeが構築要求仕様書によれば、パラメータの種類:
public class SonarQubeVm
{
public DateTime? AnalysedAt { get; set; }
public SonarProjectInfo project { get; set; }
public string ServerUrl { get; set; }
public string Status { get; set; }
public string TaskId { get; set; }
}
public class SonarProjectInfo
{
public string Key { get; set; }
public string Name { get; set; }
}
Sonarqubeは完全なリクエストパラメータを参照してくださいウェブフックに上記の引数は完全にすべてのパラメータSonarqubeリターンが含まれていないことに注意してください、我々は唯一参加した。
http://localhost:9000/documentation/webhooks
は、localhost:ポート番号または外部ネットワークからの要求を変更した場合9000は、サーバのデフォルトのポート番号は、あります、実際のIPアドレス(またはドメイン名)に加えて、指定したポート番号を変更する必要があります。
ウェブフックコール
あなたは二つの方法で呼び出すことができますSonarqubeでは、グローバルモードとプロジェクトモードをウェブフック。グローバル・モードをビルド成功は唯一の指定されたプロジェクトのビルドがトリガされた後、プロジェクトのモードをトリガするたび。
Globalモード
実例として、我々はグローバルをクリックAdministration
し、設定ウェブフックをクリックしてあり、この時点で、右上隅に表示されるドロップダウンリストを選択しcreate
、ボタンは、ポップアップボックスには、名前とURLを入力するよう求めクリックした後に表示され、[OK]をクリックします。
私たちは、デバッグモードのWebプロジェクト内で開始し、その後Sonarqubeを構築するためのプロジェクトを実行し、実行がWebサーバに到達した要求があるかどうかを確認するために完成されています。
MSBuild.SonarQube.Runner.exe begin /k:"mytest" /n:"mytest" /v:"v3.0" /d:sonar.cs.opencover.reportsPaths="%CD%\testcover.xml"
msbuild.exe
"E:\personalproject\newTest2018\ConsoleApp1\packages\OpenCover.4.6.519\tools\OpenCover.Console.exe" -output:"%CD%\testcover.xml" -register:user -target:"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" -targetargs:"%CD%\bin\Debug\NunitTest.dll"
MSBuild.SonarQube.Runner.exe end
我々は唯一のバージョン番号を変更し、実行にユニットテストについて話すとき、これらはコードであり、我々はそれを実行します。
上記のコードが実行されているなど、私たちは、httpリクエストのブレークポイントヒット見ることができる瞬間を待ちます
ローカルホストからのserverURLによって:9000 MyTestに、我々はSonarqubeは、プロジェクトの要求キーと名前は、我々が設定されていることである送られたかを決定することができます。
これらは、サンプルプログラム、無便利なコードと、我々はどのプロジェクトをビルドするための鍵ウェブフック要求に基づいて、それ以前に設定された論理に基づいてアーカイブすることに決め得ることができ、実際のプロジェクトであり、どのようなウェブに公開しますどのような(私たちは、ここで使用可能なWebプロジェクトのFTTの道をリリース以前について話しました)ディレクトリサーバ
プロジェクトモード
プロジェクトモードとグローバルモードまったく同じ設定が、別の入り口、プログラムモデルは、項目入力する必要があるAdministration
タグセットを。MYTESTまだプロジェクトの例として、我々はあなたがウェブフックを選択することができ、[管理]タブに移動し、プロジェクトをMyTestに開きます。
そして、グローバル設定は、のように、ここではそれらを繰り返すありません。
証明書要求
認証要求がないので、上記の構成により、我々は成功したウェブフック機能を改善しますが、本番環境に上記のコードを使用することはできません、誰もが悲惨な結果につながる。我々は要求を認証する必要があり、その後、ビルドサーバーのアドレスを呼び出すことができる場合には、その後、適切なロジックを実行するかどうかを決定します。
sonaqubeは、ヘッダの設定をサポートしていませんので、私たちは、基本的なHTTP認証を使用することができ、複雑な認証要求を使用することはできません
私たちは、サーバー上で、次のクラスを追加します
public class BasicAuthenticationAttribute: ActionFilterAttribute
{
protected string Username { get; set; } = "sto";
protected string Password { get; set; } = "sto";
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var req = filterContext.HttpContext.Request;
var auth = req.Headers["Authorization"].ToString();
if (!String.IsNullOrEmpty(auth))
{
var cred = System.Text.Encoding.ASCII.GetString(Convert.FromBase64String(auth.Substring(6))).Split(':');
var user = new { Name = cred[0], Pass = cred[1] };
if (user.Name == Username && user.Pass == Password) return;
}
filterContext.Result = new UnauthorizedResult();
}
}
上記のコード、私たちは、実際の生産環境をハードコーディングされたユーザー名とパスワードを指定して、我々は、データベースを照会することによって、ユーザー名とパスワードを取得することができます。でOnActionExecuting
、私たちの方法を書き換えるヘッダAuthorization
暗号化されたBase64文字列を取得するために、次に:
分割を取得ユーザー名とパスワードを入力します。その後、実際のユーザー名とパスワードの比較を行い、その後、次の動きを決定します。
私たちは、このフィルタはリクエストメソッドに追加されます呼び出します。
次のように変換した後、コードは次のとおりです。
[BasicAuthentication]
public IActionResult HookTest([FromBody]SonarQubeVm sonar)
{
return new EmptyResult();
}
私たちは、次のように更新されたURLをウェブフック:
http://sto:sto1@localhost:49442/home/HookTest
実際、サーバー・ロジックは、アカウントとパスワードは、STOが要求できるようでなければならないことを要求し、我々は意図的要求が成功することができるかどうかを確認するためにSTO1するためのパスワードを変更しました。
私達はちょうどバージョン番号はインクリメントさを見て、建物の前にコードを実行し続けます。
ウェブフックの管理インターフェイスを入力してください私たちは、その後、あなたは要求が失敗した見ることができます
当社は、損失の日付の背中をクリックして四框
アイコンを、あなたは状態の故障が401で見ることができます
私たちは、次のアドレスに要求を変更します
http://sto:sto@localhost:49442/home/HookTest
ここでSTO1サーバではなく、STOを期待し、要求は成功します。