詹金斯不会执行任何工作。查看此问题后,我已禁用所有从属节点,但一个简单的作业甚至无法在主节点上运行。
怎么了?
即使主节点离线,Jenkins 管理控制台也可以运行。当 Jenkins 磁盘空间不足时,可能会发生这种情况。
要确认,请执行以下操作(感谢 geekride - jenkins-pending-waiting-for-next-available-executor):
在我的情况下,执行者的数量设置为 0。增加它并解决问题。
就我而言,我的 JenkinsFile 中有以下设置
node('node'){
...
}
没有称为“节点”的节点,只有主节点(在遵循一些基本教程后,该值已留在其中)。将值更改为“master”使构建工作。
我遇到了类似的问题,因为我的主人被设置为“让这台机器只做捆绑工作”。所以,即使我禁用了奴隶,詹金斯继续绕过主人,寻找别的东西。
转到 Jenkins --> Manage Jenkins --> Manage Nodes,然后单击主节点的配置按钮(看起来像螺丝刀和扳手)。检查Usage并确保它在“Utilize this slave as much as possible”上。
在我的情况下,这是由执行者数量(我有 1 个)和从管道运行 Jenkins 作业(项目)引起的(我的管道脚本在 Jenkins 中启动了其他作业)。它导致了死锁- 我的管道持有执行者并正在等待它的工作,但该工作正在等待免费的执行者。
解决方案可能会增加# of executors
in Jenkins -> Manage Jenkins -> Manage Nodes -> Configure (icon on required node)
。
我玩游戏有点晚了,但这可能对其他人有所帮助。
在我的例子中,我的 jenkins master 有一个共享的外部资源,它由external-resource-dispatcher-plugin分配给 jenkins 作业。由于插件中的错误JENKINS-19439(处于测试阶段),我发现我的资源已被之前的作业锁定,但在取消之前的作业时没有解锁。
要查看资源当前是否处于锁定状态,请导航到受影响的 jenkins 节点,Jenkins -> Manage Jenkins -> Manage Nodes -> master
您应该看到任何外部资源的当前状态。如果有任何意外锁定,这可能是作业等待执行者的原因。
我找不到有关如何手动解决此问题的任何详细信息。
重新启动詹金斯并没有解决问题。
最后我采用了残酷的方法:
就我而言,当盒子内存不足(RAM)时,我注意到了这种行为,我去了 Jenkins -> Manage Jenkins -> Manage Nodes,发现内存不足异常。我刚刚释放了机器上的一些内存,工作开始进入执行程序。
就我而言,我刚刚安装了“授权项目”插件,并错误地将“管理 Jenkins -> 配置全局安全性 -> 构建访问控制”中的策略设置为“以匿名方式运行”。所以“匿名者”无权执行这项工作。
将第一个策略设置为“以触发构建的用户身份运行”解锁了排队的作业。
简短的回答:杀死所有在主服务器上运行的作业。
在我的情况下,有 3 个作业挂在主人身上超过 10 天,没有被注意到。我们通常不会直接在 master 上运行任何作业,一切都在 slave 上运行。我杀死了这三个被挂起的工作,奴隶上的执行者自动开始接受工作。
需要注意的是,即使我们有 8 个从站,也只有 1 个从站处于这种受影响的状态。
[编辑] 我们找到了为什么只有一个奴隶处于这种受影响状态的答案。当 Jenkins slave 宕机时,所有挂起的作业都会自动转移到 master。我杀死的所有 3 个挂起的作业都来自这个从站,所以它可能是主站和这个特定从站之间的连接问题。
对我来说,以下解决方案有效。
Jenkins --> Manage Jenkins --> Manage Nodes --> master -> configure --> Node properties --> Restrict Jobs execution at node - 已启用并授予特定用户访问权限。我自己授予了访问权限,然后工作开始运行。
如果启用了在节点上限制作业执行,则计划任务将无法运行。
就我而言,它类似于@Michael Easter:由于磁盘空间不足,我在工作中遇到了问题。我清理了一些空间,重新启动了 Jenkins,但问题仍然存在。
解决方案是转到 Jenkins -> Manage Jenkins -> Manage Nodes,然后单击按钮更新状态。
我刚刚添加了一个带有 docker 代理的阶段。由于我只有一个节点 master,我必须告诉容器重用早期阶段的节点:
agent {
docker {
image 'bitnami/mongodb:latest'
reuseNode true
}
}
您可以投票将其作为代理的默认行为并防止这种锁定。
如果您安装了参数化触发器插件,则在构建队列中等待的作业可能是已知问题JENKINS-47792。
解决方法是将参数化触发器插件降级到版本 2.35.1。请注意,您可能还需要降级依赖项,例如git插件。
什么对我有用:我终于注意到 Jenkins 主仪表板左侧的 Build Executor Status 窗口。我在本地系统上使用 2 个执行程序运行一个开发/测试实例。两者目前都忙于未运行的构建。在取消这些工作后,我的第三个(待定)工作能够运行。
对我来说,我必须手动重新启动执行程序。单击“Build Executor Status”下的“Dead”,然后按下重新启动按钮。
我遇到了类似的问题,因为我的 master 设置为“# of executor(Jenkins 可以在此代理上执行的最大并发构建数)。
转到 Jenkins --> Manage Jenkins --> Manage Nodes,然后单击主节点的配置按钮(增加执行器的数量以一次运行多个作业)。
就我而言,我必须Execute concurrent builds if necessary
在工作的常规设置中进行设置。
您可能设置了里程碑,并且您的工作在前一个工作完成之前不会运行。
在我的环境中(图像 jenkins:lts-jdk11、jnlp-agent-maven e jnlp-agent-maven:jdk11),为更新 jenkins 图像执行拉取操作,报告代理没有连接问题。但是所有工作都被消息阻止:
pending—Waiting for next available executor on
因此,对我来说,解决方案是停止并拉入两个代理图像:
docker pull jenkins/jnlp-agent-maven (jdk8)
docker pull jenkins/jnlp-agent-maven:jdk11