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

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

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

项目修订行为

Typically, during a project update, the revision of the default branch (specified in the SCM Branch field of the project) is stored when updated, and jobs using that project will employ this revision. Providing a non-default SCM Branch (not a commit hash or tag) in a job, the newest revision is pulled from the source control remote immediately before the job starts. This revision is shown in the Source Control Revision field of the job and its respective project update.

_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