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