<p><code>ansible.builtin.git</code> 模块是 Ansible 的内置模块,用于从 Git 仓库检出代码到目标主机。它适用于多种操作系统,能够帮助你自动化软件部署或文件同步。</p> <h4 id="_1"><strong>主要参数</strong></h4> <ul> <li><strong><code>repo</code></strong>:字符串,指定 Git 仓库的 URL(必需参数)。</li> <li><strong><code>dest</code></strong>:字符串,指定目标主机上的检出路径(必需参数)。</li> <li><strong><code>update</code></strong>:布尔值,是否从已同步的远程仓库中获取新修订版本,默认为 <code>true</code>。</li> <li><strong><code>after</code></strong>:返回值,包含更新后最新的提交哈希值。</li> </ul> <h4 id="https-git"><strong>示例:通过 HTTPS 检出 Git 仓库</strong></h4> <p>以下是一个示例 Playbook,展示如何使用 <code>git</code> 模块从 HTTPS 地址检出 Git 仓库。</p> <div class="codehilite"><pre><span></span><code><span class="nn">---</span> <span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">git module demo</span> <span class="w"> </span><span class="nt">hosts</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">all</span> <span class="w"> </span><span class="nt">become</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span> <span class="w"> </span><span class="nt">tasks</span><span class="p">:</span> <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ensure git pkg installed</span> <span class="w"> </span><span class="nt">ansible.builtin.yum</span><span class="p">:</span> <span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">git</span> <span class="w"> </span><span class="nt">state</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">present</span> <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">checkout git repo</span> <span class="w"> </span><span class="nt">ansible.builtin.git</span><span class="p">:</span> <span class="w"> </span><span class="nt">repo</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">https://github.com/lucab85/ansible-pilot.git</span> <span class="w"> </span><span class="nt">dest</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/home/devops/ansible-pilot</span> </code></pre></div> <h4 id="_2"><strong>执行步骤</strong></h4> <ol> <li> <p><strong>准备主机清单文件</strong> 确保你的 <code>inventory</code> 文件中包含了目标主机的列表。例如:</p> <p><code>ini [targets] demo.example.com</code></p> </li> <li> <p><strong>运行 Playbook</strong> 使用以下命令运行 Playbook:</p> <p><code>bash ansible-playbook -i inventory git_demo.yml</code></p> </li> </ol> <h4 id="_3"><strong>执行结果</strong></h4> <p>如果任务成功执行,输出将类似于以下内容:</p> <div class="codehilite"><pre><span></span><code><span class="n">PLAY</span><span class="w"> </span><span class="p">[</span><span class="n">git</span><span class="w"> </span><span class="n">module</span><span class="w"> </span><span class="n">demo</span><span class="p">]</span><span class="w"> </span><span class="o">*******************************************************</span> <span class="n">TASK</span><span class="w"> </span><span class="p">[</span><span class="n">Gathering</span><span class="w"> </span><span class="n">Facts</span><span class="p">]</span><span class="w"> </span><span class="o">******************************************************</span> <span class="nl">ok</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="n">demo</span><span class="p">.</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">]</span> <span class="n">TASK</span><span class="w"> </span><span class="p">[</span><span class="n">ensure</span><span class="w"> </span><span class="n">git</span><span class="w"> </span><span class="n">pkg</span><span class="w"> </span><span class="n">installed</span><span class="p">]</span><span class="w"> </span><span class="o">**********************************************</span> <span class="nl">changed</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="n">demo</span><span class="p">.</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">]</span> <span class="n">TASK</span><span class="w"> </span><span class="p">[</span><span class="n">checkout</span><span class="w"> </span><span class="n">git</span><span class="w"> </span><span class="n">repo</span><span class="p">]</span><span class="w"> </span><span class="o">*****************************************************</span> <span class="nl">changed</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="n">demo</span><span class="p">.</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">]</span> <span class="n">PLAY</span><span class="w"> </span><span class="n">RECAP</span><span class="w"> </span><span class="o">*******************************************************************</span> <span class="n">demo</span><span class="p">.</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">ok</span><span class="o">=</span><span class="mi">3</span><span class="w"> </span><span class="n">changed</span><span class="o">=</span><span class="mi">2</span><span class="w"> </span><span class="n">unreachable</span><span class="o">=</span><span class="mi">0</span><span class="w"> </span><span class="n">failed</span><span class="o">=</span><span class="mi">0</span><span class="w"> </span><span class="n">skipped</span><span class="o">=</span><span class="mi">0</span><span class="w"> </span><span class="n">rescued</span><span class="o">=</span><span class="mi">0</span><span class="w"> </span><span class="n">ignored</span><span class="o">=</span><span class="mi">0</span> </code></pre></div> <h4 id="_4"><strong>注意事项</strong></h4> <ol> <li><strong>安装 Git</strong>:确保目标主机上安装了 Git。如果未安装,可以通过 <code>yum</code> 或 <code>apt</code> 模块安装。</li> <li><strong>权限问题</strong>:如果需要使用 <code>sudo</code> 权限,确保 <code>become: true</code>。</li> <li><strong>HTTPS 访问</strong>:通过 HTTPS 检出仓库时,确保仓库的 URL 是公开可访问的,或者目标主机可以访问该 URL。</li> <li><strong>SSH 检出</strong>:如果需要通过 SSH 检出仓库,需要配置 SSH 密钥并使用 SSH URL。</li> <li><strong>返回值</strong>:<code>after</code> 返回值可以用于验证最新的提交哈希值。</li> </ol> <h3 id="_5"><strong>总结</strong></h3> <p><code>git</code> 模块是一个非常实用的工具,用于在 Ansible Playbook 中自动化从 Git 仓库检出代码。通过灵活使用 <code>repo</code>、<code>dest</code> 和 <code>update</code> 参数,你可以轻松地管理代码部署和文件同步。</p>