我正试图让CI与詹金斯合作.到目前为止,我们一直在我们的环境中执行两个预定的构建,但我们的开发人员希望CI能够正常运行.我按照Jenkins Subversion插件维基页面中的说明操作:
https://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin
这让我得到了一个在命令行执行的脚本就好了,但是当我在Subversion中提交更改(使用TortoiseSVN客户端)时,提交似乎挂了,我没有看到Jenkins得到通知.
这是我的脚本:
#!/bin/sh
REPOS="$1"
REV="$2"
UUID=`svnlook uuid $REPOS`
XSLT_FILE=/var/www/svn/codelog.xslt
RSS_FILE=/var/www/html/code_all.rss
MAX_RESULTS=40
/usr/bin/wget \
--auth-no-challenge \
--no-check-certificate \
--header "Content-Type:text/plain;charset=UTF-8" \
--post-data "`svnlook changed --revision $REV $REPOS`" \
--output-document "-" \
--timeout=2 \
https://192.168.100.16/subversion/${UUID}/notifyCommit?rev=$REV
svn log "file://$REPOS" --limit "$MAX_RESULTS" -v --xml | xsltproc "$XSLT_FILE" - > "$RSS_FILE"
Run Code Online (Sandbox Code Playgroud)
RSS源已经在脚本中.这已经工作了一年多.
我已经更新了文件权限,以防出现问题:
[root@Subversion hooks]# ls post-commit -ao
-rwxrwxr-x 1 apache 530 Jul 17 06:27 post-commit
Run Code Online (Sandbox Code Playgroud) 我的post-commit钩子是:
/ usr/bin/svn update/var/www/html/mysite/--username myusername --password mypassword --no-auth-cache >> /var/www/html/mysite/foo.txt 2>&1
执行提交后,我的post-commit钩子输出到foo.txt以下内容:
更新'/ var/www/html/mysite':svn:E000013:无法从模板'/var/www/html/mysite/.svn/tmp/svn-XXXXXX'创建临时文件:权限被拒绝
有任何想法吗??必须是与权限相关的内容.它曾经工作,但发生了一些事情.
我正在设置我的Subversion post-commit钩子,以便在提交时远程触发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
Run Code Online (Sandbox Code Playgroud)
然后我提交了一些代码,它按预期工作.但这只会构建一个项目,但我希望它更灵活,所以我改为post-commit.bat我在Jenkins Subversion插件页面上找到的那个:
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%
Run Code Online (Sandbox Code Playgroud)
但是这个不起作用.它没有触发Jenkins再建造.我在第二个脚本中做错了什么?
我认为在批处理文件中运行"svnlook"时存在问题.我svnlook uuid [REPO LOCATION]在cmd中运行,它显示了id.然后我把它放在一个批处理文件中:
SET UUID=svnlook uuid [REPO LOCATION]
ECHO %UUID%
Run Code Online (Sandbox Code Playgroud)
运行上面的批处理文件不会输出id.它只显示svnlook uuid [REPO LOCATION].
如何使用命令触发提交后挂钩git cherry-pick <commit>?
我试过的:
git commit -m '...'。它正常触发了提交后钩子。git merge在某些情况下使用,git commit在其他情况下使用。但我不确定何时使用哪个命令。我的问题是:
git cherry-pick?提交后,我收到一个post-commit hook failed错误:
svn: Can't open file '.svn/lock': Permission denied
Run Code Online (Sandbox Code Playgroud)
奇怪的是,我的post-commit钩子文件在它自己运行时完全正常,只是在从实际提交中调用时.
现在,提交后文件结束了svn update另一个工作副本,所以我假设错误在这个工作副本中.
当我进入.svn这个工作副本时,没有locks文件/目录.这可能是脚本失败的原因.
这是我的提交后文件:
#!/bin/sh
REPOS="$1"
REV="$2"
cd /var/www
/usr/bin/svn update
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
给定一个任意的,可执行的Git post-commit钩子,它不会在非交互式rebase期间运行,根据GIT-REBASE(1)Manpage,在非交互模式下,它既不是前者的同义词,rebase --force-rebase也不rebase --no-ff是前者的同义词.
但是通过使用rebase --interactive --no-ff相同的Git钩子进行交互式rebase,可以在post-commit上运行.
有人可以解释这种行为背后的基本原理.