【问题标题】:Configuring plugins with Jenkins Job Builder使用 Jenkins Job Builder 配置插件
【发布时间】:2019-05-02 09:24:44
【问题描述】:
我正在尝试使用 Jenkins Job Builder 安装 jenkins 插件,但我误解了 JJB 可以做什么或者我做错了什么。我使用get-plugins-info 命令来获取我的插件的 YAML 描述。后来在重建jenkins安装时,我使用了jenkins-jobs -p plugins_info.yaml jobs,希望JJB能够安装YAML文件中列出的插件。但它没有安装插件。
所以我的第一个问题是:我什至应该期望 JJB 安装这些插件吗? JJB 对插件信息所做的操作的文档是有限的,所以我在这里假设。
假设 JJB 应该在 YAML 文件中安装插件,我怎么知道为什么不是?我查看了詹金斯的日志无济于事。
【问题讨论】:
标签:
jenkins
jenkins-plugins
jenkins-job-builder
【解决方案1】:
JJB 无法管理 Jenkins 插件。您将需要研究其他工具来为您处理这些问题,例如 puppet、ansible 等...
更新命令中“get-plugins-info”和“-p”参数的用法是在系统管理员不希望所有JJB“管理员”访问权限的情况下将当前安装的插件信息传递给JJB在 Jenkins 中在更新运行期间“查询”插件信息。最新版本的 Jenkins 不再允许匿名查询插件信息,不幸的是,该权限已移至 Jenkins 内部的管理员权限。
plugins-info 很有用,因为 JJB 支持某些插件的多个版本,并且需要知道安装的版本是什么,以便根据支持的版本适当地创建 XML。
【解决方案2】:
首先我会提到我使用 Jenkins Job Builder 来创建我的作业并对其进行版本控制。但是,如果您想以自动化方式在 Jenkins 中安装/配置插件,您可以使用 init.groovy.d 脚本来初始化您的 jenkins 实例。为此,请创建以下目录${JENKINS_HOME}/init.groovy.d/,然后将您的 groovy 脚本放在该目录中。这是我在启动 Jenkins 时用来安装插件的脚本。
import jenkins.model.*
import java.util.logging.Logger
def logger = Logger.getLogger("")
def installed = false
def initialized = false
def plugins = ["git", "cloudbees-folder", "build-timeout"]
logger.info("" + plugins)
def instance = Jenkins.getInstance()
def pm = instance.getPluginManager()
def uc = instance.getUpdateCenter()
plugins.each {
logger.info("Checking " + it)
if (!pm.getPlugin(it)) {
logger.info("Looking UpdateCenter for " + it)
if (!initialized) {
uc.updateAllSites()
initialized = true
}
def plugin = uc.getPlugin(it)
if (plugin) {
logger.info("Installing " + it)
def installFuture = plugin.deploy()
while(!installFuture.isDone()) {
logger.info("Waiting for plugin install: " + it)
sleep(3000)
}
installed = true
}
}
}
if (installed) {
logger.info("Plugins installed, initializing a restart!")
instance.save()
instance.restart()
}
将尽可能多的插件名称添加到数组plugins。希望这对您和其他人有所帮助。