项目在 scm_branch
字段中指定要从源代码控制中使用的分支、标签或引用。这些由项目详细信息字段中指定的值表示,如所示。
项目可以选择“允许分支覆盖”。选中此选项后,项目管理员可以将分支选择权委托给使用该项目的作业模板(仅需要项目 use_role
)。
作业模板的管理员可以通过选中作业模板的 SCM 分支字段旁边的 **启动时提示** 框,将该能力进一步委托给执行作业模板的用户(仅需要作业模板 execute_role
)。
每次作业运行都有其自己的私有数据目录。该目录包含该作业运行的给定 scm_branch
的项目源代码树的副本。作业可以自由地对项目文件夹进行更改,并在作业运行期间使用这些更改。此文件夹是临时的,会在作业运行结束时清理。
如果选中 **清除**,Tower 将通过在与 git、Subversion 和 Mercurial 相关的 Ansible 模块中使用 force
参数,丢弃其本地存储库副本中修改的文件。
通常,在项目更新期间,默认分支的修订(在项目的 **SCM 分支** 字段中指定)会在更新时存储,并且使用该项目的作业将使用此修订。在作业中提供非默认 **SCM 分支**(不是提交哈希或标签),在作业开始之前会立即从源代码控制远程获取最新的修订。此修订在作业的 **修订** 字段及其各自的项目更新中显示。
因此,离线作业运行对于非默认分支是不可能的。为了确保作业运行的是源代码控制中的静态版本,请使用标签或提交哈希。项目更新不会保存所有分支的修订,只保存项目默认分支的修订。
**SCM 分支** 字段不会被验证,因此项目必须更新以确保其有效。如果提供或提示此字段,作业模板的 **剧本** 字段将不会被验证,您必须启动作业模板才能验证预期剧本的存在。
**SCM Refspec** 字段指定更新应从远程下载哪些额外的引用。示例是
refs/*:refs/remotes/origin/*
:获取所有引用,包括远程的远程
refs/pull/*:refs/remotes/origin/pull/*
(特定于 GitHub):获取所有拉取请求的所有引用
refs/pull/62/head:refs/remotes/origin/pull/62/head
:获取该 GitHub 拉取请求的一个引用
对于大型项目,在使用这里第一个或第二个示例时,您应该考虑性能影响。
**SCM Refspec** 参数会影响项目分支的可用性,并且可以允许访问原本无法访问的引用。上面的示例允许用户从 **SCM 分支** 中提供拉取请求,如果没有 **SCM Refspec** 字段,这将是不可能的。
Ansible git 模块默认情况下会获取 refs/heads/*
。这意味着如果 **SCM Refspec** 为空,则项目的 Branches 和 Tags(以及其中的提交哈希)可以用作 SCM 分支。**SCM Refspec** 字段中指定的值会影响哪些 **SCM 分支** 字段可以用作覆盖。任何类型的项目更新都会执行额外的 git fetch
命令,以从远程拉取该 Refspec。
例如:您可以设置一个允许分支覆盖的项目,其中包含第一个或第二个 Refspec 示例 -> 在作业模板中使用此功能,该模板会提示 **SCM 分支** -> 客户端可以在创建新的拉取请求时启动作业模板,提供分支 pull/N/head
-> 作业模板将在提供的 GitGub 拉取请求引用上运行。
有关 Ansible git 模块的更多信息,请参阅 https://docs.ansible.org.cn/ansible/latest/modules/git_module.html.