我有这个独特的要求来检查给定的节点是否正在运行作业。我正在考虑使用groovy,因为它看起来是最简单的选择。
它使我能够找到从站是否在线。对我来说,下一步是检查它是否正在运行作业。
我正在考虑使用API函数setAcceptingTasks(false)来将slave标记为正在运行作业,以便下次当我使用isAcceptingTasks()查询时,我会得到false,因此不会在该slave上启动job。
但是我宁愿有奴隶标记本身。
我想到了taskAccepted()和taskCompleted()。
一旦任务被接受,我就可以将setAcceptingTasks设置为false,并在完成任务后再次将isAcceptingTasks设置为true。
但是我不确定这些函数采用的参数,例如执行器和任务。这些函数调用在哪里适合普通脚本。
我不确定任务的假设是否等同于工作是否正确。
这是我到目前为止所得到的:
import hudson.model.*
def requiredNodes = ['Slave1', 'Slave2', 'Slave3'];
def status = 0;
for (node in requiredNodes)
{
println "Searching for $node";
slave = Hudson.instance.slaves.find({it.name == node});
if (slave != null)
{
computer = slave.getComputer();
if (computer.isOffline())
{
println "Error! $node is offline.";
status = 1;
}
else
{
println "OK: $node is online";
if(computer.isAcceptingTasks())
{
//Launch job
}
}
}
else
{
println "Slave $node not found!";
status = 1;
}
}
status;
编辑:每个奴隶上的执行者数量是1。
这是我能够做到的骇人听闻的方式。我更改了工作流程,以找到可用的空闲从服务器,而不是查找从服务器是否忙,然后检查下一个从服务器是否空闲。这个常规脚本计算从站上繁忙执行程序的数量。它不断轮询,直到找到一个在线奴隶,其繁忙的执行者数量为零。我讨厌投票,并会要求知识渊博的会员加入,并提出一些建议以某种方式插入基于Jenkins事件的通知中。
import hudson.FilePath
import hudson.model.Node
import hudson.model.Slave
import jenkins.model.Jenkins
import groovy.time.*
Jenkins jenkins = Jenkins.instance
def jenkinsNodes =jenkins.nodes
while(1)
{
for (Node node in jenkinsNodes)
{
sleep(1000)
// Make sure slave is online
if (!node.getComputer().isOffline())
{
//Make sure that the slave busy executor number is 0.
if(node.getComputer().countBusy()==0)
{
println "'$node.nodeName' can take jobs !!!"
return 0
}
else
{
println "$node.nodeName' is busy !!!"
}
}
else
{
println "'$node.nodeName' is offline !!!"
}
}
sleep(1000)
}
它作为作业运行,并在找到合适的从站后立即返回。在詹金斯,返回0是成功的。
如果有更好的方法,请加入。对于必须进行的连续轮询,我并不满意。我也不是执行人专家。因此,如果存在任何缺陷,请纠正我。
我想检查Quartz作业是否正在运行。我发现它可以使用调度程序。getCurrentlyExecutingJobs()。但是我对此感到困惑,我应该把它放在哪里才能得到结果呢?谢谢
问题内容: 如何检查计划的Quartz Cron作业是否正在运行?是否有任何API可以进行检查? 问题答案: scheduler.getCurrentlyExecutingJobs()在大多数情况下应该可以工作。但是请记住不要在Job类中使用它,因为它使用ExecutingJobsManager(a JobListener)将正在运行的作业放到HashMap中,该HashMap在作业类之前运行,因
如何检查计划的Quartz cron作业是否正在运行?是否有API进行检查?
问题内容: 是否可以从工作流脚本中检查某项作业是否正在运行或已计划? 尽管使用阶段管理并发似乎足够: 并在以下阶段运行构建: 可能是有人手动开始工作 测试工作 ,而我只想在我的工作流程脚本中处理这种情况。例如,跳过构建或等待构建完成。 问题答案: 这适用于不使用 Groovy Sandbox的流 :
问题内容: 我正在尝试创建一个bash实用程序脚本以检查我的服务器中是否正在运行docker守护进程。除了运行这样的代码之外,还有没有更好的方法来检查docker守护进程是否正在我的服务器中运行? 我想创建一个bash shell脚本,该脚本将检查我的docker守护程序是否正在运行。如果它正在运行,则什么也不做,如果没有,则启动docker守护程序。 我的伪代码是这样的。我正在考虑解析ps -e
不知道最好的方法。我们已经创建了一个可供不同项目使用的jar。依赖此jar的其他项目需要提供在其spring属性文件中定义的某些属性。(我们的jar不应该关心他们给这些属性文件起什么名字。) 我不介意让这个特定的服务类成为ApplicationContextAware,但是如果我这样做了,我如何能够访问底层的PropertySourcesPlaceholderConfigurer?我会“看起来”吗