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 的项目源树副本。作业可以自由地更改项目文件夹,即使仍在运行也能利用这些更改。这个文件夹是临时的,会在作业运行结束时被清理。

如果选中 Clean,Tower 会通过在与 gitSubversionMercurial 相关的相应 Ansible 模块中使用 force 参数,将存储库的本地副本中的修改文件丢弃。

_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.