Jenkins puppet检测文件是否已更改,但不';我不能改变它

Jenkins puppet检测文件是否已更改,但不';我不能改变它,jenkins,puppet,rhel,Jenkins,Puppet,Rhel,我想用puppet管理jenkins服务的config.xml文件。问题是,如果Puppet更改config.xml文件并重新启动jenkins服务,则当前加载的jenkins配置会覆盖config.xml文件,并且Puppet所做的更改将丢失 这就是我现在拥有的: file { '/var/lib/jenkins/config.xml': source => 'puppet:///modules/jenkins/config.xml', owner => je

我想用puppet管理jenkins服务的config.xml文件。问题是,如果Puppet更改config.xml文件并重新启动jenkins服务,则当前加载的jenkins配置会覆盖config.xml文件,并且Puppet所做的更改将丢失

这就是我现在拥有的:

file { '/var/lib/jenkins/config.xml':
  source    => 'puppet:///modules/jenkins/config.xml',
  owner     => jenkins,
  group     => jenkins,
  mode      => '0644'
}

service { 'jenkins':
  ensure    => running,
  enable    => true,
  subscribe => File['/var/lib/jenkins/config.xml']
}
我的方法是停止jenkins服务,然后复制config.xml并再次启动服务。。。当然,服务不应该在每次puppet运行时停止并再次启动,但只有在config.xml发生更改时才应该停止并重新启动。我不知道如何处理木偶,即使可能。有什么想法吗

任何帮助都将不胜感激

file { '/var/lib/jenkins/config.xml':
  source    => 'puppet:///modules/jenkins/config.xml',
  owner     => jenkins,
  group     => jenkins,
  mode      => '0644',
  notify  => Service["jenkins"]
}

service { 'jenkins':
  ensure    => running,
  enable    => true,
  subscribe => File['/var/lib/jenkins/config.xml']
}

这将在文件的初始创建或更改时通知服务jenkins。

这对于puppet来说是一件痛苦的事情,但一种方法是检测对暂存文件的更改,然后使用exec对文件更改进行排序:

file { '/some/staging/path/config.xml':
  source    => 'puppet:///modules/jenkins/config.xml',
  owner     => jenkins,
  group     => jenkins,
  mode      => '0644',
  notify => Exec['Update Jenkins Config']
}

exec { 'Update Jenkins Config':
  command     => '/sbin/service jenkins stop && /bin/cp /some/staging/path/config.xml /var/lib/jenkins/config.xml && /sbin/service jenkins start',
  refreshonly => true
}

另一种方法是使用。 下面是一个例子:

transition { 'stop jenkins service':
  resource   => Service['jenkins'],
  attributes => { ensure => stopped },
  prior_to   => File['/var/lib/jenkins/config.xml'],
}    

file { '/var/lib/jenkins/config.xml':
  source    => 'puppet:///modules/jenkins/config.xml',
  owner     => jenkins,
  group     => jenkins,
  mode      => '0644',
}

service { 'jenkins':
  ensure    => running,
  enable    => true,
}

在这种情况下,请将文件的所有者设置为root/root,以阻止Jenkins对其进行更改。谢谢您的回复@BMW。我尝试了你的建议,但它不起作用,因为puppet以root用户身份启动jenkins服务,因此jenkins服务可以将config.xml文件的所有者更改回jenkins:jenkins。感谢你的解决方案,我将在周一测试它。