2017-04-07 17 views
2

最近CIプロジェクトの作業を開始しました。SCMコミット(Git/SVN)でプロジェクトをビルドする必要があります。ビルドトリガをリモートで使用しようとしましたが、コードをコミットしてアプリケーションを正常に構築すると、ジョブがトリガされます。Jenkinsが複数のプロジェクトでコミットに基づいてビルドを起動する

私は1つのリポジトリに複数のプロジェクトを持っているので、私のコミットに基づいてリポジトリ内のそれぞれのプロジェクトを見つけ出し、特定のジョブの実行を開始する必要があります。

ジェンキンスでこれを行う方法はありますか?ポストコミットフックjenkins.vbsファイルの

コードは

Set args = WScript.Arguments 
JobName = args.Item(0) 
Token = args.Item(1) 

' URL to open 
sUrl = "http://builduser:[email protected]:8080/buildByToken/build?job=" + JobName + "&token=" + Token 

' POST Request to send. 
WScript.Echo "sUrl: " + sUrl 
sRequest = "" 

HTTPPost sUrl, sRequest 

Function HTTPPost(sUrl, sRequest) 
    set oHTTP = CreateObject("Microsoft.XMLHTTP") 
    oHTTP.open "POST", sUrl,false 
    oHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
    oHTTP.setRequestHeader "Content-Length", Len(sRequest) 
    oHTTP.send sRequest 
    HTTPPost = oHTTP.responseText 
End Function 

コードポストcommit.batファイルの

SET CSCRIPT=%windir%\system32\cscript.exe 
SET VBSCRIPT=E:\Repositories\CICD\hooks\post-commit-hook-jenkins.vbs 

"%CSCRIPT%" "%VBSCRIPT%" "JobName" "AuthenticationToken" 

答えて

2

あなた

  • の場合プロジェクトのSVN/gitの場所を "Source Code Maトリガの構築 『セクション

『の』nagment」、ジョブの設定

  • のセクションを選択します』ポーリングSCM、それはかなりあなたが望むように動作するはずです。

    あなたはおそらく、この質問をされているという事実は、あなたが正しい、ビルドスクリプトからソースコードのチェックアウトをしていることを意味しますか?これを避け、Jenkinsにsvn checkout/git cloneを処理させてください。

    それともあなただけのポーリングを避けるためにしようとしている、そしてこの質問は、SVNリポジトリにあなたが約束場所に応じてSVNのコミット後のフックから異なるプロジェクトをトリガーする方法についてですか?その場合は、コミットの影響を受けるパスを分析し、それに基づいて正しいJenkinsジョブをトリガーする、より洗練されたフックスクリプトを作成する必要があります。

    編集:あなたのポストcommit.batファイルで

    あなたが知っている、まだトリガにどのジョブいないとして、あなたは、ジョブ名の代わりに、コミットのリポジトリとリビジョン番号を渡す必要があります。 Subversionは、第1引数と第2引数としてリポジトリとリビジョンを渡します。あなたの.vbsスクリプトで

    SET CSCRIPT=%windir%\system32\cscript.exe 
    SET VBSCRIPT=E:\Repositories\CICD\hooks\post-commit-hook-jenkins.vbs 
    SET REPOS=%1 
    SET REVISION=%2 
    
    "%CSCRIPT%" "%VBSCRIPT%" %REPOS% %REVISION% "AuthenticationToken" 
    

    、あなたはその後、jobNameはは今、あなたはsvnlook変化を調べるために、このリビジョン番号を使用する必要が

    repos = args.Item(0) 
    revision = args.Item(1) 
    token = args.Item(2) 
    

    によって引数から取られている文を置き換える必要があります。 EXE。 svnlook変数にsvnlook.exeとこのような何かを実行するために、絶対パスを入れてください:

    Set changedExec = shell.Exec(svnlook & " changed --revision " & revision & " " & repos) 
    Do Until changedExec.StdOut.AtEndOfStream 
        changed = changed + changedExec.StdOut.ReadLine() + Chr(10) 
    Loop 
    

    今、あなたはchanged変数にsvnlook.exe changedの出力を持っています。 SVNリポジトリ内のどのファイルがコミットの影響を受けているかを示します。

    次に、それがトリガーするジョブ名を決定するchanged変数の内容を解析するのはあなた次第です。たとえば、 "foo/trunk /"が含まれているかどうかを確認してから、foo-trunkジョブを起動するような簡単な操作を行うことができます。

  • +0

    @ SivamohanReddy:私の答えを投稿した直後、私はおそらく質問を誤解していると思ったので、別の段落を追加しました。 –

    +0

    あなたの答えに感謝@ウィムCoenen、我々はトリガーするフックスクリプトのようなサンプルがありますか?さらに、私はすべてのプロジェクトを単一のリポジトリに持っています –

    +0

    あなたの質問には、コミットが発生したときにジェンキンスビルドをトリガーするスクリプトが既に用意されていることを暗示しているようです。そのスクリプトを質問に追加して、あなたがすでに持っているものを知っていることを確認してから、それを修正する方法を見ることができます。 –

    関連する問題