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

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

在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 命令,但如果有人有权访问历史记录,则会存在安全威胁。下面提到的答案不满足我的先决条件,而且我现在无法进行导出[其他一些安全问题:-(]

有帮助吗?

解决方案

<强> 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

其他提示

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

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

如果(像戴夫建议的那样),您将使用 Ant,您将需要完成以下任务:

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top