如何使用 Vagrant + pip & svn 制作自动脚本?
不带 vagrant 进行安装(svn 通过 promt 控制台询问凭据)[确定]:
# file:system/vagrant_setup.sh
sudo pip install --upgrade pip virtualenv
sudo mkdir -p /opt/python-env2/
sudo chown vagrant:vagrant /opt/python-env2/
cd /opt/python-env2
virtualenv env-appserver
# requirements-stable.txt contains
# svn+https://svn.company.ch/svn/integration-2014-sep-24@1886#egg=integration
/opt/python-env2/env-appserver/bin/pip install -r /vagrant/requirements/requirements-stable.txt
使用 vagrant 安装(svn 不询问凭据)[FAIL]:
# file Vagrant
Vagrant.configure("2") do |o|
#o.vm.box = "Official Ubuntu 11.10 Server amd64"
o.vm.box = "trusty-server-cloudimg-amd64-vagrant-disk1"
o.vm.box_url = "https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box"
o.vm.synced_folder "./opt/proj", "/opt/proj", create:true
# this did not helped o.vm.synced_folder "~/.subversion", "/home/vagrant/.subversion", create:true
o.vm.network :private_network, ip: "192.168.55.55"
o.vm.provision :shell, :path => "system/vagrant_setup.sh"
end
错误日志如下:
# file:log
==> default: Downloading/unpacking integration from svn+https://svn.company.ch/svn/integration-2014-sep-24@1886 (from -r /vagrant/requirements/requirements-stable.txt (line 4))
==> default: Checking out https://svn.company.ch/svn/integration-2014-sep-24 (to revision 1886) to ./env-appserver/build/integration
==> default: svn: E215004: Authentication failed and interactive prompting is disabled; see the --force-interactive option
==> default: svn: E215004: Unable to connect to a repository at URL 'svn.company.ch/svn/integration-2014-sep-24'
==> default: svn: E215004: No more credentials or we tried too many times.
==> default: Authentication failed
==> default: Complete output from command /usr/bin/svn checkout -q -r 1886 svn.company.ch/svn/integration-2014-sep-24 /opt/python-env2/env-appserver/build/integration:
==> default:
==> default: ----------------------------------------
==> default: Cleaning up...
==> default: Command /usr/bin/svn checkout -q -r 1886 svn.company.ch/svn/integration-2014-sep-24 /opt/python-env2/env-appserver/build/integration failed with error code 1 in None
==> default: Storing debug log for failure in /root/.pip/pip.log
The SSH command responded with a non-zero exit status. Vagrant
assumes that this means the command failed. The output for this command
should be in the log above. Please read the output to determine what
went wrong.
请您参考如下方法:
我假设您的配置脚本 system/vagrant_setup.sh 正在尝试执行 svn checkout 并且身份验证失败。您必须使用 --username 和 --password 选项将凭据传递给 svn 服务器以进行 svn checkout。查看 svn help checkout 了解更多信息。
您的下一个障碍是让 svn 对其所有确认保持沉默。例如,要阻止它在每次尝试对服务器进行身份验证时询问您是否要将密码存储在自由文本中,您可能需要添加
echo "store-plaintext-passwords = no" >> /home/vagrant/.subversion/servers
到你的 system/vagrant_setup.sh 脚本。当然这个文件必须首先存在,所以你可以复制它的完整版本或者尝试让 subversion 以 svn help sudo 自动创建它作为 vagrant 用户首先。 (否则 .subversion 文件夹将位于/root/文件夹中。)请注意,subversion 会在用户第一次运行时创建 ~/.subversion 文件夹及其所有内容。
设置这一切有 pip 棘手,但我认为在大规模生产开发人员沙箱方面的返回将是巨大的。
