【问题标题】:Chef: Refactor Jenkins security script to own recipe fileChef:重构 Jenkins 安全脚本以拥有自己的配方文件
【发布时间】:2018-10-11 05:17:25
【问题描述】:

我目前正在使用Chef's Jenkins supermarket cookbook 来部署一个 Jenkins 实例。作为该部署的一部分,我的秘诀包括安装 Jenkins、安装特定插件版本、启用安全性以及为 Jenkins 创建管理员帐户。

我目前正在为此使用单个配方文件。为启用安全性和创建管理员帐户而执行的脚本如下:

 jenkins_script 'activate global security' do
  command <<-EOH.gsub(/^ {4}/, '')
      import jenkins.model.*
      import hudson.security.*

      def instance = Jenkins.getInstance()

      def hudsonRealm = new HudsonPrivateSecurityRealm(false)
      hudsonRealm.createAccount("Administrator","administrator_passwd")
      instance.setSecurityRealm(hudsonRealm)
      instance.save()

      def strategy = new GlobalMatrixAuthorizationStrategy()
        strategy.add(Jenkins.ADMINISTER, "Administrator")
        instance.setAuthorizationStrategy(strategy)

      instance.save()
  EOH

  notifies :restart, 'runit_service[jenkins]', :immediately

 end

脚本激活安全性,使用密码创建 Jenkins 管理员用户,然后重新启动 Jenkins 实例。据我了解,jenkins_script 资源针对 Jenkins master 执行 Java 或 Groovy 命令,并不是幂等的。

由于脚本不是幂等的,如果配方在初始运行后的后续时间在节点上运行,则 chef-client 运行失败,因为已启用安全性并且已创建管理员用户。

我的想法是将这个安全启用脚本移到它自己的配方文件中,然后在需要启用安全性时在节点的运行列表中指定安全配方。如果已经启用了安全性,我们就不会从运行列表中添加/删除安全配方。

  • 这是解决此问题的合理方法吗?
  • 如果这是一种合理的方法,是否应该像刚才一样简单 创建另一个 ruby​​ 文件,将安全代码转储到其中,然后 在初始配方之后将其添加到节点的运行列表中 詹金斯安装?

【问题讨论】:

    标签: security jenkins chef-infra cookbook


    【解决方案1】:

    您不必重新启动 Jenkins 即可配置安全性。

    【讨论】:

    • 我注意到,当我实施安全性然后尝试在不重新启动的情况下访问我的 Jenkins 实例时,会显示一条错误消息,说明用户缺少所需的权限。在手动重新启动 Jenkins 服务之前,我无法绕过此错误消息,即使在访问 8080 端口上的 Jenkins 时手动刷新浏览器也是如此。
    • 很奇怪。 IIRC 它对我来说没有问题。可能是因为当前 Jenkins 食谱版本的损坏状态(对 Jenkins 进行远程更改)。
    【解决方案2】:

    在配置安全性时,您必须考虑一些注意事项。一个是它几乎总是在第一次运行时工作,但您要确保在重复运行时它继续成功地应用所需的更改。

    executor protocol 有一个属性,默认为remoting,你会看到关于使用它的警告,因为它不太安全并且已被弃用。其他选项是httpsssh,后者是我们决定使用的选项。如果您将其配置为协议,但提供的要使用的 SSH 密钥未与用户关联(必须创建用户,然后与他们关联的 SSH 公钥),那么它将回退到使用 anonymous(部分的食谱),因此您需要确保在启用身份验证之前执行所有“特权”操作,例如插件安装和重新配置脚本,或者确保您已预先配置身份验证以请求 SSH,以便它在身份验证已打开。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 2019-01-29
      • 2018-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多