版本控制材料
介绍
构建通常会使用存储在版本控制系统(VCS/SCM)中的源代码。GoCD 内置支持 Git、Mercurial、SVN、TFS 和 Perforce。用户可以使用 SCM 插件与其他版本控制系统集成。
版本控制系统和材料
与内置的 VCS/SCM 材料不同,插件型 SCM 的材料定义是不包含在管道定义中。它们是全局实体。许多管道可能有指向同一 SCM 的材料定义。当 SCM 中有新修订时,相关的管道将被调度。
SCM 定义
一个 SCM 材料插件允许管道组管理员向 GoCD 提供对应 SCM 类型的详细信息。
注意:
- SCM 名称不由 SCM 材料插件使用 - 它由 Go 用于构造材料名称。两个 SCM 不能具有相同的名称。
- 使用检查连接按钮以确保 Go 可以与此 SCM 一起工作。
- 在“保存”时,插件验证用户输入。
注意:目前要将现有的 SCM 材料关联到管道上,需要编辑 Config XML。
SCM 材料唯一性(指纹):
每个 SCM 材料插件将其属性的一个子集定义为SCM 指纹。例如,SCMurl
和branch
可能包含在内,username
和password
可能被排除在外。SCM 名称是不SCM 指纹的一部分。不允许多个 SCM 具有相同的 SCM 指纹。尝试这样做会导致如下错误消息:
The following error(s) need to be resolved in order to perform this action:<br>
Cannot save SCM, found duplicate SCMs. [SCM Name: 'apple'], [SCM Name: 'orange']
示例XML配置
这是一个 SCM 的 XML 视图。请注意 SCM 和管道材料之间的关系。为了适应不同的插件,SCM 配置使用了宽松类型的属性、键和值标签。如果你选择通过直接编辑 XML 配置,请注意不需要提供 SCM ID,GoCD 服务器将自动生成它们。然而,并非所有在 UI 配置时执行的验证都会在 XML 编辑配置时生效 —— 后续失败将在浏览器框架右下角的服务器健康消息面板中显示。
<scms>
<scm id="3bfc282e-43a6-4795-ba9c-6c50665220dd" name="git-repo">
<pluginConfiguration id="jgit" version="1.0" />
<configuration>
<property>
<key>url</key>
<value>https://github.com/gocd/gocd.git</value>
</property>
</configuration>
</scm>
</scms>
...
<pipelines group="sample-group">
<pipeline name="upstream-pipeline">
<materials>
<scm ref="3bfc282e-43a6-4795-ba9c-6c50665220dd" dest="dest">
<filter>
<ignore pattern="*.log" />
</filter>
</scm>
</materials>
...
权限
由于 SCM 是全局实体,更改 SCM 定义将反映在所有使用它的管道上 —— 甚至包括与编辑者不属于同一管道组的管道。为了使“编辑”、“删除”和“添加”新材料的决策更容易,我们列出了所有使用该 SCM 的管道。
注意:更改 SCM 定义会导致所有依赖的管道被重新调度。
轮询
即使没有管道使用某个 SCM,GoCD 每分钟仍会轮询新修订。这可以通过在 config xml 中将autoUpdate
设置为 false 来关闭(仅限 GoCD 管理员)。autoUpdate
默认情况下开启。当找到某个 SCM 的新修订时,它所对应的管道将被调度(假设自动调度管道是开启的)。另见API 调度.
过滤器:有时你可能不希望 GoCD 在每次提交时触发管道。例如,如果是“文档”更改,你可能不想“构建”。可以在管道级别设置一个过滤器,要求 GoCD 如果提交只包含匹配某种模式的文件,则跳过管道调度。
SCM 信息显示
SCM 材料插件期望从 SCM 元数据中(如果可用)获取以下信息
- SCM 修订版
- 提交时间
- 提交者姓名(如果有)
- 提交注释
- 提交中的文件及其操作(新增/修改/删除)
在构建 SCM 时,建议尽量包含上述尽可能多的信息,以便 GoCD 可以如下来显示。
Agent 上的 SCM 检出
VCS/SCM 插件默认会在作业开始前将代码检出到代理上的destination
目录中。