第一次尝试后触发远程参数化作业失败并超出重试限制 - 提到 CSRF

Dav*_*ave 3 jenkins jenkins-plugins jenkins-pipeline

我有一个触发远程作业的管道,然后当它完成时,发布到一个网络钩子 - PipelineA

我还有 2 个触发 PipelineA、PipelineB 和 PipelineC 的其他管道。

PipelineB 触发 PipelineA 并成功调用作业。

但是 PipelineC 触发了 PipelineA 并且远程作业的调用几乎立即失败并出现此错误

################################################################################################################

  Parameterized Remote Trigger Configuration:
    - job:                     #REDACTED# 
    - remoteJenkinsName:       {pre configured remote jenkins}
    - parameters:              [myVariousParams=myParams,MyOtherParams=Other]
    - blockBuildUntilComplete: true
    - connectionRetryLimit:    5
    - trustAllCertificates:    false

################################################################################################################

Triggering parameterized remote job '#REDACTED#'

  Using globally defined 'Credentials Authentication' as user '#REDACTED#' (Credentials ID '{ID}')

Triggering remote job now. CSRF protection is enabled on the remote server. ERROR: Remote build failed with 'ExceedRetryLimitException' for the following reason: 'Max number of connection retries have been exeeded.'.

org.jenkinsci.plugins.ParameterizedRemoteTrigger.exceptions.ExceedRetryLimitException: Max number of connection retries have been exeeded.  at org.jenkinsci.plugins.ParameterizedRemoteTrigger.utils.HttpHelper.sendHTTPCall(HttpHelper.java:562)  at org.jenkinsci.plugins.ParameterizedRemoteTrigger.utils.HttpHelper.tryCall(HttpHelper.java:596)   at org.jenkinsci.plugins.ParameterizedRemoteTrigger.utils.HttpHelper.tryPost(HttpHelper.java:611)   at org.jenkinsci.plugins.ParameterizedRemoteTrigger.RemoteBuildConfiguration.performTriggerAndGetQueueId(RemoteBuildConfiguration.java:664)     at org.jenkinsci.plugins.ParameterizedRemoteTrigger.pipeline.RemoteBuildPipelineStep$Execution.run(RemoteBuildPipelineStep.java:273)    at org.jenkinsci.plugins.ParameterizedRemoteTrigger.pipeline.RemoteBuildPipelineStep$Execution.run(RemoteBuildPipelineStep.java:249)    at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47)     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)  at java.util.concurrent.FutureTask.run(FutureTask.java:266)     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)  at java.lang.Thread.run(Thread.java:748)

ExceedRetryLimitException: Max number of connection retries have been exeeded.
Run Code Online (Sandbox Code Playgroud)

我只是无法理解为什么这可以从一个管道而不是另一个管道起作用。

PipelineB 和 PipelineC 位于同一个文件夹中,除了一些传递给子作业的参数外,它们没有额外的配置

任何帮助都会得到认可

Dav*_*ave 6

当我弄清楚时,我很想删除它,但我想我会把答案留给可能有这个问题的其他人。

我在管道 A 中触发的远程“作业”有一些参数,其中一个是选择参数。

管道 B 和 C 都通过链将参数传递给远程作业(本质上是镜像远程作业)

管道 B - 有效的管道 - 将参数传递给远程作业,该参数是选择参数中的有效选项

管道 C - 那个不起作用的管道 - 正在为远程作业中的选择参数传递一个无效选项

正是这种“无效”选择导致作业立即被拒绝而不是重试。

编辑(2020 年 3 月):因此我在使用此插件时加班加点,我注意到它似乎将调用远程作业的任何问题报告为“超出重试限制”——这很痛苦,因为它使人们感到困惑并且还隐藏了真正的错误。我发现在某些情况下,可以在“本地”jenkins 日志中找到更多信息,这通常包含有关从远程 jenkins 实例返回的内容的更多信息。远程 jenkins 实例的日志可能也有信息,但在我的情况下,我无法访问它们,所以我无法检查 - 希望额外的信息可以帮助其他疲惫的旅行者

  • 谢谢@Dave,这有帮助。就我而言,我将 useCrumbCache 和 useJobInfoCache 设置为 false 以解决此错误。 (4认同)