【问题标题】:spinning up multiple jenkins docker slaves for a single job为单个作业启动多个 jenkins docker slave
【发布时间】:2017-01-09 18:11:48
【问题描述】:

我正在尝试使用此插件在 jenkins https://wiki.jenkins-ci.org/display/JENKINS/Docker+Slaves+Plugin 中拥有 docker slaves@
但是,当我这样做时,我只会收到一个无用的错误:

Started by user test_admin
FATAL: null
xyz.quoidneufdocker.jenkins.dockerslaves.api.OneShotExecutorProvisioningException
    at xyz.quoidneufdocker.jenkins.dockerslaves.api.OneShotSlave.provisionFailed(OneShotSlave.java:146)
    at xyz.quoidneufdocker.jenkins.dockerslaves.api.OneShotSlave.provision(OneShotSlave.java:130)
    at xyz.quoidneufdocker.jenkins.dockerslaves.api.OneShotSlave.createLauncher(OneShotSlave.java:155)
    at xyz.quoidneufdocker.jenkins.dockerslaves.DockerSlave.createLauncher(DockerSlave.java:90)
    at hudson.model.AbstractBuild$AbstractBuildExecution.createLauncher(AbstractBuild.java:561)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:492)
    at hudson.model.Run.execute(Run.java:1741)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:98)
    at hudson.model.Executor.run(Executor.java:410)
Finished: FAILURE  

我可以毫无问题地使用https://wiki.jenkins-ci.org/display/JENKINS/Docker+Plugin,但是我无法使用该插件启动侧容器。
现在我需要用 2 个侧容器(rabbitmq 和 mongo)来启动主要工作人员。

【问题讨论】:

  • 我很好奇为什么这被移动到堆栈溢出。这不是我编写的代码,可能归结为服务器配置问题。
  • 我建议使用kubernetes-plugin,它允许您在每个 pod 中生成多个容器。不过,您需要设置一个 Kubernetes 集群 :)
  • 我考虑过使用类似的东西,我希望在每个工作的基础上更灵活一些,比如我正在查看的插件。但我想最坏的情况是一种选择
  • 迁移主要是关于目标受众和获得好答案的可能性:meta.serverfault.com/questions/8648

标签: docker jenkins


【解决方案1】:

安装 Kubernetes 可能是一项耗时的任务。相反,我建议使用Docker Pipeline Plugin 并使用管道定义作业。您需要 Jenkins 2.0+,但这是向后兼容的,所以更新没有问题。

用于 Pipeline 的 Docker 插件允许您启动多个容器并稍后停止它们(请查看 Image.run)。此外,您可以轻松运行任意命令。您甚至可以决定运行容器的 Jenkins 节点。

【讨论】:

  • 我进行上述设置的方式是在单独的 docker 主机上运行容器。查看和试用这个插件似乎并没有得到很好的支持。我尝试了“指定自定义服务器”下的语法,它只是尝试在詹金斯盒子上启动容器。我找不到在哪里指定全局默认服务器(如果可能的话)
  • 我确实想出了一个解决方案,让 docker 主机成为奴隶,但这似乎并不正确。尤其是在使用wiki.jenkins-ci.org/display/JENKINS/Docker+Plugin 时,我在这个盒子上没有执行器(但这是一个解决方案)
  • 在尝试使用 Image.run 时,我不断收到Scripts not permitted to use method groovy.lang.GroovyObject getProperty java.lang.String (org.jenkinsci.plugins.docker.workflow.Docker$Image.run)。当我尝试将 Docker.image('whatever') 保存到一个变量并执行 variable.run 时,或者我只是执行 Docker.image('whatever').run
  • 这个answer 可能对你有用。请注意 def container = image.run('--name ' + DOCKER_CONTAINER_NAME) 如何捕获正在运行的容器。
  • 太棒了!非常感谢。当涉及到端口时,我仍然需要弄清楚如何最好地处理正在运行的这个作业的多个实例(每个实例都需要自己的容器堆栈)。但这至少为我指明了正确的方向。
猜你喜欢
  • 2018-07-18
  • 1970-01-01
  • 1970-01-01
  • 2018-04-28
  • 1970-01-01
  • 1970-01-01
  • 2019-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多