8

我正在尝试使用 vagrant 来设置一个开发环境,如果它们还没有被克隆,它会自动克隆两个存储库。

我写了一个简单的脚本来克隆 repos,在很多很多方法都失败后让 puppet 直接运行 git 命令。出于某种原因,我认为这种方法是万无一失的,但事实证明我比我想象的更傻。

exec {"load-repos":
    command =>"/bin/bash /vagrant/manifests/modules/scripts/clone_repos.sh",
    require => Package["git-core"],
  }

这是脚本:

#!/bin/bash
if [ ! -d /vagrant/repo-one-dest ]; then
  git clone git@example.com:/repo-one.git /vagrant/repo-one-dest
fi

if [ ! -d /vagrant/repo-two-dest ]; then
  git clone git@example.com:/repo-two.git /vagrant/repo-two-dest
fi

exit

私钥设置正确。当我登录 vm 并手动运行bash clone_repos.sh时,一切正常。无论我重新加载 vagrant 并让 puppet 执行多少次,repos 都不会通过 exec 加载。我错过了什么?

4

1 回答 1

4

这可能是因为当您vagrant ssh通常以vagrant用户身份登录时(默认情况下,当然可以通过配置进行修改)。vagrant我猜的用户已经正确设置了密钥。

但是,当 Vagrant 运行您的配置器(在本例中为 Puppet)时,它会执行 a sudo,因此它以 root 用户身份运行。

我通常建议设置密钥以进行部署的方式是将密钥放在某个地方,然后使用GIT_SSH包装器正确克隆它,或者使用 SSH 代理。

于 2012-07-26T17:52:51.780 回答