25.5. 作业分支覆盖
项目在 scm_branch
字段中指定要从源控制使用的分支、标签或引用。它们由 Type Details 字段中指定的值表示:
在创建或编辑作业时,您可以选择 Allow Branch Override。选中此选项时,项目管理员可以将分支选择委托给使用该项目的作业模板,只需要项目 use_role
。
25.5.1. 源树复制行为
每个作业运行都有自己的私有数据目录。此目录包含作业运行的给定 scm_branch
的项目源树的副本。作业可以自由地更改项目文件夹,并在仍在运行时使用这些更改。此文件夹是临时的,在作业运行结束时被删除。
如果您检查 Clean 选项,则在自动化控制器的本地副本中删除修改后的文件。这可以通过在与 git 或 Subversion 相关的相应 Ansible 模块中使用 force 参数来完成。
其他资源
有关更多信息,请参阅 Ansible 文档中的 Parameters 部分。
25.5.2. 项目修订行为
在项目更新过程中,默认分支的修订版本(在项目的 SCM 分支字段中指定 )会在更新时存储。如果在作业中提供非默认 SCM 分支 (而不是提交散列或标签),则在作业启动前会立即从源控制远程拉取最新的修订版本。此修订版本显示在作业的 Source Control Revision 字段中,及其项目更新。
因此,非默认分支无法离线作业运行。为确保作业从源控制运行静态版本,请使用标签或提交哈希。项目更新不会保存所有分支,而只有项目默认分支。
SCM 分支 字段未验证,因此项目必须更新以确保其有效。如果提供或提示了此字段,则不会验证作业模板的 Playbook 字段,您必须启动作业模板以验证预期的 playbook 是否存在。
25.5.3. Git Refspec
SCM Refspec 字段指定更新应该从远程下载的额外引用。示例包括以下内容:
-
refs/:refs/remotes/origin/
:这将获取所有引用,包括远程的远程 -
refs/pull/:refs/remotes/origin/pull/
(GitHub-specific):这将获取所有拉取请求的所有 refs -
refs/pull/62/head:refs/remotes/origin/pull/62/head
:这会获取一个 GitHub 拉取请求的 ref
对于大型项目,在使用第一个或第二个示例时请考虑性能影响。
SCM Refspec 参数会影响项目分支的可用性,并可启用对不可用的引用的访问。前面的示例允许您提供 SCM 分支 的拉取请求,在没有 SCM Refspec 字段的情况下无法实现。
默认情况下,Ansible git 模块获取 refs/heads/
。这意味着,如果 SCM Refspec 为空,项目的分支、标签和提交散列可用作 SCM 分支。SCM Refspec 字段中指定的值会影响哪些 SCM 分支 字段可用作覆盖。项目更新(任何类型的)执行额外的 git fetch
命令来从远程拉取该 refspec。
Example
您可以设置使用第一个或第二个 refspec 示例启用分支覆盖的项目。在提示 SCM 分支 的作业模板中使用此选项。然后,客户端可以在创建新拉取请求时启动作业模板,提供分支 pull/N/head
,并且作业模板可以根据提供的 GitHub 拉取请求引用运行。
其他资源
有关更多信息,请参阅 Ansible git 模块。