项目在 scm_branch
字段中指定从源代码控制中使用的分支、标签或引用。这些由项目详细信息字段中指定的值表示,如所示。
项目可以选择“允许分支覆盖”。选中此选项后,项目管理员可以将分支选择权委托给使用该项目的作业模板(仅需要项目 use_role
)。
源代码树复制行为
每次作业运行都有自己的私有数据目录。此目录包含给定 scm_branch
项目源代码树的副本,该作业正在运行。作业可以自由地更改项目文件夹并在作业运行时使用这些更改。此文件夹是临时的,并在作业运行结束时被清理。
如果选中 **Clean**,AWX 将通过使用各自 Ansible 模块中与 git 或 Subversion 相关的 force
参数,丢弃其本地存储库副本中修改的文件。
项目修订行为
通常,在项目更新期间,默认分支(在项目的 **SCM 分支** 字段中指定)的修订版本将在更新时存储,使用该项目的作业将使用此修订版本。在作业中提供非默认 **SCM 分支**(不是提交哈希或标签),最新的修订版本将在作业开始之前立即从源代码控制远程拉取。此修订版本在作业的 **源代码控制修订版本** 字段及其各自的项目更新中显示。
因此,非默认分支的脱机作业运行是不可能的。为了确保作业正在运行源代码控制中的静态版本,请使用标签或提交哈希。项目更新不会保存所有分支的修订版本,只保存项目默认分支的修订版本。
**SCM 分支** 字段未经验证,因此项目必须更新以确保其有效。如果提供或提示此字段,作业模板的 **剧本** 字段将不会被验证,您必须启动作业模板才能验证预期剧本的存在。
Git Refspec
**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/collections/ansible/builtin/git_module.html。