Vagrant with Ansible Provisioning-如何git克隆私有回购
我正在使用设置共享开发服务器。我正在尝试将其用于资源调配(以前使用过bash脚本)。我似乎无法正确配置东西,以便Ansible能够在资源调配阶段自动克隆我们的私有gitlab repo 我们的流浪汉档案是Vagrant with Ansible Provisioning-如何git克隆私有回购,git,ssh,vagrant,ansible,ansible-playbook,Git,Ssh,Vagrant,Ansible,Ansible Playbook,我正在使用设置共享开发服务器。我正在尝试将其用于资源调配(以前使用过bash脚本)。我似乎无法正确配置东西,以便Ansible能够在资源调配阶段自动克隆我们的私有gitlab repo 我们的流浪汉档案是 Vagrant.configure("2") do |config| config.vm.box = "ubuntu/trusty64" config.vm.synced_folder /my/local/dir/, "/home/vagrant/repos" config.vm.
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.synced_folder /my/local/dir/, "/home/vagrant/repos"
config.vm.synced_folder ".", "/vagrant"
config.ssh.forward_agent = true
config.vm.provision "ansible_local" do |ansible|
ansible.playbook = "playbook.yml"
end
end
我们的基本剧本看起来像
---
- hosts: all
sudo: true
tasks:
- name: update apt cache
apt: update_cache=yes
- name: install git
apt: name=git state=present
- name: clone test repo
shell: ssh-keyscan -H our.private.gitlab.server >> ~/.ssh/known_hosts; ssh -T git@our.private.gitlab.server; git clone git@our.private.gitlab.server:me/amazing-repo.git
我有一个包含以下内容的ansible.cfg
文件
[ssh_connection]
ssh_args = -o ForwardAgent=yes
在配置阶段,我遇到了以下错误(尽管在主机上使用ssh add-L
验证代理是否拥有我的密钥)
权限被拒绝(公钥)。\r\n正在关闭到
“惊人的回购”…\n终止被拒绝(公钥)。\r\n终止:无法
从远程存储库读取。\n\n请确保具有正确的
访问权限\n并且存储库存在。“
我读过诸如和(以及更多其他)之类的文章,但我无法让它工作
我只想让配置步骤负责克隆repo,然后将它们同步到我的本地机器,这样任何提交/推送都将使用我本地存储的ssh密钥
更新 这似乎与我的工作有关,但我目前看不到任何解决方案。
@LukášLalinský的建议适用于OSX,但不适用于Windows。在Windows上,git克隆步骤在资源调配过程中失败,但如果我随后ssh到机器中,ssh密钥将转发到VM,并且存在
ssh_AUTH_SOCK
。我可以在这一阶段进行克隆,但不能在资源调配过程中进行克隆。问题是,当您运行sudo
时,您无法访问SSH代理套接字。解决此问题的唯一方法是在服务器上更改/etc/sudoers
,以保留SSH\u AUTH\u SOCK
环境变量
例如,将此添加到/etc/sudoers
,作为剧本中的首要任务之一:
Defaults env_keep += "SSH_AUTH_SOCK"
以下是我在Ansible配置的Vagrant box中git克隆私有回购所需的所有设置,版本如下:
- 流浪汉2.0.1
- Ansible 2.4.1.0
- Box
-ubuntu16.04.3ubuntu/xenial64
- VirtualBox 5.1.30可能不重要
- macOS 10.13
文件中,配置您的Ansible provisioner以使用SSH代理转发:
Vagrant.configure('2') do |config|
# ...
config.ssh.forward_agent = true
# ...
end
现在,将git服务器添加到guest上的已知主机:
# todo: better to add to the file instead of overwrite, but only if not already present
- name: set up bitbucket.org as a known host
shell: 'ssh-keyscan -H bitbucket.org > /home/ubuntu/.ssh/known_hosts'
接下来,添加该任务以克隆repo。我们需要指定该任务不应以root用户身份运行,以便SSH代理转发可以工作:
- name: clone repo
become: no # to use ssh agent forwarding, must not be root
git:
repo: 'git@bitbucket.org:myuser/myrepo.git'
dest: /path/to/myrepo
在我的例子中,这导致了权限问题,因为一旦我不再以root身份运行git clone
,我就不再有创建目标目录的权限。因此,我添加了一个先前的文件
任务,以创建具有可编辑权限的root目录。这在OSX上非常有效,但由于某些原因无法在Windows上运行