2017-10-23 6 views
2

私のレポに変更があった場合、BitbucketがTeamcityを起動するためのポスト・コミット・フックを設定しようとしています。BitbucketポストコミットフックシェルスクリプトをPowershellスクリプトに正しく変換するには?

SERVER=https://buildserver-url 
USER=buildserver-user 
PASS="<password>" 

LOCATOR=$1 

# The following is one-line: 
(sleep 10; curl --user $USER:$PASS -X POST "$SERVER/app/rest/vcs-root-instances/commitHookNotification?locator=$LOCATOR" -o /dev/null) >/dev/null 2>&1 <&1 & 

exit 0 

しかし、私はWindows環境で作業してPowerShellでこのスクリプトを必要としています、私はPowerShellのに変換しようとしたが、動作していないよう:後

はそれのためのシェルスクリプトです。

$SERVER=https://buildserver-url 
$USER=buildserver-user 
$PASS="<password>" 

$LOCATOR=%1% 

# The following is one-line: 
(sleep 10; curl --user $USER:$PASS -X POST "$SERVER/app/rest/vcs-root-instances/commitHookNotification?locator=$LOCATOR" -o /dev/null) >/dev/null 2>&1 <&1 & 

exit 0 

私はあまりPowershellスクリプトに精通していません。私はどこでこれに間違っていますか?

+0

なぜですか? bashスクリプトはGit for Windowsのbash環境で完全に動作します。 – VonC

+0

私たちは実際には、複数のリポジトリ用の汎用Powershellスクリプトを作成しています。 – ANIL

+0

一般化されたスクリプトをbashで書くことはできませんか? – VonC

答えて

3

同じことをPowerShellで行うには、間違いなくもう少し複雑です。 background taskを取得してOut-Nullにリダイレクトする必要があります。

param (
    [string]$locator = "xyz" 
) 
$SERVER="https://buildserver-url" 
$USER="buildserver-user" 
$PASS="<password>" 

$scriptBlock = { 
    $output = & curl --user "$($USER):$($PASS)" -X POST "$($SERVER)/app/rest/vcs-root-instances/commitHookNotification?locator=$($args[1])" -o Out-Null 2>&1 | Out-Null; 
    return $output 
} 

#Sleep 10 
$job = Start-Job -scriptblock $scriptBlock -ArgumentList $locator 
Wait-Job $job 
Receive-Job $job 

exit 0 

私はこのエンドツーエンドをテストすることはできませんが、これは頭出しをするはずです。

関連する問題