Documentation

项目在 scm_branch 字段中指定要从源控制使用的分支、标签或引用。这些信息由 Project Details 字段中指定的值表示,如下所示。

_images/projects-create-scm-project-branching-emphasized.png

具有“Allow Branch Override”选项的项目。选中此选项时,项目管理员可以将分支选择委托给使用该项目的作业模板(只需要项目 use_role)。

_images/projects-create-scm-project-branch-override-checked.png

作业模板的管理员可以选中作业模板的 SCM Branch 字段旁的 Prompt on Launch 复选框,进一步将该功能委托给执行作业模板的用户(只需要作业模板 execute_role)。

_images/jt-create-scm-project-scm-branch-prompt-checked.png

源树复制行为

每个作业运行都有自己的专用数据目录。这个目录包含作业运行的给定 scm_branch 的项目源树副本。作业可以自由地更改项目文件夹,即使仍在运行也能利用这些更改。这个文件夹是临时的,会在作业运行结束时被清理。

If Clean is checked, automation controller discards modified files in its local copy of the repository through use of the force parameter in its respective Ansible modules pertaining to git or Subversion.

_images/projects-create-scm-project-clean-checked.png

项目修订行为

通常,在项目更新过程中,默认分支的修订(在项目的 SCM Branch 字段中指定)会在更新时进行存储,并且使用该项目的作业会利用这一修订。若在作业中提供非默认 SCM Branch**(并非提交散列或标签),则会在作业即将开始前从远程源控制拉取最新的修订。这一修订显示在作业及其相应的项目更新的 **Revision 字段中。

_images/jobs-output-branch-override-example.png

因此,非默认分支不支持离线作业运行。若要确保某个作业从源控制运行静态版本,请使用标签或提交散列。项目更新不会保存所有分支的修订,仅保存项目默认分支。

SCM Branch 字段没有经过验证,因此项目必须更新以确保其有效。如果提供或提示了此字段,则不会验证作业模板的 Playbook 字段,您必须启动作业模板以验证所需的 playbook 是否存在。

Git Refspec

SCM Refspec 字段指定更新应该从远程下载的额外引用。例如:

  1. refs/*:refs/remotes/origin/*:获取所有引用,包括远程的 remotes

  2. refs/pull/*:refs/remotes/origin/pull/* (GitHub-specific):获取所有拉取请求的所有引用

  3. refs/pull/62/head:refs/remotes/origin/pull/62/head:获取那一个 GitHub 拉取请求的引用

对于大型项目,在使用此处的第 1 个或 2 个示例时,您应该考虑对性能的影响。

SCM Refspec 参数会影响项目分支的可用性,并且可以允许访问原本不可用的引用。上面的示例允许用户提供来自 SCM Branch 的拉取请求,如果没有 SCM Refspec 字段,这是不可能实现的。

Ansible git 模块默认获取 refs/heads/*。这意味着,如果 SCM Refspec 为空白,项目的分支和标签(以及其中的提交散列)可以用作 SCM 分支。SCM Refspec 字段中指定的值会影响哪些 SCM Branch 字段可用作覆盖。(任何类型的)项目更新会执行额外的 git fetch 命令从远程拉取该 refspec。

例如:您可以通过第 1 个或第 2 个 refspec 示例设置允许分支覆盖的项目 --> 在提示 SCM Branch 的作业模板中使用此项目 --> 客户端可在创建新拉取请求时启动作业模板,提供分支 pull/N/head --> 作业模板将针对提供的 GitGub 拉取请求引用运行。

如需了解更多与 Ansible git 模块相关的更多信息,请参阅 https://docs.ansible.com/ansible/latest/modules/git_module.html