GoCD 配置参考
<cruise> <server> <siteUrls> <siteUrl/> <secureSiteUrl/> </siteUrls> <security> <ldap> <bases> <base/> </bases> </ldap> <passwordFile/> <authConfigs> <authConfig> <property> <key/> <value/> </property> </authConfig> </authConfigs> <roles> <role> <policy> <allow/> <deny/> </policy> <users/> <user/> </role> <pluginRole/> <policy> <allow/> <deny/> </policy> <property> <key/> <value/> </property> </pluginRole> </roles> <admins> <role/> <user/> </admins> </security> <mailhost/> <backup/> <artifacts> <artifactsDir/> <purgeSettings> <purgeStartDiskSpace/> <purgeUptoDiskSpace/> </purgeSettings/> </artifacts> </server> <elastic> <agentProfiles> <agentProfile> <property> <key/> <value/> </property> </agentProfile> </agentProfiles> <clusterProfiles> <clusterProfile/> </clusterProfiles> </elastic> <repositories> <repository> <pluginConfiguration/> <configuration> <property> <key/> <value/> </property> </configuration> <packages> <package> <configuration> <property> <key/> <value/> </property> </configuration> </package> </packages> </repository> </repositories> <config-repos> <config-repo> <svn /> <hg /> <p4 /> <git /> <tfs /> <scm /> <configuration> <property> <key/> <value/> </property> </configuration> <rules> <allow> </allow> <deny> </deny> </rules> </config-repo> </config-repos> <artifactStores> <artifactStore> <property> <key/> <value/> </property> </artifactStore> </artifactStores> <secretConfigs> <secretConfig> <description> </description> <configuration> <property> <key/> <value/> </property> </configuration> <rules> <allow> </allow> <deny> </deny> </rules> </secretConfig> </secretConfigs> <pipelines> <authorization> <admins> <user/> <role/> </admins> <view> <user/> <role/> </view> <operate> <user/> <role/> </operate> </authorization> <pipeline> <params> <param/> </params> <trackingtool/> <timer/> <environmentvariables> <variable> <value/> </variable> </environmentvariables> <materials> <svn> <filter> <ignore/> </filter> </svn> <hg> <filter> <ignore/> </filter> </hg> <p4> <view/> <filter> <ignore/> </filter> </p4> <git> <filter> <ignore/> </filter> </git> <tfs> <filter> <ignore/> </filter> </tfs> <package/> <pipeline/> </materials> <stage> <approval> <authorization> <role/> <user/> </authorization> </approval> <environmentvariables> <variable> <value/> </variable> </environmentvariables> <jobs> <job> <environmentvariables> <variable> <value/> </variable> </environmentvariables> <resources> <resource/> </resources> <tasks> <fetchartifact> <runif/> <oncancel/> </fetchartifact> <ant> <runif/> <oncancel/> </ant> <nant> <runif/> <oncancel/> </nant> <rake> <runif/> <oncancel/> </rake> <exec> <arg/> <runif/> <oncancel/> </exec> </tasks> <artifacts> <artifact/> </artifacts> <tabs> <tab/> </tabs> </job> </jobs> </stage> </pipeline> </pipelines> <templates> <pipeline> <stage> ... </stage> </pipeline> </templates> <environments> <environment> <environmentvariables> <variable> <value/> </variable> </environmentvariables> <pipelines> <pipeline/> </pipelines> </environment> </environments> </cruise>
配置参考
<巡检>
The <cruise>
元素是配置的根元素。
<服务器>
The <server>
元素可用于定义Go服务器的信息和属性。
属性
属性 | 必需 | 描述 |
---|---|---|
jobTimeout | 否 | 此项将用作挂起任务的默认超时值。如果作业在“jobTimeout”分钟内未生成任何控制台输出,则认为该作业已挂起。如果没有指定此属性,作业将永远不会超时。 |
serverId | 是(自动生成) | 此值唯一标识一个Go服务器安装实例。它可能被需要在不同的Go服务器安装中具有唯一名称/标识符的功能所使用。对于新服务器,无需指定此属性。如果没有给出值,服务器会自动生成一个随机UUID并将其作为serverId。对于现有服务器,此值不应更改。管理员在将配置复制到其他安装实例之前应清除此属性。 |
agentAutoRegisterKey | 否 | 此处指定的密钥由代理用于自动注册. |
示例
<cruise>
<server jobTimeout='30'>
</server>
</cruise>
<站点URLs>
The <siteUrls>
元素用于定义<siteUrl>
和<secureSiteUrl>
.
注意事项
- 如果两者都
<siteUrl>
和<secureSiteUrl>
未定义,GoCD URL将使用默认域,在大多数情况下将是http://your-go-server:8153
- 如果只定义了
<siteUrl>
并且不是HTTPS,GoCD URL将由<siteUrl>
条目组成。在这种情况下,GoCD的安全页面将无法导航。 - 如果只定义了
<siteUrl>
并且为HTTPS,GoCD URL将从<siteUrl>
条目中生成,并且所有页面都将为HTTPS。 - 如果只定义了
<secureSiteUrl>
,则非HTTPS页面的GoCD URL将使用默认域,而HTTPS页面将基于<secureSiteUrl>
条目生成。
示例
<siteUrls>
<siteUrl>http://siteUrl.com</siteUrl>
<secureSiteUrl>https://secureSiteUrl.com</secureSiteUrl>
</siteUrls>
<站点URL>
The <siteUrl>
元素由GoCD服务器用于生成电子邮件、订阅源等链接,这些地方我们不能使用相对URL。例如,如果您在GoCD前设置了反向代理,此值应该为代理的基本URL,而不是内部GoCD地址。因此,有必要指定此配置。Format: [protocol]://[host]:[port]
。如果GoCD使用非标准端口,请定义[端口]。[协议]可以是HTTP或HTTPS。
示例
<siteUrls>
<siteUrl>http://siteUrl.com</siteUrl>
...
</siteUrls>
<安全站点URL>
The <secureSiteUrl>
元素用于指定基本HTTPS URL的值。GoCD中的某些功能需要HTTPS(SSL)端点。如果您希望您的主要站点URL为HTTP,但仍需要支持SSL的功能的HTTPS端点,您可以使用此元素。格式:https://[host]:[port]
。如果GoCD使用非标准端口,请定义[端口]。
示例
<siteUrls>
...
<secureSiteUrl>https://secureSiteUrl.com</secureSiteUrl>
</siteUrls>
<安全>
The <security>
元素可用于启用身份验证。如果未定义该元素,任何人都可以使用Go而无需登录。目前,我们支持通过授权插件端点启用身份验证。通过捆绑插件可直接支持LDAP和简单密码文件身份验证。如果您想使用多种认证机制,也可以实现。内置的LDAP和密码文件标签在配置中已被弃用。
示例
<server artifactsdir="/var/lib/go/big-artifacts-folder">
<security>
<authConfigs>
<authConfig id="profile-id" pluginId="cd.go.authentication.ldap">
<property>
<key>Url</key>
<value>ldap://xxx.yourcompany.com</value>
</property>
<property>
<key>ManagerDN</key>
<value>cn=Acitivity Directory LDap User,ou=InformationSystems,ou=SharedAccounts,ou=Principal,dc=xxxx,dc=yyyy,dc=com</value>
</property>
<property>
<key>Password</key>
<value>secret</value>
</property>
<property>
<key>SearchBases</key>
<value>ou=Employees,ou=Enterprise,ou=Principal,dc=xxxx,dc=yyyy,dc=com</value>
</property>
<property>
<key>UserLoginFilter</key>
<value>(sAMAccountName={0})</value>
</property>
<property>
<key>UserSearchFilter</key>
<value>(sAMAccountName={0})</value>
</property>
<property>
<key>DisplayNameAttribute</key>
<value>displayName</value>
</property>
<property>
<key>EmailAttribute</key>
<value>mail</value>
</property>
</authConfig>
</authConfigs>
</security>
</server>
<邮件主机>
The <mailhost>
元素用于配置邮件通知。邮件通知需要security已启用。
属性 | 必需 | 描述 |
---|---|---|
主机名 | 是 | Go将使用的SMTP邮件服务器以发送电子邮件。例如,hostname=“mailhost.yourcompany.com” |
端口 | 是 | 要使用的邮件端口。通常这将是默认邮件端口25。 |
用户名 | 是 | Go应使用的登录邮件主机的用户名。 |
密码 | 是 | 访问邮件主机的密码。 |
tls | 否 | 是否使用TLS(传输层安全性)。默认值为‘false’。使用‘true’来启用TLS安全性。 |
发件人 | 是 | Go将尝试将此电子邮件地址设置为它发送邮件的“发件人”地址。请注意,您使用的SMTP服务器可能不会接受此设置。例如,from=“go-admin@yourcompany.com”。 |
管理员 | 是 | Go管理员的电子邮件地址。Go将向此电子邮件地址发送诊断消息。例如,如果磁盘空间不足,Go将发送警告消息。 |
示例
<mailhost hostname="mailhost.yourcompany.com" port="25" username="go-user" password="crs123" tls="false" from="go@yourcompany.com" admin="goadministrator@yourcompany.com" />
<备份>
The <backup>
元素用于配置备份。
属性 | 必需 | 描述 |
---|---|---|
时间表 | 否 | 进行备份的类cron规范。 |
postBackupScript | 否 | 在备份完成后(无论成功与否)将在GoCD服务器上调用的脚本。参见cron备份关于此脚本的详细信息。 |
emailOnSuccess | 否 | 布尔值,表示是否应在成功备份时发送电子邮件。要求mailhost配置已设置。 |
emailOnFailure | 否 | 布尔值,表示是否应在备份失败时发送电子邮件。要求mailhost配置已设置。 |
示例
例如:每周工作日晚上10点进行一次备份,并在备份完成后调用/usr/local/bin/upload-to-s3
脚本。
<server>
<backup schedule="0 0 22 ? * MON-FRI" postBackupScript="/usr/local/bin/upload-to-s3" emailOnSuccess="false" emailOnFailure="true"/>
...
</server>
Go 内部使用Quartz调度程序。为了方便起见,我们在此处复制了Quartz cron 文档:
格式
cron 表达式是一串由空格分隔的6个或7个字段组成的字符串。字段可以包含允许的值以及该字段允许的特殊字符的各种组合。字段如下:
字段名称 | 是否必须? | 允许的值 | 允许的特殊字符 |
---|---|---|---|
秒 | 是 | 0-59 | , - * / |
分钟 | 是 | 0-59 | , - * / |
小时 | 是 | 0-23 | , - * / |
日期 | 是 | 1-31 | , - * ? / L W \ |
月份 | 是 | 1-12 或 JAN-DEC | , - * / |
星期几 | 是 | 1-7 或 SUN-SAT | , - * ? / L # |
年份 | 否 | 空、1970-2099 | , - * / |
因此,cron 表达式可以像这样简单:* * * * * ?
或者更复杂,如这样:0 15 10 ? * 6L 2002-2005
特殊字符
-
*
(“所有值”) - 用于选择字段内的所有值。例如,“*”在分钟字段中表示“每分钟”. -
?
(“无特定值”) - 当你需要在其中一个两个字段中指定某些东西,但不在另一个字段中时有用。例如,如果我希望我的触发器在每月某一天(比如说第10天)触发,而不关心那天是星期几,我就会在日期字段中填入“10”,在星期字段中填入“?”。参见下面的例子以澄清。 -
-
- 用于指定范围。例如,“10-12”在小时字段中意味着“10、11和12点”. -
,
- 用于指定附加值。例如,“MON,WED,FRI”在星期几字段中意味着“周一、周三和周五”. -
/
- 用于指定增量。例如,“0/15”在秒字段中意味着“0、15、30和45秒”。而“5/15”在秒字段中意味着“5、20、35和50秒”。你还可以在‘’字符后指定‘/’ - 在这种情况下,‘’等同于在‘/’前放置‘0’。‘1/3’在日期字段中意味着“从每月的第一天开始每隔三天触发”. -
L
(“最后”) - 在两个字段中都有不同的含义。例如,“L”在日期字段中的值意味着“该月的最后一天”- 对于一月来说是第31天,对于非闰年的二月来说则是第28天。如果单独在星期字段中使用,则仅表示“7”或“SAT”。但若在星期字段中跟在另一个值之后,则意味着“该月的最后一个xxx天”- 例如“6L”意味着“该月的最后一个星期五”。使用‘L’选项时,不要指定列表或值范围,因为会产生混淆的结果。 -
W
(“工作日”) - 用于指定最接近给定日期的工作日(周一至周五)。例如,如果将“15W”指定为日期字段的值,则其含义为:“离每月15日最近的工作日”。因此,如果15日是周六,则触发器将在周五的14日触发。如果15日是周日,则触发器将在周一的16日触发。如果15日是周二,则触发器将在周二的15日触发。但是,如果你将“1W”指定为日期字段的值,而1日是周六,则触发器将在周一的3日触发,因为它不会跨越一个月的边界。‘W’字符只能在日期是一个单日而不是范围或列表时指定。‘L’和‘W’字符也可以在日期字段中结合使用为‘LW’,这转换为“每月的最后一个工作日”. -
#
- 用于指定“第n个”XXX月中的某天。例如,星期字段中“6#3”的值意味着“本月的第三个星期五”(第6天 = 星期五,且“#3” = 本月的第三个)。其他例子:“2#1” = 本月的第一个星期一,“4#5” = 本月的第五个星期三。请注意,如果你指定“#5”,而该月没有第五个给定的星期几,则当月不会触发任务。合法字符以及月份和星期名称不区分大小写。MON
等同于mon
.
示例
以下是一些完整的示例:
表达式 | 含义 |
---|---|
0 0 12 * * ? |
每天中午12点触发 |
0 15 10 ? * * |
每天上午10:15触发 |
0 15 10 * * ? |
每天上午10:15触发 |
0 15 10 * * ? * |
每天上午10:15触发 |
0 15 10 * * ? 2005 |
在2005年期间每天上午10:15触发 |
0 * 14 * * ? |
每天下午2点到2:59分之间每分钟触发一次 |
0 0/5 14 * * ? |
每天下午2点到2:55分之间每隔5分钟触发一次 |
0 0/5 14,18 * * ? |
每天下午2点到2:55分之间每隔5分钟触发一次,同时每天下午6点到6:55分之间每隔5分钟触发一次 |
0 0-5 14 * * ? |
每天下午2点到2:05分之间每分钟触发一次 |
0 10,44 14 ? 3 WED |
每年三月每个星期三下午2:10和2:44触发 |
0 15 10 ? * MON-FRI |
每周一、周二、周三、周四和周五上午10:15触发 |
0 15 10 15 * ? |
每月15日上午10:15触发 |
0 15 10 L * ? |
每月最后一天上午10:15触发 |
0 15 10 ? * 6L |
每月最后一个星期五上午10:15触发 |
0 15 10 ? * 6L |
每月最后一个星期五上午10:15触发 |
0 15 10 ? * 6L 2002-2005 |
在2002年至2005年期间每个月的最后一个星期五上午10:15触发 |
0 15 10 ? * 6#3 |
每月第三个星期五上午10:15触发 |
0 0 12 1/5 * ? |
每月第一天开始每5天中午12点触发一次 |
0 11 11 11 11 ? |
每年11月11日上午11:11触发 |
请注意在“星期”和“日期”字段中‘?’和‘*’的影响!
注意事项
- 同时指定“星期”和“日期”值的支持尚不完整(目前必须在一个字段中使用‘?’字符)。
- 在午夜和凌晨1点之间设置触发时间时需谨慎 - “夏令时”可能会根据时间是回退还是跳前导致任务被跳过或重复。
<构件>
The <artifacts>
元素可用于定义与构件相关的信息。在此,可以使用<artifactsDir>
定义构件目录,并且可以使用<purgeSettings>
示例
<artifacts>
<artifactsDir>artifacts</artifactsDir>
<purgeSettings>
<purgeStartDiskSpace>30.0</purgeStartDiskSpace>
<purgeUptoDiskSpace>60.0</purgeUptoDiskSpace>
</purgeSettings>
</artifacts>
<构件目录>
The <artifactsDir>
元素用于定义 GoCD 存储其信息的目录,包括作业发布的制品。默认值是安装 GoCD 服务器的文件夹中的“artifacts”。您可以使用绝对路径或相对路径,后者将以服务器安装目录为根目录。
注意事项:
如果您指定了该属性,请检查 GoCD 是否有权访问该目录。此外,应注意在 Go 服务器运行时更改此值,直到 GoCD 服务器重新启动后才会生效。
示例
<artifacts>
<artifactsDir>artifacts</artifactsDir>
...
</artifacts>
<清理设置>
The <purgeSettings>
元素用于配置 GoCD,在服务器上的可用磁盘空间较低时自动删除旧的制品。
The <purgeSettings>
可以通过<purgeStartDiskSpace>
和<purgeUptoDiskSpace>
配置。如果服务器上的可用磁盘空间低于<purgeStartDiskSpace>
GB,GoCD 将清除旧的制品,直到可用磁盘空间大于<purgeUptoDiskSpace>
GB。
注意事项
-
如果未定义
purgeStartDiskSpace
和purgeUptoDiskSpace
,则制品永远不会被删除。 -
如果定义了
purgeStartDiskSpace
,则应该定义purgeUptoDiskSpace
。
示例
<purgeSettings>
<purgeStartDiskSpace>30.0</purgeStartDiskSpace>
<purgeUptoDiskSpace>60.0</purgeUptoDiskSpace>
</purgeSettings>
<清理起始磁盘空间>
The <purgeStartDiskSpace>
元素用于定义可用磁盘空间的限制。如果实际可用磁盘空间小于限制,GoCD 将开始清除制品。
注意事项
- 它应该小于
<purgeUptoDiskSpace>
.
示例
<purgeSettings>
<purgeStartDiskSpace>30.0</purgeStartDiskSpace>
...
</purgeSettings>
<清理至磁盘空间>
The <purgeUptoDiskSpace>
元素用于定义可用磁盘空间的限制。当可用磁盘空间达到指定限制时,GoCD 将停止清除制品。
注意事项
- 它应该大于
<purgeStartDiskSpace>
.
示例
<purgeSettings>
...
<purgeUptoDiskSpace>30.0</purgeUptoDiskSpace>
</purgeSettings>
<轻量目录访问协议> [已弃用]
The <ldap>
元素用于指定 LDAP 服务器。用户可以使用来自此 LDAP 服务器的用户名和密码进行访问。
属性
属性 | 必需 | 描述 |
---|---|---|
uri | 是 | LDAP 服务器的 URI。例如,uri=“ldap://ldap.yourcompany.com” |
managerDn | 是 | 例如,managerDn=“cn=Active Directory Ldap 用户,ou=信息系统,ou=共享账户,ou=主要,dc=xxxxx,dc=yyyy,dc=com” |
managerPassword | 是 | Go 将使用此密码连接到 LDAP 服务器。 |
searchFilter | 否 | 例如,searchFilter="(sAMAccountName={0})" |
示例
<security>
<ldap uri="ldap://xxx.yourcompany.com"
managerDn="cn=Acitivity Directory LDap User,ou=InformationSystems,ou=SharedAccounts,ou=Principal,dc=xxxx,dc=yyyy,dc=com"
managerPassword="password"
searchFilter="(sAMAccountName={0})" />
<bases>
<base value="ou=Employees,ou=Enterprise,ou=Principal,dc=xxxx,dc=yyyy,dc=com"/>
</bases>
<passwordFile path="/home/go/admins.properties"/>
<roles>
<role name="go-admin">
<user>Jez</user>
<user>lqiao</user>
</role>
</roles>
<admins>
<role>go-admin</role>
<user>lqiao</user>
</admins>
</security>
<基础>
The <bases>
元素用于指定搜索基础列表(搜索基础对象的区分名称),定义 LDAP 搜索开始的位置。
<基>
The <base>
元素用于指定一个搜索基础(搜索基础对象的区分名称),定义 LDAP 搜索开始的位置。
属性 | 必需 | 描述 |
---|---|---|
value | 是 | 搜索基础。 |
<ldap uri="ldap://xxx.yourcompany.com"
managerDn="cn=Acitivity Directory LDap User,ou=InformationSystems,ou=SharedAccounts,ou=Principal,dc=xxxx,dc=yyyy,dc=com"
managerPassword="password"
searchFilter="(sAMAccountName={0})" />
<bases>
<base value="ou=Employees,ou=Enterprise,ou=Principal,dc=xxxx,dc=yyyy,dc=com"/>
</bases>
</ldap>
<密码文件> [已弃用]
The <passwordFile>
元素用于指定包含一组用户名和密码对的文件。此文件中用户名和密码的格式为 ${username}=${已通过 SHA1 加密的密码},每个用户一行。
属性 | 必需 | 描述 |
---|---|---|
路径 | 是 | 密码文件的绝对路径。 |
示例
假设密码文件是admins.properties,它位于/home/go。您想创建两个管理员用户:
- 一个用户名是Jez,通过 SHA1 加密的密码是ThmbShxAtJepX80c2JY1FzOEmUk=
- 另一个是lqiao,通过 SHA1 加密的密码是TfkgShslgJepX80c2JY1trwEskT=
配置可能如下所示:
<security>
<passwordFile path="/home/go/admins.properties"/>
</security>
用户名和密码可以在 admins.properties 中设置如下:
Jez=ThmbShxAtJepX80c2JY1FzOEmUk
lqiao=TfkgShslgJepX80c2JY1trwEskT
<认证配置>
使用<authConfigs>
元素,GoCD 管理员可以提供一个或多个授权配置,以连接到授权服务器。
示例
<authConfigs>
<authConfig id="file-auth-config" pluginId="cd.go.authentication.passwordfile">
...
</authConfig>
<authConfig id="ldap" pluginId="cd.go.authentication.ldap">
...
</authConfig>
</authConfigs>
<认证配置>
The <authConfig>
指定传递给作业及其任务的配置授权插件要使用的配置。这通常允许管理员配置授权插件的连接设置,可能包括 URL 和凭据等配置。
一个authConfig
应该具有唯一性id
属性,并且应该通过pluginId
属性与插件关联。
属性
属性 | 必需 | 描述 |
---|---|---|
ID | 是 | authConfig 的唯一 ID。 |
pluginId | 是 | 授权插件的 ID。 |
allowOnlyKnownUsersToLogin | 否 | 仅允许那些由管理员显式添加的用户登录。如果为 false,则任何尝试登录的新用户只要存在于您的密码文件或 LDAP 中,就会自动创建为 Go 用户。(默认=false) |
参考插件文档了解要配置的property
键。
示例:
<authConfig id="file-auth-config" pluginId="cd.go.authentication.passwordfile" allowOnlyKnownUsersToLogin="false">
<property>
<key>PasswordFilePath</key>
<value>/etc/go/password.properties</value>
</property>
</authConfig>
<角色>
The <roles>
元素是用户定义的角色容器。如果没有<role>
.
示例
<security>
...
<roles>
<role name="go-admin">
<user>Jez</user>
<user>lqiao</user>
</role>
</roles>
</security>
<角色>
The <role>
元素用于定义执行类似任务的一组用户。可选地,<role>
元素可以指定策略,定义当前角色中定义用户的权限模型。在<role>
元素中,通过添加子标签<users>
添加用户,通过添加子标签<policy>
.
注意事项:
- 如果您要定义角色,必须定义身份验证方法,无论是
<ldap>
或<passwordFile>
. - 这些角色与 LDAP 中定义的角色无关;它们仅在 Go 内部工作。例如,您可以将角色分配给手动批准在某个阶段中,以便只有该角色中的用户可以批准该阶段运行。
属性 | 必需 | 描述 |
---|---|---|
名称 | 是 | 角色名称。 |
示例
两个用户将在角色‘environment-operators’中,他们是Jez和lqiao可以管理所有环境,除了名称匹配prod_*
名称。
<roles>
<role name="environment-operators">
<policy>
<deny action="administer" type="environment">prod_*</deny>
<allow action="administer" type="environment">*</allow>
</policy>
<users>
<user>Jez</user>
<user>lqiao</user>
</users>
</role>
</roles>
<用户>
角色中的用户列表。
一个<user>
元素定义角色中的特定用户。您可以根据需要添加任意多的用户。
<用户>
一个<user>
元素定义角色中的特定用户。您可以根据需要添加任意多的用户。
注意事项:
示例
两个用户将属于角色“pipeline-operators”,他们是Jez和lqiao.
<role name="pipeline-operators">
<users>
<user>Jez</user>
<user>lqiao</user>
</users>
</role>
<策略>
The <policy>
元素定义了属于某个角色的用户的权限。
在一个<policy>
元素中,通过添加子标签允许权限可以被添加。<allow>
和拒绝权限可以通过添加子标签来添加。<deny>
.
示例
以下策略将授予用户权限以执行操作administer
对所有环境,除了匹配的环境prod_*
名称。
<policy>
<deny action="administer" type="environment">prod_*</deny>
<allow action="administer" type="environment">*</allow>
</policy>
<允许>
The <allow>
元素下policy
授予对定义的GoCD实体基于类型、操作和资源的权限。
的值allow
元素定义了应应用策略的资源。
注意事项:
属性 | 必需 | 描述 |
---|---|---|
类型 | 是 | 授予权限的GoCD实体类型。支持的类型值为environment 和config_repo . |
操作 | 是 | 可以在GoCD实体上执行的操作。支持的操作值为administer 和view . |
示例
以下策略将授予用户权限以执行操作administer
对所有匹配的环境prod_*
名称。
<allow action="administer" type="environment">prod_*</allow>
管理员可以使用*
提供对所有类型和操作的允许访问。
示例
<allow action="*" type="*">*</allow>
<拒绝>
The <deny>
元素下policy
拒绝对定义的GoCD实体基于类型、操作和资源的访问。
的值deny
元素定义了应应用策略的资源。
注意事项:
属性 | 必需 | 描述 |
---|---|---|
类型 | 是 | 拒绝访问的GoCD实体类型。支持的类型值为environment 和config_repo . |
操作 | 是 | 不可以在GoCD实体上执行的操作。支持的动作值为administer 和view . |
示例
以下策略将拒绝administer
对所有匹配的环境的访问prod_*
名称。
<deny action="administer" type="environment">prod_*</deny>
管理员可以使用*
拒绝所有类型和操作的所有访问。
示例
<deny action="*" type="*">*</deny>
<插件角色>
The <pluginRole>
元素用于在GoCD中定义角色。不像role
包含一个列表users
, pluginRole
提供配置以将GoCD角色映射到由授权插件管理的外部授权服务器中定义的角色。例如,pluginRole可用于定义LDAP组与GoCD角色之间的映射。
可选地,<pluginRole>
元素可以指定策略定义当前角色用户的权限模型。
注意事项:
属性 | 必需 | 描述 |
---|---|---|
名称 | 是 | 角色名称。 |
authConfigId | 是 | 授权配置的ID. |
参考插件文档了解要配置的property
关键字。pluginRole
.
示例
<roles>
<pluginRole name="SuperAdmin" authConfigId="auth_config_id">
<policy>
<deny action="administer" type="environment">prod_*</deny>
<allow action="administer" type="environment">*</allow>
</policy>
<property>
<key>MemberOfAttribute</key>
<value>memberOf</value>
</property>
<property>
<key>MatchingGroups</key>
<value>CN=Dev,OU=Groups,DC=some,DC=enterprise,DC=com</value>
</property>
</pluginRole>
</roles>
<管理员>
The <admins>
元素指定哪些用户是管理员。只有管理员可以打开管理选项卡以维护Go配置。管理员可以在Go中执行所有功能(包括触发管道、部署到环境中等)。
注意事项:
示例
<security>
...
<admins>
<role>go-admin</role>
<user>lqiao</user>
</admins>
</security>
<角色>
一个<role>
元素在<admins>
中用于指定一个组作为管理员。你可以根据需要添加尽可能多的组。
注意事项:
- 角色必须引用
<roles>
.
示例
属于角色“go-admin”的用户将是管理员。
<admins>
<role>go-admin</role>
<user>lqiao</user>
</admins>
<用户>
注意事项:
示例
两个用户将成为管理员,他们是Jez和lqiao.
<admins>
<user>Jez</user>
<user>lqiao</user>
</admins>
<角色>
注意事项:
- 角色必须在
<roles>
.
示例
<view>
<user>lqiao<user>
<role>_readonly_member<role>
</view>
<弹性>
The <elastic>
元素用于提供弹性代理的配置。
属性 | 必需 | 描述 |
---|---|---|
jobStarvationTimeout | 否 | 超时分钟数。如果在指定的时间内未分配需要弹性代理的任务,弹性代理插件将被通知创建一个新的弹性代理。 |
示例
<elastic jobStarvationTimeout="10">
<agentProfiles>
<agentProfile id="aws.small" pluginId="aws">
...
</agentProfile>
</agentProfiles>
</elastic>
<代理配置文件>
<agentProfiles>
元素指定用于配置弹性代理的配置文件。
可以有零个或多个配置文件。
示例
<agentProfiles>
<agentProfile id="aws.small" pluginId="aws" clusterProfileId="cluster-profile-id" >
...
</agentProfile>
</agentProfiles>
<代理配置文件>
<agentProfile>
指定传递给作业及其任务的配置。一个配置文件应该有一个唯一的id
属性,应通过clusterProfileId
属性与集群关联,并通过pluginId
属性与插件关联。
属性
属性 | 必需 | 描述 |
---|---|---|
ID | 是 | 唯一的配置文件ID。 |
pluginId | 是 | 弹性代理插件的ID。 |
clusterProfileId | 是 | 集群配置文件的ID。 |
示例:
<agentProfile id="ec2.small-us-east" pluginId="com.example.ec2" clusterProfileId="cluster-profile-id">
<property>
<key>ami-id</key>
<value>ami-6ac7408f</value>
</property>
<property>
<key>region</key>
<value>us-east-1</value>
</property>
</agentProfile>
<集群配置文件>
<clusterProfiles>
元素指定用于配置集群的配置文件。
可以有零个或多个集群配置文件。
示例
<clusterProfiles>
<clusterProfile id="cluster.small" pluginId="aws">
...
</clusterProfile>
</clusterProfiles>
<集群配置文件>
<clusterProfile>
指定传递给作业及其任务的配置。一个集群配置文件应该有一个唯一的id
属性,并且应该通过pluginId
属性与插件关联。
属性
属性 | 必需 | 描述 |
---|---|---|
ID | 是 | 集群配置文件的唯一ID。 |
pluginId | 是 | 弹性代理插件的ID。 |
示例:
<clusterProfile id="cluster-us-east" pluginId="com.example.ec2">
<property>
<key>GoServerUrl</key>
<value>https://your-server-host/go</value>
</property>
<property>
<key>ClusterName</key>
<value>Cluster</value>
</property>
</profile>
<配置仓库>
The <config-repos>
元素是一个包含多个的容器<config-repo>
.
示例
<cruise>
...
<config-repos>
<config-repo pluginId="json.config.plugin" id="gocd-json-config-example">
<git url="https://github.com/tomzo/gocd-json-config-example.git" />
</config-repo>
<config-repo pluginId="yaml.config.plugin" id="gocd-yaml-config-example">
<git url="https://github.com/tomzo/gocd-yaml-config-example.git" />
<configuration>
<property>
<key>file_pattern</key>
<value>**/*.gocd.yaml</value>
</property>
</configuration>
</config-repo>
</config-repos>
</cruise>
<配置仓库>
The <config-repo>
元素指定一个单一的配置存储库。它必须包含精确的一个SCM材料,并可能包含额外的配置部分。
属性
属性 | 必需 | 描述 |
---|---|---|
pluginId | 是 | 配置存储库插件的ID。例如json.config.plugin . |
ID | 是 | 配置存储库的ID。ID必须是唯一的字母数字字符串。也可以包含- ,_ ,. . |
示例
<cruise>
...
<config-repos>
<config-repo pluginId="yaml.config.plugin" id="gocd-yaml-config-example">
<git url="https://github.com/tomzo/gocd-yaml-config-example.git" />
<configuration>
<property>
<key>file_pattern</key>
<value>**/*.gocd.yaml</value>
</property>
</configuration>
</config-repo>
</config-repos>
</cruise>
<configuration> {#config-repo-configuration}
The <configuration>
元素是可选的配置库定义部分。键和值由特定插件指定和处理。此部分可以用来自定义配置库插件在解析特定存储库时的工作方式.
#示例
<configuration>
<property>
<key>file_pattern</key>
<value>*.go.yaml</value>
</property>
<property>
<key>allowed_pipelines_regex</key>
<value>project-X-.*</value>
</property>
</configuration>
<Subversion>
配置库<svn>
材料元素指定Subversion仓库中的代码库位置。
属性
属性 | 必需 | 描述 |
---|---|---|
url | 是 | 远程仓库的URL。Go支持以下协议用于Subversion:http, https, svn 和 svn+ssh,但不支持‘file:///’。 |
用户名 | 否 | 远程仓库的用户账户。 |
密码 | 否 | 指定用户的密码。 |
加密密码 | 否 | 指定用户的加密密码 |
checkexternals | 否 | 默认值为false,值应为true/false或1/0之一。'true'或'1'表示外部更改将作为配置的一部分被包含。 |
材料名称 | 否 | 用于标识材料的名称。材料名称可以包含以下字符:a-z、A-Z、0-9、句点、下划线和连字符,但不允许使用空白。材料名称不区分大小写,并且以句点开头是无效的。最大长度为255个字符。 |
自动更新 | 否 | 默认情况下,Go会自动轮询仓库中的更改。如果将autoUpdate设置为false,则Go不会轮询仓库的更改。对于配置库材料,autoUpdate始终设置为true。 |
注意事项:
Go无法自动接受svn SSL证书。如果使用https访问svn存储库,您需要在服务器上以用户“go”身份执行“svn update”命令,以永久缓存证书。
示例:
<config-repo pluginId="json.config.plugin" id="repo1">
<svn url="http://svn-server.com/framework" />
</config-repo>
<Mercurial>
配置库<hg>
material元素指定Mercurial存储库中代码库的位置。Go支持Mercurial的以下协议:http、ssh。
注意事项:
必须在Go Server上安装Mercurial 1.5或更高版本。Go不随附Mercurial。
属性
属性 | 必需 | 描述 |
---|---|---|
url | 是 | 用于从Mercurial存储库获取源代码的URL。如果您为Mercurial存储库指定了用户名和密码,请将它们放入URL中。Mercurial支持URL中的可选标识符(#之后),该标识符表示特定的分支、标签或更改集。此选项可用于配置Go中的Mercurial分支。 |
材料名称 | 否 | 用于标识材料的名称。材料名称可以包含以下字符:a-z、A-Z、0-9、句点、下划线和连字符。不允许使用空格。材料名称不区分大小写。最大长度为255个字符。 |
自动更新 | 否 | 默认情况下,Go会自动轮询仓库中的更改。如果将autoUpdate设置为false,则Go不会轮询仓库的更改。对于配置库材料,autoUpdate始终设置为true。 |
示例
<config-repo pluginId="json.config.plugin" id="repo1">
<hg url="http://username:password@your-hg/"/>
</config-repo>
#指定一个Mercurial分支。
<config-repo pluginId="json.config.plugin" id="repo1">
<hg url="http://username:password@your-hg#branch_name"/>
</config-repo>
注意:不要使用configrepo材料类型进行配置存储库管道材料配置时,当使用Mercurial分支时,这将导致合并错误。
<Perforce>
配置库<p4>
material元素指定Perforce存储库中代码库的位置。
属性
属性 | 必需 | 描述 |
---|---|---|
端口 | 是 | 要使用的Perforce服务器连接(主机:端口)。这与您为p4命令行传递p4port参数或在P4PORT环境变量中设置的一样。 |
用户名 | 否 | 要使用的Perforce用户名。 |
密码 | 否 | 指定用户的密码。 |
加密密码 | 否 | 指定用户的加密密码。 |
使用票据 | 否 | 设置为true以使用Perforce票据。Go将在每次命令之前使用提供的密码执行p4登录。建议将您的用户添加到p4组,并按照描述将票据超时设置为无限制。在这里. |
视图 | 是 | 有效的Perforce视图。视图应该是P4的子元素。点击在这里查看Perforce VIEW的详细信息。 |
材料名称 | 否 | 用于标识材料的名称。材料名称可以包含以下字符:a-z、A-Z、0-9、句点、下划线和连字符。不允许使用空格。材料名称不区分大小写。最大长度为255个字符。 |
自动更新 | 否 | 默认情况下,Go会自动轮询仓库中的更改。如果将autoUpdate设置为false,则Go不会轮询仓库的更改。对于配置库材料,autoUpdate始终设置为true。 |
注意事项:
视图由多个映射组成。每个映射有两个部分:
- 左侧指定存储库中的一个或多个文件,形式为://存储库名/文件规范
- 右侧指定客户端工作区中的一个或多个文件,其形式为://clientname/file_specification
Go创建一个p4客户端,以“覆盖”选项检出文件到其沙箱中。所有其他选项使用Perforce定义的默认值。客户端名称由Go自动生成。因此,您可以随意使用任何内容作为右侧视图映射中的“clientname”。客户端名称格式为:cruise-[hostname]-[config repo id]-[随机哈希码],例如“cruise-myhostname-configrepo1-wOaJ9kjpfgOLQCncki19ikXt5Q”。
Go 视图与 Perforce 自身使用的格式相同。实际上,您应该能够从现有的 Perforce 设置中复制一个 Perforce 视图并将其粘贴到视图部分中。
例如:
<config-repo pluginId="json.config.plugin" id="repo1">
<p4 port="10.18.3.102:1666" username="userName" password="passwd">
<view><![CDATA[
//depot/dev/src... //anything/src/...
//depot/dev/test... //anything/test/...
//depot/dev/main/docs/... //anything/docs/...
]]></view>
</p4>
</config-repo>
<Git>
配置库<git>
material元素指定GIT存储库中代码库的位置。Go仅支持远程存储库。
注意事项:
Go支持git 1.9及以上版本。
如果定义了“分支”,Go 将签出指定的分支。否则,Go 将签出主分支。
如果存储库中有子模块,Go 也将签出这些子模块。
在Windows机器上为Go服务器安装msysGit时,请选择选项iii,即从 Windows 命令提示符运行 Git 和包含的 UNIX 工具
如果您在 Windows 上通过 SSH 使用 git,请确保 HOME 用户环境变量已设置为包含 .ssh/ 目录的父目录的完整路径。
属性
属性 | 必需 | 描述 |
---|---|---|
url | 是 | 仓库的git URL。 |
分支 | 否 | 仓库中的分支名称。 |
材料名称 | 否 | 用于标识材料的名称。材料名称可以包含以下字符:a-z、A-Z、0-9、句点、下划线和连字符。不允许使用空格。材料名称不区分大小写。最大长度为255个字符。 |
自动更新 | 否 | 默认情况下,Go会自动轮询仓库中的更改。如果将autoUpdate设置为false,则Go不会轮询仓库的更改。对于配置库材料,autoUpdate始终设置为true。 |
示例包括:
<config-repo pluginId="json.config.plugin" id="repo1">
<git url="git://127.0.0.1/precommit.git" branch="1.3branch"/>
</config-repo>
<Team Foundation Server>
配置库<tfs>
material元素指定了TFS源代码库中代码库的位置。
属性
属性 | 必需 | 描述 |
---|---|---|
url | 是 | TFS服务器上集合的URL。 |
域名 | 否 | TFS 身份验证凭据的域名。 |
用户名 | 是 | 访问 TFS 集合的帐户用户名。 |
密码 | 是 | 访问 TFS 集合的帐户密码。 |
加密密码 | 否 | 访问TFS集合的帐户的加密密码。 |
项目路径 | 是 | TFS 集合内的项目路径。 |
材料名称 | 否 | 用于标识材料的名称。材料名称可以包含以下字符:a-z、A-Z、0-9、句点、下划线和连字符。不允许使用空格。材料名称不区分大小写。最大长度为255个字符。 |
自动更新 | 否 | 默认情况下,Go会自动轮询仓库中的更改。如果将autoUpdate设置为false,则Go不会轮询仓库的更改。对于配置库材料,autoUpdate始终设置为true。 |
示例包括:
<config-repo pluginId="json.config.plugin" id="repo1">
<tfs url="http://10.21.3.210:8080/tfs/New" domain="DOMAIN" username="jim" password="as802nsk9==" projectPath="$/webapp" />
</config-repo>
<源码管理>
配置库<scm>
material元素指定了代码库在任何SCM库中的位置。
属性
属性 | 必需 | 描述 |
---|---|---|
引用 | 是 | 唯一的包存储库ID。 |
示例包括:
<config-repo pluginId="json.config.plugin" id="repo1">
<scm ref="e289f497-057b-46bc-bb69-8043454f5c1b"/>
</config-repo>
<规则>
配置库<rules>
rules元素是allow
和deny
规则。更多关于rules
的信息可以从在这里.
示例包括:
<rules>
<allow action="refer" type="environment">dev</allow>
<deny action="refer" type="environment">prod</allow>
</rules>
<允许>
The <allow>
元素是指定允许引用指定配置类型和资源的规则。
属性
属性 | 必需 | 描述 |
---|---|---|
操作 | 是 | 在属性下指定实体的操作。type 。支持的值是refer . |
类型 | 是 | 将应用规则的GoCD实体类型。支持的值是*, environment, pipeline_group, pipeline . |
示例:
<allow action="refer" type="*">*</allow>
<拒绝>
The <deny>
元素是指定拒绝引用定义的类型和资源的规则。
属性
属性 | 必需 | 描述 |
---|---|---|
操作 | 是 | 在属性下指定实体的操作。type 。支持的值是refer . |
类型 | 是 | 将应用规则的GoCD实体类型。支持的值是*, environment, pipeline_group, pipeline . |
示例:
<deny action="refer" type="*">*</deny>
<存储库>
The <repositories>
元素是一个包存储库的容器。
示例
<cruise>
...
<repositories>
<repository id="repo-id" name="repo-name">
<pluginConfiguration id="plugin-id" version="plugin-version" />
<configuration>
<property>
<key>property-name</key>
<value>property-value</value>
</property>
...
</configuration>
<packages>
<package id="package-id" name="package-name" >
<configuration>
<property>
<key>property-name</key>
<value>property-value</value>
</property>
...
</configuration>
</package>
</packages>
</repository>
</repositories>
</cruise>
<存储库>
The <repository>
元素指定单个存储库。存储库必须通过id和名称(名称不区分大小写)在整个存储库配置中唯一。
属性
属性 | 必需 | 描述 |
---|---|---|
ID | 否 | 该id由GO唯一标识一个包存储库。此属性无需指定。如果没有给出值,服务器会自动生成一个随机UUID并将其分配为存储库id。 |
名称 | 是 | 名称唯一标识用户将指定的包存储库,并且将在屏幕上显示。存储库名称可以包含以下字符:a-z、A-Z、0-9、句点、下划线和连字符。不允许使用空格。Go中名称不区分大小写,长度应小于255个字符。 |
示例
<cruise>
...
<repositories>
<repository id="repo-id" name="repo-name">
<pluginConfiguration id="plugin-id" version="plugin-version" />
<configuration>
<property>
<key>property-name</key>
<value>property-value</value>
</property>
...
</configuration>
<packages>
<package id="package-id" name="package-name" >
<configuration>
<property>
<key>property-name</key>
<value>property-value</value>
</property>
...
</configuration>
</package>
</packages>
</repository>
</repositories>
</cruise>
<插件配置>
The <pluginConfiguration>
元素指定与插件相关的配置。
属性
属性 | 必需 | 描述 |
---|---|---|
ID | 是 | 指定将处理存储库配置的插件id。 |
版本 | 是 | 指定将处理存储库配置的插件版本。 |
<配置>
The <configuration>
元素指定与存储库或包相关的一处或多处属性的配置。
<属性>
The <property>
元素保存键和值。
<键>
The <key>
元素指定属性的名称。
<值>
The <value>
元素指定属性的值。
<包>
The <packages>
元素指定存储库下的包列表。
<包>
The <package>
元素指定存储库下的单个包。此标签保存与包相关的配置。
属性
属性 | 必需 | 描述 |
---|---|---|
ID | 否 | 该id由Go跨存储库唯一标识一个包。此属性无需指定。如果没有给出值,服务器会自动生成一个随机UUID并将其分配为包id。 |
名称 | 是 | 名称唯一标识存储库内的包,名称将由用户指定并将在屏幕上显示。包名称可以包含以下字符:a-z、A-Z、0-9、句点、下划线和连字符。不允许使用空格。Go中名称不区分大小写,长度应小于255个字符。 |
自动更新 | 否 | 默认情况下,Go会自动轮询仓库中的更改。如果将autoUpdate设置为false,则Go不会轮询仓库的更改。而是仅在您触发包含此材料的流水线时检查更改。 |
<构件存储>
The <artifactStores>
元素是一个包含多个的容器<artifactStore>
.
示例
<cruise>
...
<artifactStores>
<artifactStore id="dockerhub" pluginId="cd.go.artifact.docker.registry">
<property>
<key>RegistryURL</key>
<value>https://index.docker.io/v1/</value>
</property>
<property>
<key>Username</key>
<value>boohoo</value>
</property>
<property>
<key>Password</key>
<value>password</value>
</property>
</artifactStore>
</artifactStores>
</cruise>
<构件存储>
The <artifactStore>
元素指定一个全局构件存储以发布/获取外部构件。它可以包含零个或多个<property>
元素来指定插件属性。
属性
属性 | 必需 | 描述 |
---|---|---|
pluginId | 是 | 构件插件的ID。例如cd.go.artifact.docker.registry . |
ID | 是 | 构件存储的ID。ID必须是唯一的字母数字字符串。它也可以包含- ,_ ,. 。这将在发布配置中稍后使用。 |
<秘密配置>
The <secretConfigs>
元素是一个包含机密配置的容器。
可以存在零个或多个机密配置。
示例
<secretConfigs>
<secretConfig id="secret" pluginId="secret-plugin">
...
</secretConfig>
</secretConfigs>
<秘密配置>
The <secretConfig>
元素指定单个机密配置。它必须在整个配置中是唯一的(包括大小写)。
A secretConfig
应该具有唯一性id
属性,并且应该通过pluginId
属性与插件关联。
属性
属性 | 必需 | 描述 |
---|---|---|
ID | 是 | id 用于标识一个机密配置,且必须唯一。id 可以包含以下字符:a-z、A-Z、0-9、点 (.)、下划线 (_) 和连字符 (-)。不允许使用空格。长度应小于 255 个字符。 |
pluginId | 是 | The id 机密插件的 |
示例:
<secretconfig id="secret" pluginId="secret-plugin">
<configuration>
<property>
<key>SecretsFilePath</key>
<value>/users/go/secret.db</value>
</property>
</configuration>
</secretconfig>
<描述>
The <description>
元素为元素指定描述。
示例:
<description>
This is a sample description.
</description>
<规则>
The <rules>
元素是一个容器,用于allow
和deny
规则。更多关于rules
的信息可以从在这里.
示例:
<rules>
<allow action="refer" type="*">*</allow>
<deny action="refer" type="*">*</deny>
</rules>
<允许>
The <allow>
元素是根据操作、配置类型和资源允许使用已定义机密的规则。
属性
属性 | 必需 | 描述 |
---|---|---|
操作 | 是 | 在属性下指定实体的操作。type . |
类型 | 是 | GoCD 实体类型的任何适用规则。 |
示例:
<allow action="refer" type="*">*</allow>
<拒绝>
The <deny>
元素是根据操作、配置类型和资源拒绝使用已定义机密的规则。
属性
属性 | 必需 | 描述 |
---|---|---|
操作 | 是 | 在属性下指定实体的操作。type . |
类型 | 是 | GoCD 实体类型的任何适用规则。 |
示例:
<deny action="refer" type="*">*</deny>
<流水线集合>
The <pipelines>
元素是流水线容器。
属性
属性 | 必需 | 描述 |
---|---|---|
group | 否 | 名称用于标识流水线组,且必须唯一。名称可以包含以下字符:a-z、A-Z、0-9、点 (.)、下划线 (_) 和连字符 (-)。不允许使用空格。长度应小于 255 个字符。默认名称为‘defaultGroup’。 |
示例
<cruise>
...
<pipelines group="studios">
<pipeline name="yourproject" labeltemplate="foo-1.0.${COUNT}">
<materials>
<svn url="http://your-svn/"/>
</materials>
<stage name="ut">
<jobs>
<job name="linux">
<resources>
<resource>linux</resource>
</resources>
<tasks>
<ant target="unit-test" />
</tasks>
</job>
</jobs>
</stage>
</pipeline>
</pipelines>
</cruise>
<授权>
The <authorization>
标签允许您指定哪些用户和角色能够管理、查看或操作任何特定的流水线组。
<管理员>
The <admins>
元素是一个权限部分,用于指定谁可以管理流水线组。Go 管理员可以在标签中定义角色和用户。
被定义为组管理员的用户和角色可以查看并操作此流水线组中的所有流水线。他们可以导航到管理页面,在那里他们只能查看和编辑这个流水线组,包括在此组中创建和修改流水线,通过“Pipeline Configuration”选项卡。他们没有权限查看或修改即使被此组中的任何流水线使用的 Pipeline Templates。
注意:Go 管理员 (admins) 在security标签下定义,可以管理所有流水线组。
示例
给定以下配置,只有admins,lqiao 和具有 ‘studios_group_admin’ 角色的任何用户。
<cruise>
...
<pipelines group="studios">
<authorization>
<admins>
<user>lqiao</user>
<role>studios_group_admin</role>
</admins>
</authorization>
<pipeline name="yourproject" labeltemplate="foo-1.0.${COUNT}">
......
</pipeline>
</pipelines>
</cruise>
<查看>
The <view>
元素是一个权限部分,用于指定谁可以查看流水线组下的流水线。你可以在标签中定义角色和用户。
**注意:** 管理员 (admins) 可以查看所有流水线组。未在<view>
标签下列出的任何其他用户或角色将无法看到此流水线组。
示例
给定以下配置,只有管理员可以操作流水线组,并且只有admins,lqiao 和具有 ‘go_readonly_member’ 角色的任何用户可以查看流水线。
<cruise>
...
<pipelines group="studios">
<authorization>
<view>
<user>lqiao</user>
<role>go_readonly_member</role>
</view>
</authorization>
<pipeline name="yourproject" labeltemplate="foo-1.0.${COUNT}">
......
</pipeline>
</pipelines>
</cruise>
<操作>
The <operate>
元素指定谁可以操作流水线组下的流水线。你可以定义角色和用户。
**注意:** 未在<view>
标签下列出的任何用户/角色将无法看到此流水线组(即使他们被列为允许<operate>
该流水线组)。
示例
给定以下配置,只有admins,lqiao,jez 和具有 ‘go_core_member’ 角色的用户可以操作流水线组。只有admins,lqiao 和具有 ‘go_readonly_member’ 角色的用户可以查看流水线(jez 和 go_core_member 不可以)。
<cruise>
...
<pipelines group="studios">
<authorization>
<view>
<user>lqiao</user>
<role>go_readonly_member</role>
</view>
<operate>
<user>lqiao</user>
<user>jez</user>
<role>go_core_member</role>
</operate>
</authorization>
<pipeline name="yourproject" labeltemplate="foo-1.0.${COUNT}">
......
</pipeline>
</pipelines>
</cruise>
<流水线>
The <pipeline>
元素指定单个流水线。它必须在整个配置中唯一(不仅限于流水线组)。
注意事项:
至少有一个流水线应该有一个阶段。Go 使用流水线名称来识别流水线。如果你更改流水线名称,你会丢失该流水线的历史记录。
属性
属性 | 必需 | 描述 |
---|---|---|
名称 | 是 | 名称用于标识流水线,因此每个流水线名称必须唯一。流水线名称可以包含以下字符:a-z、A-Z、0-9、句号、下划线和连字符。不允许使用空格。在 Go 中名称不区分大小写,且长度应小于 255 个字符。 |
labeltemplate | 否 | material names 和 ${COUNT} 都可以在 labeltemplate 中使用,默认值为 ‘${COUNT}’。如果你只指定 labeltemplate="foo-1.0-${COUNT}",你的流水线将显示 foo-1.0-1, foo-1.0-2,等等。当你在 labeltemplate 中引用 material names 时,Go 将使用参考材料的修订版填充流水线标签。例如,给定流水线中的材料名称为 ‘svnrepo’,当您指定 labeltemplate="foo-1.0-${svnrepo}",那么你的流水线将显示 foo-1.0-3123, foo-1.0-3124,等等。材料名称不区分大小写。流水线标签的最大长度为 255。如果材料名称为 ‘svnrepo’,以下 labeltemplates 是有效的:${COUNT}, ${svnrepo}, foo-${COUNT}-${SVNrepo}, foo-${svnrepo}-${COUNT}-bar。 |
锁定行为 | 否 | 可能的值为“none”,“lockOnFailure”或“unlockWhenFinished”。默认值为“none”。当设置为“lockOnFailure”时,GoCD确保一次只能运行一个管道实例,且若管道失败,除非这是最后一个失败的阶段,否则它将被锁定。当设置为“unlockWhenFinished”时,GoCD确保一次只能运行一个管道实例,并且管道在完成(成功或失败)后或到达手动阶段时即解锁。将被锁定如果它失败了,但前提是它不是最后一个失败的阶段。当设置为“unlockWhenFinished”时,GoCD确保一次只能运行一个管道实例,且管道在完成后(成功或失败)即解锁,或者到达手动阶段。 |
模板 | 否 | 此管道引用的模板名称。如果设置了此项,则此管道中不得定义任何阶段。 |
示例
<pipelines>
<pipeline name="yourproject" labeltemplate="foo-1.0.${COUNT}-${svn}" lockBehavior="lockOnFailure">
<environmentvariables>
<variable name="FOO"><value>bar</value></variable>
</environmentvariables>
<materials>
<svn url="http://your-svn/" materialName="svn" />
</materials>
<stage name="ut">
<jobs>
<job name="linux">
<resources>
<resource>linux</resource>
</resources>
<tasks>
<ant target="unit-test" />
</tasks>
</job>
</jobs>
</stage>
</pipeline>
</pipelines>
<参数>
元素<params>
指定要在管道或管道模板中使用的参数列表(元素param) 元素。您可以在<pipeline>
下指定这些内容,并可以在管道/阶段/作业定义中的任何位置使用。
<参数>
A <param>
定义将在管道或管道模板中替换的参数名称和参数值。
示例:
<params>
<param name="COMMAND">echo</param>
<param name="WORKING_DIR">/repo/branch</param>
</params>
<跟踪工具>
The <trackingtool>
元素可用于指定链接到问题跟踪器。Go 将根据提交消息构造一个链接,您可以使用该链接访问您的跟踪工具(JIRA 问题,Trac 问题等)。
属性
属性 | 必需 | 描述 |
---|---|---|
link | 是 | 带有字符串‘${ID}’的URL。Go 将在运行时用第一个匹配组的值替换字符串‘${ID}’。 |
regex | 是 | A regex用于识别ID。Go 将在您的提交消息中找到第一个匹配组并用它来构建超链接。 |
示例
假设您正在使用一个Web应用程序来管理您的任务或错误,而链接看起来像http://your-trackingtool/yourproject/512
,‘512’是您的任务ID。您的配置应为:
<pipeline name="yourproject">
<trackingtool link="http://your-trackingtool/yourproject/${ID}" regex="evo-(\d+)"/>
...
</pipeline>
如果您提交一些包含字符’evo-512’的代码,则该字符将出现在修改弹出框中作为链接。单击它时,Go 将带您访问网页http://your-trackingtool/yourproject/512
.
例如:如果您使用Jira作为任务管理器,则配置应为:
<pipeline name="yourproject">
<trackingtool link="https://your-jira-server/browse/yourproject-${ID}" regex="##(\d+)"/>
...
</pipeline>
注意事项:一条管道中不能定义多个跟踪工具。
<计时器>
The <timer>
元素指定类似cron的构建管道调度表。
属性
属性 | 必需 | 描述 |
---|---|---|
onlyOnChanges | 否 | 如果上一次管道运行使用的是最新的材料,则跳过调度。当自动管道调度关闭时,此选项通常很有用。 |
示例
例如,在工作日每天晚上10点运行一次管道:
<pipeline name="yourproject">
<timer>0 0 22 ? * MON-FRI</timer>
...
</pipeline>
Go 内部使用Quartz调度程序。为了方便起见,我们在此处复制了Quartz cron 文档:
格式
cron 表达式是一串由空格分隔的6个或7个字段组成的字符串。字段可以包含允许的值以及该字段允许的特殊字符的各种组合。字段如下:
字段名称 | 是否必须? | 允许的值 | 允许的特殊字符 |
---|---|---|---|
秒 | 是 | 0-59 | , - * / |
分钟 | 是 | 0-59 | , - * / |
小时 | 是 | 0-23 | , - * / |
日期 | 是 | 1-31 | , - * ? / L W \ |
月份 | 是 | 1-12 或 JAN-DEC | , - * / |
星期几 | 是 | 1-7 或 SUN-SAT | , - * ? / L # |
年份 | 否 | 空、1970-2099 | , - * / |
因此,cron 表达式可以像这样简单:* * * * * ?
或者更复杂,如这样:0 15 10 ? * 6L 2002-2005
特殊字符
-
*
(“所有值”) - 用于选择字段内的所有值。例如,“*”在分钟字段中表示“每分钟”. -
?
(“无特定值”) - 当你需要在其中一个两个字段中指定某些东西,但不在另一个字段中时有用。例如,如果我希望我的触发器在每月某一天(比如说第10天)触发,而不关心那天是星期几,我就会在日期字段中填入“10”,在星期字段中填入“?”。参见下面的例子以澄清。 -
-
- 用于指定范围。例如,“10-12”在小时字段中意味着“10、11和12点”. -
,
- 用于指定附加值。例如,“MON,WED,FRI”在星期几字段中意味着“周一、周三和周五”. -
/
- 用于指定增量。例如,“0/15”在秒字段中意味着“0、15、30和45秒”。而“5/15”在秒字段中意味着“5、20、35和50秒”。你还可以在‘’字符后指定‘/’ - 在这种情况下,‘’等同于在‘/’前放置‘0’。‘1/3’在日期字段中意味着“从每月的第一天开始每隔三天触发”. -
L
(“最后”) - 在两个字段中都有不同的含义。例如,“L”在日期字段中的值意味着“该月的最后一天”- 对于一月来说是第31天,对于非闰年的二月来说则是第28天。如果单独在星期字段中使用,则仅表示“7”或“SAT”。但若在星期字段中跟在另一个值之后,则意味着“该月的最后一个xxx天”- 例如“6L”意味着“该月的最后一个星期五”。使用‘L’选项时,不要指定列表或值范围,因为会产生混淆的结果。 -
W
(“工作日”) - 用于指定最接近给定日期的工作日(周一至周五)。例如,如果将“15W”指定为日期字段的值,则其含义为:“离每月15日最近的工作日”。因此,如果15日是周六,则触发器将在周五的14日触发。如果15日是周日,则触发器将在周一的16日触发。如果15日是周二,则触发器将在周二的15日触发。但是,如果你将“1W”指定为日期字段的值,而1日是周六,则触发器将在周一的3日触发,因为它不会跨越一个月的边界。‘W’字符只能在日期是一个单日而不是范围或列表时指定。‘L’和‘W’字符也可以在日期字段中结合使用为‘LW’,这转换为“每月的最后一个工作日”. -
#
- 用于指定“第n个”XXX月中的某天。例如,星期字段中“6#3”的值意味着“本月的第三个星期五”(第6天 = 星期五,且“#3” = 本月的第三个)。其他例子:“2#1” = 本月的第一个星期一,“4#5” = 本月的第五个星期三。请注意,如果你指定“#5”,而该月没有第五个给定的星期几,则当月不会触发任务。合法字符以及月份和星期名称不区分大小写。MON
等同于mon
.
示例
以下是一些完整的示例:
表达式 | 含义 |
---|---|
0 0 12 * * ? |
每天中午12点触发 |
0 15 10 ? * * |
每天上午10:15触发 |
0 15 10 * * ? |
每天上午10:15触发 |
0 15 10 * * ? * |
每天上午10:15触发 |
0 15 10 * * ? 2005 |
在2005年期间每天上午10:15触发 |
0 * 14 * * ? |
每天下午2点到2:59分之间每分钟触发一次 |
0 0/5 14 * * ? |
每天下午2点到2:55分之间每隔5分钟触发一次 |
0 0/5 14,18 * * ? |
每天下午2点到2:55分之间每隔5分钟触发一次,同时每天下午6点到6:55分之间每隔5分钟触发一次 |
0 0-5 14 * * ? |
每天下午2点到2:05分之间每分钟触发一次 |
0 10,44 14 ? 3 WED |
每年三月每个星期三下午2:10和2:44触发 |
0 15 10 ? * MON-FRI |
每周一、周二、周三、周四和周五上午10:15触发 |
0 15 10 15 * ? |
每月15日上午10:15触发 |
0 15 10 L * ? |
每月最后一天上午10:15触发 |
0 15 10 ? * 6L |
每月最后一个星期五上午10:15触发 |
0 15 10 ? * 6L |
每月最后一个星期五上午10:15触发 |
0 15 10 ? * 6L 2002-2005 |
在2002年至2005年期间每个月的最后一个星期五上午10:15触发 |
0 15 10 ? * 6#3 |
每月第三个星期五上午10:15触发 |
0 0 12 1/5 * ? |
每月第一天开始每5天中午12点触发一次 |
0 11 11 11 11 ? |
每年11月11日上午11:11触发 |
请注意在“星期”和“日期”字段中‘?’和‘*’的影响!
注意事项
- 同时指定“星期”和“日期”值的支持尚不完整(目前必须在一个字段中使用‘?’字符)。
- 在午夜和凌晨1点之间设置触发时间时需谨慎 - “夏令时”可能会根据时间是回退还是跳前导致任务被跳过或重复。
<材料>
The <materials>
元素指定流水线变更的来源。通常这将是您源代码控制库中的代码库。
注意事项:
Go 支持多个材料,限制是每个材料必须包含一个唯一的“dest”文件夹(不能是任何其他材料的子文件夹)。Go 将为每个材料将源代码检出到此文件夹中。
示例
<pipeline name="yourproject" labeltemplate="foo-1.0.${COUNT}">
<materials>
<svn url="http://your-svn/"/>
</materials>
...
</pipeline>
多个材料:
<pipeline name="yourproject" labeltemplate="foo-1.0.${COUNT}">
<materials>
<svn url="http://your-svn/" dest="svn-folder" />
<git url="git://127.0.0.1/precommit.git" branch="1.3branch" dest="git-folder" />
<hg url="http://your-hg/" dest="hg-folder" />
<p4 port="10.18.3.102:1666" username="userName" password="passwd" dest="p4-folder">
<view><![CDATA[
//depot/dev/src... //anything/src/...
]]></view>
</p4>
</materials>
...
</pipeline>
<过滤器>
The <filter>
元素指定不应自动触发流水线的更改集中的文件。当流水线由未被忽略的文件触发时,过滤掉的文件仍然会与其他文件一起更新。您只能在每个SCM材料下定义一个过滤器。手动触发流水线时,它将更新到最新版本,包括过滤掉的文件。
示例
<svn url="http://your-svn/">
<filter>
<ignore pattern="doc/**/*.*" />
</filter>
</svn>
<忽略>
The <ignore>
元素用于指定一组在Go检查变更时不考虑的文件。仅包含这些文件的仓库更改集不会自动触发流水线。
属性
属性 | 必需 | 描述 |
---|---|---|
pattern | 是 | 定义被忽略文件的模式(Ant风格)。这些文件的变更不会触发流水线。模式相对于SCM仓库的根目录,而不是流水线的沙盒。 |
注意事项
<ignore>
可以多次出现在<filter>
.- 模式相对于SCM仓库的根目录,而不是代理端的沙盒或材料URL。
- 被忽略的文件在其他文件更新时仍然会被更新。
示例:
<ignore pattern="doc/**/*" />
忽略文件夹下的所有内容‘doc’.
<ignore pattern="doc/*" />
忽略文件夹下的文件‘doc’,排除任何子文件夹。
<ignore pattern="framework/helper/*.doc" />
忽略位于目录‘framework/helper’下的扩展名为.doc.
<ignore pattern="*.pdf" />
的文件。忽略位于SCM仓库根目录下且扩展名为.pdf.
<ignore pattern="**/helper/*.pdf" />
的文件。忽略位于任何‘helper’文件夹下且扩展名为.pdf.
<ignore pattern="helper/**/*.pdf" />
的文件。忽略位于仓库中‘helper’文件夹下的嵌套目录中且扩展名为‘helper’ of the repository and the file extension is .pdf.
<Subversion>
The <svn>
元素指定您的代码库在Subversion仓库中的位置。
属性
属性 | 必需 | 描述 |
---|---|---|
url | 是 | 远程仓库的URL。Go支持以下协议用于Subversion:http, https, svn 和 svn+ssh,但不支持‘file:///’。 |
用户名 | 否 | 远程仓库的用户账户。 |
密码 | 否 | 指定用户的密码。 |
checkexternals | 否 | 默认值为false,值应为true/false或1/0之一。'true'或‘1’表示外部变更将自动触发流水线。 |
目标 | 如果有多个材料则为必填项 | 代码将被检出的目录。这是相对于 Go 代理的沙箱。Go 防止目标文件夹位于代理沙箱之外。 |
材料名称 | 如果此材料在管道标签模板中引用,则必需 | 标识材料的名称。材料名称可以包含以下字符:a-z, A-Z, 0-9, 点号, 下划线和连字符,但不允许空格。材料名称不区分大小写,以点号开头无效。需要在同一流水线内唯一。最大长度为255个字符。 |
自动更新 | 否 | 默认情况下,Go会自动轮询存储库中的更改。如果将autoUpdate设置为false,则Go不会轮询存储库的更改。相反,它仅在您触发包含此材料的流水线或通过提交钩子接收通知时检查更改。如果在配置文件中多次指定了相同的材料,则所有这些材料的autoUpdate值必须相同。 |
反转过滤器 | 否 | 反转任何filter 元素,将它们转换为允许列表。只有匹配过滤器的文件才会触发新构建。 the filter will trigger a new build. |
注意事项:
Go无法自动接受svn SSL证书。如果您使用https访问svn存储库,则必须以用户“go”的身份,在服务器和每个代理上执行“svn update”命令,以便永久存储证书。
示例:
对于具有以下配置的Linux上的Go代理:
<pipeline name="myproduct">
<materials>
<svn url="http://svn-server.com/framework" dest="framework"/>
<svn url="http://svn-server.com/componentOne" dest="mycomponent"/>
</materials>
...
</pipeline>
Go代理将从http://svn-server.com/framework
为/var/lib/go-agent/pipelines/myproduct/framwork
检出源代码,并从http://svn-server.com/componentOne
为/var/lib/go-agent/pipelines/myproduct/mycomponent
.
<Mercurial>
The <hg>
element specifies the location of your code base in a Mercurial repository. Go supports the http and ssh for Mercurial.
注意事项:
您必须在Go服务器和Go代理上安装Mercurial 1.5或更高版本,以便需要Mercurial的工作任务能够运行。Go不随附Mercurial。
属性
属性 | 必需 | 描述 |
---|---|---|
url | 是 | 用于从Mercurial存储库获取源代码的URL。如果您为Mercurial存储库指定了用户名和密码,请将它们放入URL中。Mercurial支持URL中的可选标识符(#之后),该标识符表示特定的分支、标签或更改集。此选项可用于配置Go中的Mercurial分支。 |
目标 | 仅适用于多种材料 | 代码将被检出的目录。这是相对于 Go 代理的沙箱。Go 防止目标文件夹位于代理沙箱之外。 |
材料名称 | 如果此材料在管道标签模板中引用,则必需 | 用于标识材料的名称。材料名称可以包含以下字符:a-z、A-Z、0-9、句点、下划线和连字符。不允许使用空格。材料名称不区分大小写。它需要在管道内唯一。最大长度为 255 个字符。 |
自动更新 | 否 | 默认情况下,Go 会自动轮询存储库以获取更改。如果将 autoUpdate 设置为 false,则 Go 不会轮询存储库以获取更改。相反,只有当您触发包含此材料的管道时,它才会检查更改。如果在配置文件中多次指定相同的材料,则它们必须具有相同的 autoUpdate 值。 |
反转过滤器 | 否 | 反转任何filter 元素,将它们转换为允许列表。只有匹配过滤器的文件才会触发新构建。 the filter will trigger a new build. |
示例
<pipeline name="yourproject">
<materials>
<hg url="http://username:password@your-hg/"/>
</materials>
...
</pipeline>
#指定一个Mercurial分支。
<pipeline name="yourproject_branch">
<materials>
<hg url="http://username:password@your-hg##branch_name"/>
</materials>
...
</pipeline>
注意,#需要用另一个#转义 - 因此上述URL中的##。
<Perforce>
The <p4>
元素指定Perforce存储库中代码库的位置。
注意事项:
Go将在代理端的pipelines/{pipelineName}目录下使用作为Perforce客户端工作区的根目录。
属性
属性 | 必需 | 描述 |
---|---|---|
端口 | 是 | 要使用的Perforce服务器连接(主机:端口)。这与您为p4命令行传递p4port参数或在P4PORT环境变量中设置的一样。 |
用户名 | 否 | 要使用的Perforce用户名。 |
密码 | 否 | 指定用户的密码。 |
使用票据 | 否 | 设置为true以使用Perforce票据。Go将在每次命令之前使用提供的密码执行p4登录。建议将您的用户添加到p4组,并按照描述将票据超时设置为无限制。在这里. |
目标 | 仅适用于多种材料 | 代码将被检出的目录。这是相对于 Go 代理的沙箱。Go 防止目标文件夹位于代理沙箱之外。 |
视图 | 是 | 有效的Perforce视图。视图应该是P4的子元素。点击在这里查看Perforce VIEW的详细信息。 |
材料名称 | 如果此材料在管道标签模板中引用,则必需 | 用于标识材料的名称。材料名称可以包含以下字符:a-z、A-Z、0-9、句点、下划线和连字符。不允许使用空格。材料名称不区分大小写。它需要在管道内唯一。最大长度为 255 个字符。 |
自动更新 | 否 | 默认情况下,Go 会自动轮询存储库以获取更改。如果将 autoUpdate 设置为 false,则 Go 不会轮询存储库以获取更改。相反,只有当您触发包含此材料的管道时,它才会检查更改。如果在配置文件中多次指定相同的材料,则它们必须具有相同的 autoUpdate 值。 |
反转过滤器 | 否 | 反转任何filter 元素,将它们转换为允许列表。只有匹配过滤器的文件才会触发新构建。 the filter will trigger a new build. |
注意事项:
如果您已经将上述属性定义为系统变量,则无需再指定它们。因此,如果您定义了一个P4PASSWD变量,则可以省略上面的“password”标签。如果您已经在系统变量和Go配置中都定义了这些属性,则Go会在运行p4之前覆盖它们。
视图由多个映射组成。每个映射有两个部分:
- 左侧指定存储库中的一个或多个文件,形式为://存储库名/文件规范
- 右侧指定客户端工作区中的一个或多个文件,其形式为://clientname/file_specification
Go 创建一个 p4 客户端,用于将其文件签出到其沙箱中,并设置“覆盖”选项。这意味着,在更新材料期间,工作区中所有可写但未打开的文件都会在代理上被覆盖。所有其他选项使用 Perforce 定义的默认值。客户端名称由 Go 自动生成。因此,您可以在视图映射的右侧将任何内容用作“clientname”。客户端名称格式为:cruise-[主机名]-[管道名称]-[随机哈希码],例如“cruise-myhostname-mypipelinename-wOaJ9kjpfgOLQCncki19ikXt5Q”。GO_P4_CLIENT 环境变量将包含所使用的客户端名称。此变量可以在脚本中使用以获取客户端名称。
Go 视图与 Perforce 自身使用的格式相同。实际上,您应该能够从现有的 Perforce 设置中复制一个 Perforce 视图并将其粘贴到视图部分中。
例如:
<pipeline name="perforce-example"/>
<materials>
<p4 port="10.18.3.102:1666" username="userName" password="passwd">
<view><![CDATA[
//depot/dev/src... //anything/src/...
//depot/dev/test... //anything/test/...
//depot/dev/main/docs/... //anything/docs/...
]]></view>
</p4>
</materials>
...
</pipeline>
<Git>
The <git>
元素指定代码库在 GIT 仓库中的位置。Go 仅支持远程存储库。
注意事项:
支持 Git 1.7 及更高版本。
如果定义了“分支”,Go 将签出指定的分支。否则,Go 将签出主分支。
如果存储库中有子模块,Go 也将签出这些子模块。
Windows 上的 msysGit 存在一个缺陷,这会导致使用 Go 时出现错误。请确保使用修复了此问题的版本。
在 Windows 机器上为 Go 服务器或代理安装 msysGit 时,请选择选项 iii,即从 Windows 命令提示符运行 Git 和包含的 UNIX 工具
如果您在 Windows 上通过 SSH 使用 git,请确保 HOME 用户环境变量已设置为包含 .ssh/ 目录的父目录的完整路径。
属性
属性 | 必需 | 描述 |
---|---|---|
url | 是 | 仓库的 GIT URL。 |
分支 | 否 | 仓库中的分支名称。 |
浅克隆 | 否 | 向 Go 代理上的 Git 克隆命令添加一个--depth=N 选项。浅克隆会截断历史记录到最新修订版,从而帮助加速具有长期历史记录的仓库的克隆操作。克隆深度动态计算,以确保包含GO_FROM_REVISION为GO_TO_REVISION的修订版包含在克隆的仓库中。 |
目标 | 仅适用于多种材料 | Go 代理沙箱下的目录。Go 将源代码检出到此目录中。 |
材料名称 | 如果此材料在管道标签模板中引用,则必需 | 用于标识材料的名称。材料名称可以包含以下字符:a-z、A-Z、0-9、句点、下划线和连字符。不允许使用空格。材料名称不区分大小写。它需要在管道内唯一。最大长度为 255 个字符。 |
自动更新 | 否 | 默认情况下,Go 会自动轮询存储库以获取更改。如果将 autoUpdate 设置为 false,则 Go 不会轮询存储库以获取更改。相反,只有当您触发包含此材料的管道时,它才会检查更改。如果在配置文件中多次指定相同的材料,则它们必须具有相同的 autoUpdate 值。 |
反转过滤器 | 否 | 反转任何filter 元素,将它们转换为允许列表。只有匹配过滤器的文件才会触发新构建。 the filter will trigger a new build. |
示例包括:
<pipeline name="yourproject">
<materials>
<git url="git://127.0.0.1/precommit.git" branch="1.3branch"/>
</materials>
...
</pipeline>
<pipeline name="yourproject">
<materials>
<git url="http://ccegit:pst@goserver.yourcompany.com/httpgit.git" />
</materials>
...
</pipeline>
<Team Foundation Server>
The <tfs>
元素指定 TFS 源代码库中代码库的位置。
属性
属性 | 必需 | 描述 |
---|---|---|
URL | 是 | TFS 服务器上的集合 URL。 |
域名 | 否 | TFS 身份验证凭据的域名。 |
用户名 | 是 | 访问 TFS 集合的帐户用户名。 |
密码 | 是 | 访问 TFS 集合的帐户密码。 |
项目路径 | 是 | TFS 集合内的项目路径。 |
目标 | 仅适用于多种材料 | 代码将被检出的目录。这是相对于 Go 代理的沙箱。Go 防止目标文件夹位于代理沙箱之外。 |
反转过滤器 | 否 | 反转任何filter 元素,将它们转换为允许列表。只有匹配过滤器的文件才会触发新构建。 the filter will trigger a new build. |
示例包括:
<pipeline name="webproject">
<materials>
<tfs url="http://10.21.3.210:8080/tfs/New" domain="DOMAIN" username="jim" password="as802nsk9==" projectPath="$/webapp" />
</materials>
...
</pipeline>
<pipeline name="myproject">
<materials>
<tfs url="http://tfshost.tw.com:8080/tfs/DefaultCollection" domain="DOMAIN" username="jim" password="as802nsk9==" projectPath="$/webapp/component/branch" />
</materials>
...
</pipeline>
<包>
The <package>
元素指代作为存储库配置一部分定义的包。
属性
属性 | 必需 | 描述 |
---|---|---|
引用 | 是 | ref 标签保存包的 ID。 |
示例
<cruise>
...
<repositories>
<repository id="repo-id" name="repo-name">
<pluginConfiguration id="plugin-id" version="plugin-version" />
<configuration>
<property>
<key>property-name</key>
<value>property-value</value>
</property>
...
</configuration>
<packages>
<package id="1234-12242-232312" name="sample-package" >
<configuration>
<property>
<key>property-name</key>
<value>property-value</value>
</property>
...
</configuration>
</package>
</packages>
</repository>
</repositories>
<pipelines name="webproject">
...
<pipeline name="webproject">
<materials>
<package ref="1234-12242-232312" />
</materials>
...
</pipeline>
...
</pipelines>
</cruise>
<流水线>
The <pipeline>
元素指定另一个管道中的阶段成功完成后将触发当前管道开始。
如果存在多个管道依赖项,则其中任何一个通过都将触发新管道。
注意,你不能为同一个上游管道指定两个(或更多)依赖项。
属性
属性 | 必需 | 描述 |
---|---|---|
管道名称 | 是 | 此管道所依赖的管道名称。 |
阶段名称 | 是 | 一旦成功完成,将触发此管道的阶段名称。 |
材料名称 | 默认情况下,材料名称是上游管道(管道名称)的名称。如果此材料在管道标签模板中引用,则必需 | 用于标识材料的名称。材料名称可以包含以下字符:a-z、A-Z、0-9、句点、下划线和连字符。不允许使用空格。材料名称不区分大小写。它需要在管道内唯一。最大长度为 255 个字符。 |
忽略调度 | 否(默认为 false) | 控制是否在指定的上游管道/阶段通过时运行管道。
然而,如果流水线通过其他方式触发(例如,通过另一个材料、手动或通过计时器),它将始终拾取由该材料指定的上游流水线阶段的最新成功运行。 |
注意事项:
如果上游流水线阶段已通过,则下游流水线才会运行。
示例
假设有四个流水线:commonLib1
, commonLib2
, Server
和Client
.
我们可以配置这些流水线,使得:
- 当来自流水线
distStage
的阶段commonLib1
通过时,将运行流水线Server
和Client
- 当来自流水线
pkgstage
的阶段commonLib2
通过时,将运行Server
pipeline
相应的配置将是:
<pipeline name="Server">
<materials>
<pipeline pipelineName="commonLib1" stageName="distStage"/>
<pipeline pipelineName="commonLib2" stageName="pkgStage"/>
</materials>
...
</pipeline>
<pipeline name="Client">
<materials>
<pipeline pipelineName="commonLib1" stageName="distStage"/>
</materials>
...
</pipeline>
如果我们希望在阶段Server
流水线,而不是在commonLib2/distStage
通过时运行commonLib1/pkgStage
时运行,我们可以将ignoreForScheduling
标志设置为true
在commonLib1/pkgStage
材料上:
<pipeline name="Server">
<materials>
<pipeline pipelineName="commonLib1" stageName="distStage" ignoreForScheduling="true"/>
<pipeline pipelineName="commonLib2" stageName="pkgStage"/>
</materials>
...
</pipeline>
<阶段>
The <stage>
element specifies a set of jobs. If any job in a given stage fails then the stage will fail. If a stage has an <approval>
configuration with manual type it can only be triggered manually (i.e. a user must click on the trigger button on the UI). If the previous stage has failed, you can still trigger the following stage manually.
注意事项:
一个阶段中至少必须有一个作业。
属性
属性 | 必需 | 描述 |
---|---|---|
名称 | 是 | 名称用于标识流水线中的阶段,因此对于该流水线来说必须是唯一的(不区分大小写)。<pipeline> 阶段名称中可用的字符如下:a-z、A-Z、0-9、句点、下划线和连字符。不允许使用空格。 |
fetchMaterials | 否(默认值:true) | 在代理上执行材料更新或签出操作。将此属性设置为false以跳过此操作。 |
cleanWorkingDir | 否(默认值:false) | 删除代理上的工作目录中的所有文件/目录。默认情况下跳过此操作。 |
artifactCleanupProhibited | 否(默认值:false) | 如果在服务器级别配置了清理工件,则从不为此阶段清理工件。 |
示例
<pipeline name="yourproject">
...
<stage name="ut">
<environmentvariables>
<variable name="FOO"><value>bar</value></variable>
</environmentvariables>
<jobs>
<job name="linux">
<resources>
<resource>linux</resource>
</resources>
<tasks>
<ant target="unit-test" />
</tasks>
</job>
</jobs>
</stage>
</pipeline>
<作业>
The <jobs>
element specify the set of jobs for a stage.
注意:
<jobs>
可以包含多个<job>
元素。这些作业可以在不同的代理上并行运行。
示例
<stage name="ut">
<jobs>
<job name="linux">
<resources>
<resource>linux</resource>
</resources>
<tasks>
<ant target="unit-test" />
</tasks>
</job>
</jobs>
</stage>
<作业>
作业是工作的基本单位。它在代理上执行。作业可以从Go Server获取工件、执行任务并将工件发布回Go Server。
作业还可以关联一组<resources>
或者elastic profile
通过弹性配置文件ID属性。资源用于将作业匹配到代理。弹性配置文件ID用于将作业匹配到弹性代理。如果代理具有作业指定的所有资源或弹性配置文件ID,则它可以运行该作业。
作业不能同时具有资源以及弹性配置文件ID。如果作业没有资源,则它可以由任何代理构建(但不能由弹性代理构建)。
属性
属性 | 必需 | 描述 |
---|---|---|
名称 | 是 | 作业的名称。名称在<stage> 内必须是唯一的(忽略大小写)。名称只能包含:a-z、A-Z、0-9、句点、下划线和连字符。不允许使用空格。 |
runOnAllAgents | 否 | 如果设置为“true”,则作业将在所有能够运行该作业的代理上运行。 |
runInstanceCount | 否 | 如果设置为“x”(整数),则在调度期间将启动“x”个作业实例。环境变量GO_JOB_RUN_INDEX (每个作业的值为1-x)和GO_JOB_RUN_COUNT (每个作业的值为x)将暴露给作业的每个任务。 |
超时 | 否 | 如果作业在一段时间内未生成任何控制台输出,可以配置作业超时。使用此属性定义以分钟为单位的超时值。如果作业不应超时,请将超时定义为0。如果没有定义该属性,则将应用默认级别的超时行为。<server> level timeout behaviour will apply. |
弹性配置文件ID | 否 | 通过指定此属性可以配置作业在弹性代理上运行,该属性映射到现有<agentProfile> 的ID。不得与resources . |
示例
<job name="linux">
<environmentvariables>
<variable name="FOO">
<value>bar</value>
</variable>
</environmentvariables>
<resources>
<resource>linux</resource>
</resources>
<tasks>
<ant target="unit-test" />
</tasks>
</job>
<job name="run-upgrade" runOnAllAgents="true" timeout='30' elasticProfileId="aws.small">
<tasks>
<ant target="upgrade" />
</tasks>
</job>
<job name="run-upgrade" runInstanceCount="5" timeout='30'>
<resources>
<resource>linux</resource>
</resources>
<tasks>
<ant target="upgrade" />
</tasks>
</job>
<资源>
<resources>
指定传递给作业及其任务的资源。作业可以有零个或多个资源。
如果作业没有资源,则可以在任何代理上构建。
示例:
<job name="linux">
<resources>
<resource>jdk5</resource>
<resource>tomcat5</resource>
<resource>mercurial</resource>
</resources>
</job>
<资源>
A <resource>
是一个文本标签,指定作业构建所需的一个资源。代理必须具有指定作业的所有资源才能运行该作业。
验证:
资源不区分大小写。资源名称可以包含字母数字字符、连字符(-)、空格、句点(.)和竖线(|)。
示例:
<resources>
<resource>jdk5</resource>
<resource>tomcat5</resource>
<resource>mercurial</resource>
</resources>
<任务>
<tasks>
指定作为作业一部分运行的任务(如<ant>
, <rake>
等)。
可以有零个或多个任务。这些任务按配置文件中指定的顺序执行。如果一个任务失败,则不会运行后续任务,除非它们有<runif status="failed" />
定义。
为所有任务设置以下环境变量:
属性 | 描述 |
---|---|
GO_SERVER_URL |
包含“/go”的服务器基础URL。例如:http://localhost:8153/go |
GO_PIPELINE_NAME |
作业所属的流水线名称 |
GO_PIPELINE_LABEL |
作业所属的流水线标签 |
GO_STAGE_NAME |
作业所属的阶段名称 |
GO_STAGE_COUNTER |
作业所属阶段的重新运行计数器 |
GO_JOB_NAME |
正在运行的作业名称 |
GO_DEPENDENCY_LABEL_<upstream_pipeline_name>_<upstream_stage_name> |
触发作业所属流水线的上游流水线标签。例如:“GO_DEPENDENCY_LABEL_FRAMEWORK_DEV”是环境变量,其中上游流水线名称为“framework”,上游阶段为“dev”。连字符('-')是环境变量中的非法字符。因此,如果流水线名称或阶段名称包含“-”,它将转换为下划线。例如,“pipeline-foo”与阶段“stage-foo”变为:GO_DEPENDENCY_LABEL_PIPELINE_FOO_STAGE_FOO。 |
GO_TO_REVISION_<material_name> |
构建针对每个配置的SCM材料运行时所依据的最新修改版本。 |
GO_FROM_REVISION_<material_name> |
构建针对每个配置的SCM材料运行时所依据的最早修改版本。 |
示例
<job name="linux">
<tasks>
<ant target="unit-test" />
</tasks>
</job>
<Ant>
指定要运行的Ant构建。假定代理上可从命令行获取Ant。
所有指定的路径均相对于管道工作目录。
属性
属性 | 必需 | 描述 |
---|---|---|
buildfile | 否 | Ant构建文件的路径。如果没有指定,则默认路径为‘build.xml’。 |
target | 否 | 要运行的Ant目标。如果没有指定,则默认目标为‘default’。 |
workingdir | 否 | 调用Ant的目录。 |
示例
-
调用Ant,指定一组要运行的目标:
<tasks> <ant target="-Drun=all clean.ivy.localivy clean ft.long_running"/> </tasks>
-
在特定的工作目录中调用Ant,并带有一组目标:
<tasks> <ant workingdir="build" buildfile="mybuild.xml" target="-Drun=all clean.ivy.localivy clean ft.long_running"/> </tasks>
<执行>
运行指定的命令。如果无法运行该命令或其返回错误,构建将失败。
所有指定的路径均相对于管道工作目录。
属性
属性 | 必需 | 描述 |
---|---|---|
command | 是 | 要执行的命令或脚本,相对工作目录。 |
args | 否 | 要传递给命令或脚本的一组参数(作为单个字符串)。注意,对于复杂或带有引号的参数,我们建议您使用单独的标签为每个参数。<arg> tags for each argument. |
workingdir | 否 | 执行脚本或命令的目录。注意,此目录相对于代理检出材料的目录。 |
示例
-
调用ruby,指定工作目录为:tools/my-ruby-tool并执行ruby脚本:backup.rb.
<tasks> <exec command="/usr/local/bin/ruby" args="backup.rb" workingdir="tools/my-ruby-tool"/> </tasks>
<参数>
指定一个单个参数用于exec命令。
此元素是可选的,可以出现多次。它作为“args”属性的替代方案,但是允许使用任何字符来制作参数。例如,您可以使用xml转义格式指定双引号:"。exec, but it allows the use of any character required for making argument. For example, you can specify double quote using the xml escaped format: "
**注意:**在Windows上运行命令时,Go不会通过系统外壳程序(cmd.exe)启动您的命令,因此您不能直接使用外壳程序命令(如echo)。如果您愿意,可以将外壳程序命令作为参数传递给cmd.exe。
在Windows上,您应该指定脚本文件的完整名称,例如“mybuild.bat”。(仅指定“mybuild”将不起作用)
示例
-
在Windows上输出内容:
<exec command="cmd"> <arg>/c</arg> <arg>echo</arg> <arg>something to print out</arg> </exec>
-
使用管道字符运行命令:
<exec command="MsBuild"> <arg>D:\projects\project\project-8.sln</arg> <arg>/REBUILD</arg> <arg>/CFG="Release_99|Win32"</arg> </exec>
<Nant>
指定要运行的NAnt构建。假定代理上可从命令行获取NAnt。
所有指定的路径必须相对于管道工作目录。
属性
属性 | 必需 | 描述 |
---|---|---|
buildfile | 否 | NAnt构建文件的路径。如果没有指定,默认路径为‘default.build’。路径相对于沙盒目录,且不能位于沙盒之外。 |
target | 否 | 要运行的NAnt目标。如果没有指定,默认为目标文件的默认目标。 |
workingdir | 否 | 调用NAnt的目录。 |
nantpath | 否 | 安装NAnt的目录路径。默认情况下,Go假定NAnt位于系统环境变量${PATH}中。如果指定了路径,则所有运行该任务的代理中的路径必须相同。 |
示例
调用NAnt,指定一组要运行的目标:
<tasks>
<nant buildfile="myproject.build" target="smoke-test"/>
</tasks>
<Rake>
指定要运行的Rake构建。假定代理上可从命令行获取Ruby和Rake。
所有指定的路径必须相对于管道工作目录。
属性
属性 | 必需 | 描述 |
---|---|---|
buildfile | 否 | Rake文件的路径。如果没有指定,默认路径为‘rakefile’。路径不能以‘.’开头。 |
target | 否 | 要运行的Rake目标。如果没有指定,默认为目标文件的默认目标。 |
workingdir | 否 | 调用Rake的目录。 |
示例
调用rake,指定一组要运行的目标:
<tasks>
<rake buildfile="rakefile" target="smoke-test"/>
</tasks>
<获取构件>
获取工件来自:
- 1. 同一管道的前一阶段,或者
- 2. 该管道直接或间接依赖的管道的阶段(祖先管道)。
当指向父/祖先管道时,获取任务可以从上游阶段或之前的阶段拉取工件。此限制是在12.2版中引入的。无法从上游阶段之后的阶段获取工件,因为当获取调用执行时,这些阶段可能尚未完成。
所有指定的文件路径均相对于管道工作目录。
属性
属性 | 必需 | 描述 |
---|---|---|
artifactOrigin | 是 | 指示工件需要从何处拉取。支持的值是gocd 和external . gocd 表示工件需要从gocd服务器获取,external 表示工件必须从外部工件存储中获取。 |
pipeline | 否 | 此值可以是:1. 作业所在的管道所依赖的上游管道名称。该管道应添加为依赖项下,或者2. 当前管道的祖先管道的层次结构。例如,“BuildPipeline/AcceptancePipeline”表示获取任务尝试从其祖先“BuildPipeline”中获取工件。给定的层次结构表示当前管道依赖于“AcceptancePipeline”,而“AcceptancePipeline”又依赖于“BuildPipeline”,这是根据materials中给出的依赖关系定义。如果未指定,则默认为当前管道。<materials> , or 2. the hierarchy of an ancestor pipeline of the current pipeline. Example, The value “BuildPipeline/AcceptancePipeline” denotes that the fetch task attempts to fetch artifacts from its ancestor ‘BuildPipeline’. The given hierarchy denotes that the current pipeline depends on ‘AcceptancePipeline’ which in turn depends on ‘BuildPipeline’ using the dependency material definition given under materials. Defaults to current pipeline if not specified. |
stage | 是 | 要从中获取工件的阶段名称 |
作业 | 是 | 要从中获取工件的作业名称 |
源目录 | 如果制品来源是,则为 srcdir/srcfile 之一gocd |
特定作业的制品目录路径,相对于沙盒目录。如果目录不存在,则作业将失败。如果 artifactOrigin 是,则应指定。gocd . |
源文件 | 如果制品来源是,则为 srcdir/srcfile 之一gocd |
特定作业的制品文件路径。如果 artifactOrigin 是,则应指定。gocd . |
目标 | 否 | 制品获取到的目录路径。如果该目录已存在,则会被覆盖。目录路径相对于流水线工作目录。如果 artifactOrigin 是,则应指定。gocd . |
制品ID | 如果制品来源是,则需要指定external |
上游作业中由插件发布的外部制品的ID。如果制品来源是,则应指定。external . |
配置 | 否 | '一个列表key -value 定义插件配置的键值对。如果制品来源是,则应指定。external . |
注意:如果文件不存在,作业将失败。如果制品未更改,Go 不会再次获取制品。目录路径相对于流水线工作目录。
示例:
-
从同一流水线的前一阶段获取“pkg”目录中的所有制品,并将其放置在“lib”目录下。
<pipelines> <pipeline name="go"> ... <stage name="dev"> <jobs> <job name="unit"> <artifacts> <artifact type="build" src="target/deployable.jar" dest="pkg"/> <artifact type="external" id="artifact_jar" storeId="dummy-s3"> <configuration> <property> <key>Filename</key> <value>target/deployable.jar</value> </property> </configuration> </artifact> </artifacts> </job> </jobs> </stage> <stage name="ft"> <jobs> <job name="functional"> <tasks> <fetchartifact artifactOrigin="gocd" stage="dev" job="unit" srcdir="pkg" dest="lib"/> <fetchartifact artifactOrigin="external" stage="dev" job="unit" artifactId="artifact_jar"> <configuration> <property> <key>dest_on_agent</key> <value>release_candidate.jar</value> </property> </configuration> </fetchartifact> </tasks> </job> </jobs> </stage> </pipeline> </pipelines>
-
从上游流水线“framework”的某个阶段获取单个制品,并将其放置在“lib”目录下。
<pipeline name="go"> <materials> <pipeline name="framework" stage="ft"/> </materials> <stage name="dev"> <jobs> <job name="unit"> <tasks> <fetchartifact origin="gocd" pipeline="framework" stage="dev" job="unit" srcfile="pkg/deployable.jar" dest="lib" /> </tasks> </job> </jobs> </stage> </pipeline>
-
从祖先流水线“Build”的某个阶段获取单个制品,并将其放置在“pkg”目录下。
<pipeline name="deploy"> <materials> <pipeline name="acceptance" stage="ft"/> </materials> <stage name="deply-pkg"> <jobs> <job name="deploy-win"> <tasks> <fetchartifact origin="gocd" pipeline="build" stage="dist" job="create-installer" srcfile="installers/deployable-setup.exe" dest="installer" /> </tasks> </job> </jobs> </stage> </pipeline>
<运行条件>
指定任务应在何时运行。每个任务可以定义多个条件。
在代理上运行的作业有两个可能的状态:通过或失败。作业默认状态为“通过”。如果有任何任务失败,则状态变为“失败”。
任务可以指定三种可能的 runif 过滤器之一:“通过”、“失败”或“任意”。(默认值为“通过”)
属性
属性 | 必需 | 描述 |
---|---|---|
状态 | 是 | 状态是作业的当前状态。值应该是“通过”、“失败”或“任意”之一。 |
注意事项:
<runif>
还可以定义在<exec>
任务下,即使<exec>
存在一些<arg>
条件,例如
<exec command="echo">
<arg value="test" />
<runif status="passed" />
</exec>
示例
假设一个作业的任务顺序如下:
<tasks>
<ant buildfile="build.xml" target="complie-test-source"/>
<fetchartifact origin="gocd" pipeline="my_app" stage="dist" job="package-artifact" srcdir="pkg">
<runif status="passed"/>
</fetchartifact>
<exec command="./copy_error_log_to_someplace" >
<runif status="failed"/>
</exec>
</tasks>
#场景一:
如果任务 1<ant>
通过,则任务 2<fetchartifact>
将被执行。
如果任务 2<fetchartifact>
通过,则任务 3<exec>
不会被执行。
如果任务 2<fetchartifact>
失败,则任务 3<exec>
将被执行。
#场景二:
如果任务 1<ant>
失败,则任务 2<fetchartifact>
不会被执行。
而任务 3<exec>
将被执行。
<取消时运行>
指定当阶段被取消时要执行的任务。只能在<oncancel>中定义一个任务。<oncancel>
.
如果作业在分配阶段被取消,则作业不会开始准备。
如果作业在准备阶段被取消,准备将完成,但不会执行任何任务。
如果作业在构建阶段被取消:
- 如果当前正在运行的任务没有定义,则<oncancel>中定义的任务将立即执行。一旦原始任务和<oncancel>任务都完成,将不会执行其他任务。
<oncancel>
defined, the task will be killed - 如果当前正在运行的任务已经定义,则<oncancel>中定义的任务将立即执行。一旦原始任务和<oncancel>任务都完成,将不会执行其他任务。
<oncancel>
defined, the task defined within<oncancel>
will execute immediately. As soon as both the original task and the<oncancel>
task are completed, no other tasks will execute
如果作业在完成阶段被取消,代理将忽略请求并按计划完成。
示例
任务“start_server”在代理上启动一个进程。当阶段被取消时,代理将调用取消任务“kill_server”以提前终止进程并清理多余文件。
<tasks>
<ant target="start_server">
<oncancel>
<ant target="kill_server" />
</oncancel>
</ant>
</tasks>
<构件>
<artifacts>
指定代理将发布到服务器或外部制品存储的文件。
示例
<job name="unit">
<artifacts>
<artifact type="build" src="target/deployable.jar" dest="pkg"/>
<artifact type="test" src="target/junit-output" dest="junit"/>
<artifact type="external" id="docker-image" storeId="dockerhub">
<configuration>
<property>
<key>Image</key>
<value>gocd/gocd-demo</value>
</property>
<property>
<key>Tag</key>
<value>v${GO_PIPELINE_COUNTER}</value>
</property>
</configuration>
</artifact>
</artifacts>
</job>
<构件>
将构建或测试制品发布到作业的制品存储库。src 属性应指向包含测试输出文件的文件夹。如果制品类型为,则 Go 将使用这些信息生成测试报告。测试信息将显示在“Tests”子选项卡中。test
. Test
information is placed in the Tests sub-tab.
属性
属性 | 必需 | 描述 |
---|---|---|
类型 | 是 | 类型可以是build 或test 。这标识上传到 GoCD 服务器的制品类型。 |
源 | 是,如果类型是build 或test |
要发布到服务器的文件或文件夹。Go 仅上传作业工作目录中的文件。可以使用通配符指定要上传的文件和文件夹:** 表示任意路径,* 表示任意文件或文件夹名。如果类型是,则应指定。build 或test |
目标 | 否 | 目标相对于服务器端当前实例的制品文件夹。如果没有指定,则制品将存储在制品目录的根目录。如果类型是,则应指定。build 或test |
ID | 是,如果类型是external |
外部制品的制品ID。此ID可以在下游获取任务中使用。如果类型是,则应指定。external . |
storeId | 是,如果类型是external |
引用现有全局制品存储的制品存储ID。如果类型是,则应指定。external . |
配置 | 否 | '一个列表key -value 定义插件配置的键值对。如果类型是,则应指定。external . |
在构建或测试制品的情况下,可以使用通配符指定要上传到 Go 服务器的文件。通配符语法遵循常用的 ant/nant 样式。因此,“target/**/*.xml”将上传目标目录及其所有子目录中的所有 xml 文件。原始目录结构在服务器上得以保留。
构建制品的示例
<job name="unit">
<artifacts>
<artifact type="build" src="target/deployable.jar" dest="pkg"/>
</artifacts>
</job>
<job name="unit">
<artifacts>
<artifact type="build" src="target/**/*Test.xml" dest="pkg"/>
</artifacts>
</job>
以下将所有 xml 文件上传到服务器的制品存储库。
<job name="unit">
<artifacts>
<artifact type="build" src="target/**/*.xml" />
</artifacts>
</job>
测试制品的示例
<job name="unit">
<artifacts>
<artifact type="test" src="target/junit-output" dest="junit"/>
</artifacts>
</job>
外部制品的示例
<job name="build_image">
<artifacts>
<artifact type="external" id="docker-image" storeId="dockerhub">
<configuration>
<property>
<key>Image</key>
<value>gocd/gocd-demo</value>
</property>
<property>
<key>Tag</key>
<value>v${GO_PIPELINE_COUNTER}</value>
</property>
</configuration>
</artifact>
</artifacts>
</job>
<选项卡>
The <tabs>
元素允许您在作业详细信息页面中添加选项卡。您可以将任何可以通过Web浏览器呈现的工件放入选项卡中。例如,如果您的覆盖率工具生成了HTML报告,则可以轻松地将该报告放入选项卡中。选项卡实现为iframe(参见W3C iframe定义)。
示例:
<job name="unit">
<artifacts>
<artifact type="build" src="target/jcoverage" dest="Jcoverage"/>
</artifacts>
<tabs>
<tab name="coverage" path="Jcoverage/index.html"/>
</tabs>
</job>
<选项卡>
使用特定名称和工件定义一个选项卡以显示内容。
属性
属性 | 必需 | 描述 |
---|---|---|
名称 | 是 | 选项卡的名称。应该在此作业中唯一。 |
路径 | 是 | 在作业的工件存储库中的文件相对路径。 |
示例:
假设代理端的“target/Jcoverage”文件夹中有一些覆盖率信息,我们通过指定带有index.html文件的选项卡来配置一个选项卡以显示覆盖率信息。
<job name="unit">
<artifacts>
<artifact type="build" src="target/jcoverage" dest="Jcoverage"/>
</artifacts>
<tabs>
<tab name="coverage" path="Jcoverage/index.html"/>
</tabs>
</job>
<批准>
指定如何触发阶段。<approval>
类型为“手动”或“成功”的可以用于在阶段开始时停止管道执行,并且只能在管道活动页面、阶段详细信息页面或通过RESTful URL手动批准后恢复。
属性
属性 | 必需 | 描述 |
---|---|---|
类型 | 是 | “手动”或“成功”之一。“手动”表示阶段需要手动批准。“成功”表示当上一阶段通过时,该阶段将自动触发。 |
allowOnlyOnSuccess | 否 | 将此属性设置为“true”将确保只有在上一阶段(如果有)成功时才能触发该阶段。 |
注意事项:
<approval>
必须是第一个子元素<stage>
.- 如果未指定批准,则行为与“成功”相同,即当上一阶段通过时,该阶段将自动触发。
- 如果未指定属性
allowOnlyOnSuccess
,则行为与相同false
.
示例:
<stage name="ut">
<approval type="manual" allowOnlyOnSuccess="true"/>
...
</stage>
<授权>
您可以使用<authorization>
在<approval>
下具有“手动”或“成功”类型的元素来指定谁可以批准此阶段。有两个子元素:<user>
和<role>
.
示例
<approval type="manual">
<authorization>
<user>lqiao</user>
<role>go_admins</role>
</authorization>
</approval>
<approval type="success">
<authorization>
<user>lqiao</user>
<role>go_admins</role>
</authorization>
</approval>
<模板>
The <templates>
元素指定服务器已知的模板集。
<流水线>
允许您提供流水线定义的模板
属性
属性 | 必需 | 描述 |
---|---|---|
名称 | 是 | 流水线模板的标识符 |
示例
<cruise>
...
<pipelines group="studios" >
<pipeline name="yourproject" template="project-template" >
<materials>
<svn url="http://your-svn/"/>
</materials>
</pipeline>
</pipelines>
<templates>
<pipeline name="project-template">
<authorization>
<admins>
<user>jez</user>
</admins>
</authorization>
<stage name="ut">
<jobs>
<job name="linux">
<resources>
<resource>linux</resource>
</resources>
<tasks>
<ant target="unit-test" />
</tasks>
</job>
</jobs>
</stage>
</pipeline>
</templates>
</cruise>
<环境>
The <environments>
元素指定服务器已知的环境集。
<环境>
允许您将一组代理和流水线组合在一起以供专有使用。
属性
属性 | 必需 | 描述 |
---|---|---|
名称 | 是 | 环境的标识符 |
示例
<cruise>
...
<pipelines group="studios" />
<pipeline name="yourproject" labeltemplate="foo-1.0.${COUNT}" >
...
</pipeline>
</pipelines>
<environments>
<environment name="UAT">
<environmentvariables>
<variable name="FOO"><value>bar</value></variable>
</environmentvariables>
<pipelines>
<pipeline name="yourproject"/>
</pipelines>
</environment>
</environments>
</cruise>
<环境变量>
<environmentvariables>
指定传递给作业及其任务的变量。可以在<pipeline>
, <stage>
, <job>
或者<environment>
中指定这些变量。如果相同的环境变量在同一运行作业的代理或者作业所在的流水线/阶段/环境中被定义,则优先级顺序为<job>
, <stage>
, <pipeline>
, <environment>
和系统环境变量。例如,在作业中定义的变量“FOO”会覆盖在作业的阶段中定义的变量。
<变量>
A <variable>
定义将传递给作业的变量名和属性值。当作业运行时,它将被设置在系统环境中。值可以包括多行或CDATA。注意,行为取决于操作系统。您的操作系统可能不允许某些变量名和/或值。
属性
属性 | 必需 | 描述 |
---|---|---|
名称 | 是 | 环境变量的标识符 |
安全 | 否 | 此属性仅适用于流水线级别,并且当设置为true时,加密环境变量的值。 |
示例:
<environmentvariables>
<variable name="FOO"><value>bar</value></variable>
<variable name="MULTIPLE_LINES"><value>multiplelines</value></variable>
<variable name="COMPLEX"><value>![CDATA[This has very <complex> data]]</value></variable>
</environmentvariables>
<流水线集合>
The <pipelines>
元素内的<environment>
元素指定其引用的流水线集合。
<流水线>
引用与此环境关联的流水线。
属性
属性 | 必需 | 描述 |
---|---|---|
名称 | 是 | 标识符到一个流水线(必须存在于配置文件中)。 |
示例
<environment name="UAT">
<pipelines>
<pipeline name="yourproject"/>
</pipelines>
</environment>