【问题标题】:Ansible: how to init git bare repository and clone it to the same machine?Ansible:如何初始化 git 裸存储库并将其克隆到同一台机器上?
【发布时间】:2016-08-29 10:51:46
【问题描述】:

我想问你如何使用 Ansible 实现这样的案例。

我的主要目标是构建 git 裸存储库并将其克隆到同一台机器 (/var/www)。 我通常的步骤是:

1) git init —bare(在 /git/project-name 中运行)

2) git clone /git/project-name --no-hardlinks (running in в /var/www)

当我愿意使用 Ansible 做这个案例时,我无法实现第一步——如果是空的 git 裸存储库,则进行初始化。

Ansible git 模块要求 'repo' 参数应填写存储库地址,但如果我只是创建一个,我该如何定义呢?

git: repo=?? dest=/git/project-name bare=yes

【问题讨论】:

  • 快速查看文档似乎无法在没有源的情况下创建新的存储库。你为什么要这样做,你确定这是你想要达到的目标吗?
  • 我的目标是创建 centerl 存储库,我将从不同的机器推送我的代码,并从那里克隆所有其他存储库。这不是一个正确的方法吗?
  • Ansible 可以执行任意命令,因此如果您知道如何从命令行创建 git 存储库,您可以在 ansible playbook 中实现它。 git 模块只能克隆仓库,不能从头创建新仓库。
  • 除了使用 command 模块运行 git 之外,您可以复制它创建的所有文件,或解压缩它们。它只是文件系统中的一个普通分支。不知道这是否有意义。
  • 好的。我想我最终会使用命令模块。我会考虑是否可以为 Ansible 编写我自己的插件 :) 谢谢!

标签: git ansible ansible-playbook git-bare


【解决方案1】:

这是一个使用新的裸仓库设置 git 服务器的示例手册:

---
- hosts: git.example.org
  become: true
  tasks:
    - user:
        name: git
        shell: /usr/bin/git-shell
        home: /srv/git

    - authorized_key:
        user: git
        state: present
        key: https://github.com/myuser.keys

    - command: git init --bare /srv/git/myrepo.git
      args:
        creates: /srv/git/myrepo.git/HEAD
      become_user: git

如果您已经在服务器上设置了git 用户,那么您只需关注command 任务。享受吧!

【讨论】:

  • 你不需要整个file: hunk 或chdir: arg 到git init --bare 命令;只需提供目标目录。来自git init docs如果你提供一个目录,命令就会在其中运行。如果此目录不存在,则会创建它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-14
  • 2020-11-26
  • 1970-01-01
  • 2017-08-26
相关资源
最近更新 更多