我正在设置我的Subversion提交后钩子(Hook),以在进行提交时远程触发Jenkins构建。

首先,我将post-commit.tmpl更改为post-commit.bat,然后:

我首先尝试了这个:

SET REPOS=%1
SET REV=%2
C:/wget_for_win/wget http://localhost:8080/jenkins/job/my_project/build

然后我提交了一些代码,它按预期工作。
但这只会构建一个项目,但是我希望它更加灵活,因此我将post-commit.bat更改为在Jenkins Subversion Plugin page上找到的项目:
SET REPOS=%1
SET REV=%2
SET UUID=`svnlook uuid %REPOS%`
C:/wget_for_win/wget \
 --header="Content-Type:text/plain;charset=UTF-8"
 --post-data="svnlook changed --revision %REV% %REPOS%"
 --output-document="-"
 --timeout=2
 http://localhost:8080/jenkins/subversion/%UUID%/notifyCommit?rev=%REV%

但这是行不通的。它并没有触发 Jenkins 继续 build 。在第二个脚本中我做错了什么?

我认为在批处理文件中运行“svnlook”存在问题。我在cmd中运行svnlook uuid [REPO LOCATION],它显示了ID。然后我将其放入批处理文件中:
SET UUID=svnlook uuid [REPO LOCATION]
ECHO %UUID%

运行上述批处理文件不会输出ID。它只显示svnlook uuid [REPO LOCATION]

最佳答案

最后,我的post-commit.bat看起来像:

SET REPOS=%1
SET REV=%2

FOR /f "tokens=*" %%a IN (
'svnlook uuid %REPOS%'
) DO (
SET UUID=%%a
)

FOR /f "tokens=*" %%b IN (
'svnlook changed --revision %REV% %REPOS%'
) DO (
SET POST=%%b
)

C:\wget_for_win\wget ^
    --header="Content-Type:text/plain;charset=UTF-8" ^
    --post-data="%POST%" ^
    --output-document="-" ^
    --timeout=2 ^
    http://localhost:8080/jenkins/subversion/%UUID%/notifyCommit?rev=%REV%

提交后 Hook 现在正在工作。
  • 对于需要Windows版本的wget的用户,请使用WGET for Windows
  • 关于svn - 在Windows上使用提交后 Hook 远程触发Jenkins构建,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20416498/

    10-14 16:42
    查看更多