svn+post-commit实现自动部署

本文详细介绍了Subversion的安装、配置、连接及同步更新过程,包括创建用户、设置权限、配置环境变量等关键步骤,并提供了常见报错及解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、安装
#yum install subversion
检查是否安装了svn
#subversion –v
创建svn库和对应的目录
#mkdir /svn/www.test.com
#svnadmin create /svn/www.test.com
二、配置
创建登录svn的用户和密码
#vim /svn/www.test.com/conf/passwd
[users]
用户名=密码
设置svn用户权限
#vim /svn/www.test.com/conf/authz
[/]
用户名=rw
设置svn主配置文件
#vim /svn/www.test.com/conf/
anon-access=none #使非授权用户无法访问
auth-access=write #使授权用户有写权限
password-db=password
authz-db=authz #启用访问控制文件
realm=/svn/www.test.com #认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字。
启用svn:#svnserve –d –r /svn/www.test.com
注可以用—listen-port 参数修改svn的端口
三、连接svn
1、linux主机连接svn
#svn co svn://192.168.1.180
输入用户名和密码后就可以将svn上的数据下载到本地。
2、windows主机连接svn
利用TortoiseSVN工具进行连接。
四、利用svn的post-commit将svn服务器的文件同步更新到固定的目录
#cd /svn/www.test.com/hooks
#cp post-commit.tmpl post-commit
#chmod a+x post-commit
编辑post-commit钩子脚本
#vim post-commit
export LANG=zh_CN.UTF-8 #设定环境变量,如果没有设定可能会出现update报错
SVN=/usr/bin/svn
WEB=/usr/local/apache/htdocs/192.168.1.180
${SVN} update ${WEB} --username rsync --password rsync
注:WEB中指定的目录不能为空目录,需要先checkout
 
报错注解,及解决办法:
1、
svn: Error converting entry in directory '/usr/local/apache/htdocs/192.168.1.180' to UTF-8
svn: Can't convert string from native encoding to 'UTF-8':
svn: ?\229?\164?\141?\228?\187?\182 ?\229?\164?\141?\228?\187?\182 ?\229?\164?\141?\228?\187?\182 ?\229?\164?\141?\228?\187?\182 rsync-3.0.9.tar.gz
原因:svn服务器上的文件存在编码为UTF-8的文件,如果服务器不支持UTF-8编码就会报这个错误。
解决办法:在post-commit钩子脚本中,添加export LANG=zh_CN.UTF-8字段,更改环境变量中的编码。
2、
Skipped '/usr/local/apache/htdocs/192.168.1.180'
这个时候使用命令svn update命令会提示
Skipped ‘.’
原因:192.168.1.180是一个空目录或这个目录不存在
解决办法:先进行手工的checkout,之后再post-commit中将目录指定到checkout的目录,就解决了。

本文出自 “空の心” 博客,请务必保留此出处http://songknight.blog.51cto.com/2599480/742725

 

 

http://songknight.blog.51cto.com/2599480/742725

<think>嗯,用户之前问过关于svnlook提交者用户名的来源,现在又转向了VisualSVN Server的post-commit.bat脚本输出用户具体操作。我需要先回顾之前的对话,确保这次的回答连贯且准确。 首先,用户可能在使用VisualSVN Server,想通过post-commit钩子脚本来记录用户的操作细节。他们可能想监控提交行为,或者需要审计日志。用户的需求可能包括获取提交者信息、变更的文件列表、提交日志等。 接下来,我需要解释post-commit.bat的作用,以及如何编写这样的脚本。需要强调钩子脚本的位置,如何访问版本库路径、版本号等参数。同时,要说明svnlook工具的使用,比如如何获取作者、时间、日志和变更的文件。 需要注意的是,用户可能对批处理脚本不太熟悉,所以示例代码要简洁明了。还要提醒用户注意权限问题,脚本的执行权限和路径是否正确。另外,日志路径的可访问性也很重要,可能需要管理员权限才能写入。 可能用户还想知道如何扩展脚本的功能,比如发送邮件或集成其他系统,这时候需要给出一些方向,但保持回答简洁。此外,安全方面也要提醒,避免在脚本中暴露敏感信息。 用户可能的误区是认为钩子脚本可以直接阻止提交,但post-commit是在提交后执行的,无法阻止。如果有需要,应该使用pre-commit钩子。不过用户的问题是关于记录信息,所以这点可能不需要深入,但如果有疑问的话,可以简要说明。 最后,确保回答结构清晰,分步骤说明,并给出验证方法和注意事项,帮助用户顺利实现他们的需求。</think>在 VisualSVN Server 中,`post-commit.bat` 是一个 **提交后钩子脚本**(Post-Commit Hook),它会在用户成功提交代码到仓库后自动触发。通过编写此脚本,可以记录用户的具体操作(如提交者、提交时间、修改的文件等),并实现自定义操作(如发送通知、备份、日志记录等)。 --- ### **1. 脚本的核心作用** - **捕获提交信息**:通过 `svnlook` 命令提取提交的元数据(作者、时间、日志等)。 - **记录用户操作**:将提交信息输出到日志文件或发送到其他系统(如邮件、数据库等)。 - **触发后续动作**:例如自动部署代码、同步文件、调用 API 等。 --- ### **2. 脚本位置与参数** - **默认路径**:位于仓库的 `hooks` 目录下(例如 `C:\Repositories\MyRepo\hooks\post-commit.bat`)。 - **输入参数**: - `%1`:仓库的绝对路径(如 `C:\Repositories\MyRepo`)。 - `%2`:本次提交的修订版本号(如 `123`)。 --- ### **3. 示例脚本:记录用户操作到日志文件** 以下是一个简单的 `post-commit.bat` 脚本示例,用于输出用户操作到日志文件: ```batch @echo off setlocal set REPOS=%1 set REV=%2 REM 使用 svnlook 提取提交信息 set AUTHOR=$(svnlook author "%REPOS%" -r %REV%) set DATE=$(svnlook date "%REPOS%" -r %REV%) set LOG=$(svnlook log "%REPOS%" -r %REV%) set CHANGED_FILES=$(svnlook changed "%REPOS%" -r %REV%) REM 定义日志文件路径(需确保路径可写) set LOG_FILE=C:\SVN_Logs\commit_log.txt REM 写入日志 echo ======================================= >> "%LOG_FILE%" echo [提交时间] %DATE% >> "%LOG_FILE%" echo [提交者] %AUTHOR% >> "%LOG_FILE%" echo [修订版本] %REV% >> "%LOG_FILE%" echo [提交日志] %LOG% >> "%LOG_FILE%" echo [变更文件] >> "%LOG_FILE%" echo %CHANGED_FILES% >> "%LOG_FILE%" endlocal ``` -- ### **4. 关键点说明** #### **(1) 使用 `svnlook` 提取信息** - **作者**:`svnlook author <仓库路径> -r <版本号>` - **时间**:`svnlook date <仓库路径> -r <版本号>` - **日志消息**:`svnlook log <仓库路径> -r <版本号>` - **变更文件列表**:`svnlook changed <仓库路径> -r <版本号>`(输出增删改的文件列表) #### **(2) 日志文件路径** - 需确保脚本有权限写入目标文件(例如 `C:\SVN_Logs` 目录需要开放写入权限)。 - 建议使用绝对路径,避免权限或路径解析问题。 #### **(3) 增强功能(可选)** - **发送邮件**:调用命令行邮件工具(如 `blat`)或 PowerShell 发送提交通知。 - **调用 API**:通过 `curl` 或 `PowerShell` 将提交信息发送到 Web 服务。 - **备份操作**:自动复制提交的文件到备份目录。 --- ### **5. 脚本调试与权限** - **调试方法**: 1. 手动执行脚本: ```batch post-commit.bat "C:\Repositories\MyRepo" 123 ``` 2. 检查日志文件是否生成。 - **权限问题**: - 如果脚本未执行,检查 `post-commit.bat` 是否有可执行权限。 - 确保 VisualSVN Server 服务账户(默认是 `Local System` 或 `Network Service`)有权限访问脚本和日志目录。 --- ### **6. 注意事项** 1. **脚本性能**:避免在 `post-commit.bat` 中执行耗时操作(如大文件备份),否则会阻塞后续提交。 2. **错误处理**:在脚本中添加错误捕获(如 `if %errorlevel% neq 0`),防止因脚本异常导致提交失败。 3. **安全风险**:不要直接在脚本中暴露敏感信息(如密码),必要时使用加密或环境变量。 --- ### **7. 扩展:通过 PowerShell 实现更复杂逻辑** 如果需要更灵活的操作(如解析文件内容、调用 .NET 库),可以使用 `post-commit.ps1`(PowerShell 脚本)替代批处理文件: ```powershell param($repos, $rev) $author = svnlook author $repos -r $rev $log = svnlook log $repos -r $rev $files = svnlook changed $repos -r $rev | ForEach-Object { $_ -replace '^....', '' } # 去掉文件操作标记(A/D/M) # 记录到日志 "提交者: $author, 版本: $rev, 时间: $(Get-Date)" | Out-File C:\SVN_Logs\log.txt -Append "变更文件: $files" | Out-File C:\SVN_Logs\log.txt -Append ``` --- ### **8. 总结** 通过 `post-commit.bat` 脚本,可以精准记录用户的 SVN 操作,实现以下功能: - **审计追踪**:记录谁在什么时间修改了哪些文件。 - **自动化流程**:触发代码部署、测试或备份。 - **通知机制**:向团队发送提交通知。 如果需要更高级的功能,建议结合 PowerShell 或 Python 脚本实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值