Jenkins作业在进入“quietDown”模式后停留在“暂停(准备关机)”

83qze16e  于 8个月前  发布在  Jenkins
关注(0)|答案(2)|浏览(109)

我正在AWS中运行Jenkins,我正在编写一个安全地重新部署Jenkins CloudFormation堆栈的脚本。我并不想简单地重新启动Jenkins Web服务器。我知道不同的“安全”选项,但它们似乎都不适合我:

  • http://<jenkins.server>/safeRestart-这似乎对我不起作用,因为它只是重新启动Jenkins Web服务器。重新启动前运行的作业在重新启动后继续正常运行。我正在尝试终止AWS示例。
  • http://<jenkins.server>/safeExit-允许当前作业完成,但立即杀死Jenkins Web服务器,我无法检查何时终止AWS示例是安全的。
  • http://<jenkins.server>/quietDown-这几乎完全符合我的要求。新的作业排队,而不是启动(好)。Jenkins Web服务器启动,我可以查询正在运行的作业(好)。然而,正在运行的作业进入这种奇怪的状态,在作业完成时,作业实际上并没有退出。控制台挂起Pausing (Preparing for shutdown)。因此,我无法查询当前运行的作业数量,因为它在这个奇怪的状态下接收了所有的工作。

我有什么选择?我的设置有什么问题吗?当Jenkins处于“quietDown”模式并且作业完成时,是否有方法阻止作业进入Pausing (Preparing for shutdown)

2admgd59

2admgd591#

“quietDown”模式,不幸的是暂停所有当前正在运行的工作流(管道)作业,使其成为一个令人不快的替代方案。暂停行为是“由设计”。
有一个名为“Lenient-ShutDown“的插件比关闭插件更好地用于此目的。但它有警告,因为它不能完全停止所有作业启动。然而,它的优点之一是,您可以允许列出某些作业(例如文件夹),以便这些作业不会被阻止启动。
这两个插件和一些监控一起可以让你实现安全重启的目标。一种方法是通过一个简单的外部脚本,它根本不做任何监控,只是暂停.
例如(BASH)

sleeptime()  { if [ "$1" -ne "0" ]; then echo "Sleeping for $1 seconds..."; sleep $1; fi }

MYJENKINS='MYJENKINS_DNS -p PORTNO'
ssh $MYJENKINS lenient-quiet-down
sleeptime 500

ssh $MYJENKINS quiet-down
sleeptime 200

# OPTIONAL a groovy script that will either wait until no jobs, or kill all running jobs
ssh $MYJENKINS groovy = < KILLallJobs.groovy

ssh $MYJENKINS restart

字符串
显然,如果您正在经历运行groovy脚本的麻烦,您可以在一个脚本中完成所有这些事情。

xj3cbfub

xj3cbfub2#

目前还没有一个“干净”的解决方案。
有关此问题的讨论,请参见JENKINS-60434(自2019年以来一直在进行)。
你也可以在那里找到可能的变通方法,但没有一个可能涵盖所有可能的情况。

相关问题