Jenkins声明式管道无限期地等待执行者

时间:2020-03-26 13:53:10

标签: jenkins jenkins-pipeline jenkins-declarative-pipeline

我不是詹金斯专家,所以请问这是一个绝对的菜鸟问题。

我目前正在调查与我们的Jenkins渠道相关的问题。尝试从AWS EC2设置执行程序时,连接超时。我希望重试几次后中止工作。而是继续尝试连接。连接保持超时。无限循环!

在管道中定义了超时。由于没有执行程序,因此永远不会读取超时。

pipeline {

   agent {
       label 'docker'
   }

    options {
         timeout(time: 45, unit: 'MINUTES')
         timestamps()
         skipDefaultCheckout()
         disableConcurrentBuilds()
         buildDiscarder(logRotator(numToKeepStr:'5'))
    }

    stages {
        // And so on...

“构建超时”插件已安装在我们的Jenkins上,但似乎不适用于该项目,因此我看不到用于中止该项目的设置。

已安装的插件

  • Amazon EC2,1.42
  • 构建超时1.19
  • 管道2.6

请注意,管道过去一直有效。

[编辑]

以下日志在几天内没有更改。

Started by user a.user
 > git rev-parse --is-inside-work-tree # timeout=10
Setting origin to http://sources:8080/scm/git/backend
 > git config remote.origin.url http://sources:8080/scm/git/backend # timeout=10
Fetching origin...
Fetching upstream changes from origin
 > git --version # timeout=10
 > git config --get remote.origin.url # timeout=10
using GIT_ASKPASS to set credentials provides read-only access to the project git repositories
 > git fetch --tags --progress origin +refs/heads/*:refs/remotes/origin/* # timeout=10
Seen branch in repository origin/branch1
Seen branch in repository origin/branch2
Seen branch in repository origin/branch3
Seen branch in repository origin/branch4
Seen branch in repository origin/branch5
Seen branch in repository origin/branch6
Seen branch in repository origin/branch7
Seen branch in repository origin/branch8
Seen branch in repository origin/branch9
Seen branch in repository origin/branch10
Seen branch in repository origin/branch11
Seen branch in repository origin/branch12
Seen branch in repository origin/branch13
Seen 13 remote branches
Obtained ci/jobs/Backend-Build-Multibranch/Jenkinsfile from d6d39ddab89bb77502c83f99c7f08f0b6eb03e77
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Still waiting to schedule task
Waiting for next available executor

3 个答案:

答案 0 :(得分:1)

要为代理连接设置超时,可以为阶段而不是整个管道定义agent { label 'docker' }。在此阶段内,您可以为先前在顶层定义的阶段创建嵌套阶段,因此它们将全部在“ docker”节点上运行。

pipeline {
    agent{ label 'master' }

    options {
        timeout(time: 45, unit: 'MINUTES')
    }    

    stages {
        stage('Connect Node') {
            agent { label 'docker' }

            stages {
                stage('Build') {
                    steps{
                        echo 'Hello'
                    }
                }
                // And so on...
            }
        }
    }
}

答案 1 :(得分:1)

以下是对https://stackoverflow.com/users/7571258/zett42答案的修改:

pipeline {
   // 'agent none' prevents Jenkins from starting the node. 'agent' must be
   // defined in subsequent stages.
   agent none

    // Options are read and applied globally.
    options {
         timeout(time: 45, unit: 'MINUTES')
    }

    stages {
        // Node connection stage will time out as declared in the options block
        stage('Connect Node') {
            agent {
                label 'docker'
            }

            stages {
                // And so on...
            }
        }
    }
}

答案 2 :(得分:0)

您正在等待执行者等待的确切消息是什么? 触发作业和/或也未触发新从站时,可能没有从站运行标签为“ docker”的端口(可能是由于AMI / ec2实例上限限制的静态从站计数或没有动态从站加速) )

相关问题