根据https://docs.gitlab.com/runner/install/linux-repository.html#upgrading-to-gitlab-runner-10,仓库已更改,因此我们尝试更新所有节点的gitlab-runner。 我们需要删除旧仓库并添加新仓库,然后更新软件包。
在我们的人偶清单[1]上,我们更新了仓库,确保软件包的最新版本,并且在此更新之后,我们必须先运行脚本,然后再确保服务正在运行。 我们的问题是,我们应该仅在更新后运行此脚本。
现在,即使回购已更新,程序包也不会更新。仅当运行distro_sync或运行“ yum update gitlab-runner ”时,才更新软件包,而决不通过运行木偶程序。似乎该软件包从未更新过,就好像它正在检查旧仓库的最新版本,而不是与最近添加的仓库进行比较。
[1]
# Installs a GitLab-CI runner for CERN GitLab
class gitlab::gitlab_ci_runner (
String $ensure = 'latest', # passed to the gitlab-runner package. Can be used to force a version
) {
ensure_resource('yumrepo', 'gitlab-runner', {
descr => 'gitlab-runner for EL6/7',
baseurl => "http://packages.gitlab.com/runner/gitlab-runner/el/${::operatingsystemmajorrelease}/${::architecture}",
gpgcheck => 0,
enabled => 1,
exclude => absent,
})
ensure_packages(['gitlab-runner'], {
ensure => $ensure,
require => Yumrepo['gitlab-runner'],
})
exec {"post-install":
command => 'sudo /usr/share/gitlab-runner/post-install',
provider => shell,
onlyif => 'test -e /usr/share/gitlab-runner/post-install',
refreshonly => true,
subscribe => Package['gitlab-runner'],
}
service { 'gitlab-runner':
ensure => running,
enable => true,
require => [Package['gitlab-runner'], Exec["post-install"]]
}
}
答案 0 :(得分:2)
出现此现象的原因是因为puppet在资源的目录应用之前预取了包资源的存储库元数据。请注意yum源代码here和常规提供者here的当前状态的相关源代码。请注意,链接代码的广泛功能并未随时间而改变,因此,尽管细微之处可能会发生变化,但总体行为仍会/不会。
由于这个原因,在应用资源之前确定软件包的latest
版本。因此,根据您的情况,在目录编译时您所预订的存储库将确定软件包的latest
版本。在目录应用期间您的存储库订阅更改不会影响ensure => latest
的行为。
您可能会猜到,确保特定版本仍将具有预期的效果,因为它将利用新的存储库,并且不会发生与latest
有关的资源预取(仍然会进行其他预取)。或者,连续的目录应用程序将对ensure => latest
具有所需的效果。总结一下,您的解决方法如下:
ensure => <version>
,您可以在其中指定确切的版本或版本发布,例如10.0.5-el7
。正如人们所期望的,关于资源预取的大量其他信息来源是Gary的博客文章here。向下滚动到以“预取,刷新,缓存和其他”开头的标题。请注意有关Gary的博客具有“强语言”的常规注意事项。对此的官方文档基本上是没有用的。