Yum存储库轮询器

注意:此插件适用于安装了repoquery的Linux节点上运行的GoCD服务器(yum-utils包的一部分) UbuntuCentOS

介绍

Yum respository轮询器是一个捆绑的package material插件,可以查询rpm包的yum存储库。 GoCD服务器通过包装材料插件接口与此插件进行交互。 该插件使用类似于以下的命令来轮询服务器。 所以它不依赖于yum依赖于的文件。 /etc/yum.repos.d下的文件

repoquery --repofrompath=uuid,$REPO_URL --repoid=uuid -q $PACKAGE_SPEC -qf "%{LOCATION}..."

如果repoquery将单个包作为输出返回,则给定的轮询实例会被视为成功。 <!--

Turn your Maven Nexus Repo into a Yum repo

Using the Yum plugin for Nexus, it is possible to automatically create and publish Java artifacts as rpms using the rpm-maven-plugin and consume them on the deployment side using rpm or yum. There is a Go webinar that describes this set up. -->

存储库定义

存储库网址必须是有效的http,https或文件网址。 该插件查找$REPO_URL/repodata/repomd.xml的存在以确定有效性。 http和https存储库支持基本身份验证(user:password@domain/path)。

包定义

在这个插件的情况下,包的定义完全由包规范确定。 软件包规格可以采用以下任何一种格式。 有关详细信息,请参阅repoquery手册页

name
name.arch
name-ver
name-ver-rel
name-ver-rel.arch
name-epoch:ver-rel.arch
epoch:name-ver-rel.arch

Shell glob patterns也可以使用。 例如,假设我们有一个正在开发的组件准备发布1.2.0版本。 我们为该版本削减了一个分支,并将主干/主版本升级到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。

包元数据

插件访问以下rpm元数据

  1. BuildTime(必需,由rpmbuild自动设置) - 由插件用来验证包是否比GoCD上次看到的包新。 GoCD将此字段显示为Modified On
  2. Packager - GoCD将这个字段显示为 Modified By 。 如果未提供,则显示为匿名
  3. URL - 由GoCD显示为Trackback URL以此作为追溯到发布软件包(在GoCD或外部)到yum存储库的作业的手段。
  4. BuildHost - 由GoCD显示为备注:建立在$BUILDHOST

发布的环境变量

以下信息可用作任务的环境变量:

  1. GO_PACKAGE_< REPO-NAME >_< PACKAGE-NAME >_LABEL
  2. GO_REPO_< REPO-NAME >_< PACKAGE-NAME >_REPO_URL
  3. GO_PACKAGE_< REPO-NAME >_< PACKAGE-NAME >_PACKAGE_SPEC
  4. GO_PACKAGE_< REPO-NAME >_< PACKAGE-NAME >_LOCATION

个别插件可以通过额外的环境变量提供额外的信息。

下载RPMs

比方说,我们建立一个名为ORA的存储库,指向http://public-yum.oracle.com/repo/OracleLinux/OL6/latest/x86_64 并定义一个包含gcc-4.*规范的包gcc并将其设置为作为管道材料。 要在代理上本地下载软件包,我们可以编写如下所示的任务:

[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 'http://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 'http://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>

安装RPM

对于自包含的软件包(除了目标节点上已安装的软件外,没有其他外部依赖项),就足够了:

rpm -U /path/to/downloaded/pkg.rpm

另一方面,如果软件包不是独立的,我们运行:

yum install $GO_PACKAGE_ORA_GCC_LABEL

这将要求/etc/yum.repos.d包含存储库定义。

创建和发布RPM

尽管在GoCD中作为材料的支持并不关心包的创建和发布方式,但这里有一组指向网络信息的指针。

笔记

  1. 该插件将在每分钟最多一次修订包检测(GoCD材料轮询的默认间隔)时检测。如果在两次轮询之间的时间间隔内将多个版本的软件包发布到回购站,GoCD将仅在该时间间隔内注册最新版本。
  2. 该插件利用rpm元数据中的构建时间来确定轮询是否返回了新结果。如果由于某种原因(例如时区配置错误),pkg-1.1的构建时间小于pkg-1.0的构建时间,那么插件将不会将pkg-1.1注册为新的包。
  3. 更新rpm的唯一方法是更改​​版本或版本。 重新发布具有相同名称的另一个文件和不同的buildtime不会这样做。
  4. 软件包组不受支持。
  5. GoCD命令存储库有一些与rpm包相关的命令。

results matching ""

    No results matching ""