使用expect登录SVN

时间:2009-03-04 06:30:51

标签: svn unix build-automation expect

我正在尝试使用自动脚本,该脚本将登录SVN,更新我的源代码,使用这些脚本创建tarball并将它们scp到远程主机。

这里的问题是,对于每次登录SVN(即使是结账或更新),我们都要求输入我们的密码。密码输入的自动化,我能找到的唯一方法,就是使用expect来解决这个问题。

是否有任何期望的脚本,可以处理SVN和scp检测并将密码提供给SVN然后再提交给SCP?

我使用以下内容:

spawn svn [lindex $argv 0]
expect " password: $"
send "$password\r"
expect { 
    " password: $"    send "$password\r"
    "^At revision "
    "^Updated to revision "
}

我从命令行传递密码和up命令,但如果有人有权访问历史记录,那么就存在安全威胁。下面提到的答案不满足我的先决条件,我现在也无法进行出口[其他一些安全问题: - (]

4 个答案:

答案 0 :(得分:2)

如果您使用svn + ssh协议访问SVN repo,则可以使用SSH密钥和ssh-agent来管理握手,因此您不需要涉及密码。

答案 1 :(得分:1)

<强> linuxbashscript.sh

svn up /path/to/local/copy
tar -cf backup.tar /path/to/local/copy
scp backup.tar user@192.1.1.1:/path/on/remote/host

甚至更好的用户svn导出将排除所有.svn目录。

svn export /path/to/repo /path/to/exported
tar -cf backup.tar /path/to/local/copy
scp backup.tar user@192.1.1.1:/path/on/remote/host

答案 2 :(得分:0)

我个人会使用ANT来完成所有这些任务,然后你可以根据需要调用你的ant脚本。 Ant为svn和scp以及许多其他构建自动化类型任务预先配置了任务。

答案 3 :(得分:0)

如果(像Dave建议的那样),你会使用Ant,你将会处理以下任务:

  • SvnAnt要检查,检查ins和之间的所有内容
  • Ant TAR创建存档的任务
  • Ant SCP任务发布

如果您担心安全问题,可以将密码保存到单独的属性文件中。