Yum存储库轮询器
注意:该插件适用于在具有repoquery安装(yum-utils包的一部分)的Linux节点上运行的GoCD服务器。yum-utils包)。
介绍
Yum存储库轮询器是一个软件包材料插件,能够对yum存储库中的rpm软件包进行轮询。在GoCD之前23.1.0
该插件与GoCD捆绑在一起,但现在可以从GitHub下载进行安装在GitHub上.
GoCD服务器通过软件包材料插件接口与此插件交互。该插件使用类似于以下命令来轮询服务器。因此,它不依赖于yum所依赖的文件,例如/etc/yum.repos.d下的文件。
repoquery --repofrompath=uuid,$REPO_URL --repoid=uuid -q $PACKAGE_SPEC -qf "%{LOCATION}..."
如果repoquery返回一个软件包作为输出,则认为给定的轮询实例是成功的。
存储库定义
存储库URL必须是有效的http、https或file URL。此插件查找$REPO_URL/repodata/[repomd.xml]以确认其有效性。基本身份验证(user:password@domain/path)支持http和https存储库。
软件包定义
在这种插件的情况下,软件包定义完全由软件包规范确定。软件包规范可以采用以下任何格式。请参考repoquery手册页获取详细信息。
name
name.arch
name-ver
name-ver-rel
name-ver-rel.arch
name-epoch:ver-rel.arch
epoch:name-ver-rel.arch
可以使用shell通配符模式。例如,假设我们有一个正在开发中的组件,准备发布版本1.2.0。我们在trunk/master上切出一个分支并将版本提升到1.3.0。因此,由trunk/master生成的软件包可能看起来像mycomp-1.3.0-b72349-noarch.rpm,而由分支生成的软件包可能看起来像mycomp-1.2.0-b72344-noarch.rpm。现在,如果我们有一个仅对1.2系列软件包感兴趣的部署流水线,软件包规范需要是mycomp-1.2.*而不是仅仅mycomp。 may also be used. For example, say we have a component under development getting ready for release of version 1.2.0. We cut a branch for the release and bump up the version on trunk/master to 1.3.0. Thus, a package generated by trunk/master may look like mycomp-1.3.0-b72349-noarch.rpm while that generated by branch may look like mycomp-1.2.0-b72344-noarch.rpm. Now if we have a deployment pipeline that is only interested in 1.2 series packages, the package spec needs to be mycomp-1.2.* rather than just mycomp.
软件包元数据
插件访问以下rpm元数据 is accessed by the plugin
- 构建时间(必需,由rpmbuild自动设置)- 用于插件验证软件包是否比GoCD最后看到的新。GoCD将此字段显示为修改于.
- 打包者 - GoCD将此字段显示为最后修改人如果未提供,则显示为匿名。
- URL - 显示为回溯URL由GoCD显示。将此用作追踪发布软件包的工作的方法(在GoCD内或外部)到yum存储库。
- 构建主机 - 由GoCD显示为注释:构建于$BUILDHOST
已发布的环境变量
下列信息作为任务的环境变量提供:
- GO_PACKAGE_< REPO-NAME >_< PACKAGE-NAME >_LABEL
- GO_REPO_< REPO-NAME >_< PACKAGE-NAME >_REPO_URL
- GO_PACKAGE_< REPO-NAME >_< PACKAGE-NAME >_PACKAGE_SPEC
- GO_PACKAGE_< REPO-NAME >_< PACKAGE-NAME >_LOCATION
单个插件可以通过其他环境变量提供额外的信息。
下载RPMs
假设我们设置了一个名为ORA的存储库,指向https://public-yum.oracle.com/repo/OracleLinux/OL6/latest/x86_64/并定义了一个gcc软件包,规格为gcc-4.*并将其设置为流水线的材料。要在代理上本地下载该软件包,我们可以编写如下任务:
[go] Start to execute task: <exec command="/bin/bash" >
<arg>-c</arg>
<arg>curl -o /tmp/gcc.rpm $GO_PACKAGE_ORA_GCC_LOCATION</arg>
</exec>
当任务在代理上执行时,环境变量会替换为以下内容:
[go] Start to execute task: <exec command="/bin/bash" >
<arg>-c</arg>
<arg>curl -o /tmp/$GO_PACKAGE_ORA_GCC_LABEL.rpm $GO_PACKAGE_ORA_GCC_LOCATION</arg>
</exec>.
...
[go] setting environment variable 'GO_PACKAGE_ORA_GCC_LABEL' to value 'gcc-4.4.7-3.el6.x86_64'
[go] setting environment variable 'GO_REPO_ORA_GCC_REPO_URL' to value 'https://public-yum.oracle.com/repo/OracleLinux/OL6/latest/x86_64'
[go] setting environment variable 'GO_PACKAGE_ORA_GCC_PACKAGE_SPEC' to value 'gcc-4.*'
[go] setting environment variable 'GO_PACKAGE_ORA_GCC_LOCATION' to value 'https://public-yum.oracle.com/repo/OracleLinux/OL6/latest/x86_64/getPackage/gcc-4.4.7-3.el6.x86_64.rpm'
...
或者,简单地将其作为参数传递给远程服务器上的部署脚本
<exec command="/bin/bash">
<arg>-c</arg>
<arg>ssh server "cd /to/dest/dir;deploy.sh $GO_PACKAGE_ORA_GCC_LOCATION"</arg>
</exec>
安装RPMs
对于独立的软件包(除了目标节点上已经安装的内容外没有外部依赖项),只需执行以下操作即可:
rpm -U /path/to/downloaded/pkg.rpm
另一方面,如果软件包不是独立的,我们将运行以下命令:
yum install $GO_PACKAGE_ORA_GCC_LABEL
这将要求/etc/yum.repos.d包含存储库定义。
创建和发布RPMs
虽然GoCD中对包作为材料的支持不涉及包是如何创建和发布的,这里是一些关于网络上信息的简短指南。
- 使用rpmbuild和SPEC文件构建RPM
- 使用fpm构建
- 教程使用createrepo设置本地yum存储库。发布到yum存储库只需要将新的包修订版上传/复制到正确的位置并运行
createrepo --update
注意事项
- 此插件每分钟最多检测一个包修订版(GoCD材料轮询的默认间隔)。如果在两次轮询之间的时间段内向存储库发布多个包版本,GoCD只会注册该时间段内的最新版本。
- 此插件使用rpm元数据中的构建时间来判断轮询是否返回了新结果。如果由于某种原因(例如时区配置错误),pkg-1.1的构建时间小于pkg-1.0,则插件不会将pkg-1.1注册为较新的包。
- 更新RPM的唯一方法是更改版本或发行号。再次发布具有相同名称但不同构建时间的另一个文件将无法更新。
- 不支持包组。