Jenkins声明式流水线无限期等待执行器

3

如果这是一个绝对初学者的问题,请原谅我,因为我不是Jenkins专家。

我目前正在调查我们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

是否存在标签为“docker”的节点? - MaratC
是的,有一个带有标签“docker”的节点。构建脚本是正确的。以前它能够正常工作。但是现在有一个不同的问题阻止了执行者的派遣。 - Scott
3个回答

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...
            }
        }
    }
}

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...
            }
        }
    }
}

成功了!我不得不进行一些修改以适应我的构建。谢谢! - Scott
@Scott你能否点击“接受”按钮以标记这个答案为有帮助的答案? - zett42
这种方法需要在主节点上有一个执行器。在没有执行器的主节点上无法工作。 - zionyx

0
你看到的执行器等待的确切消息是什么? 可能是当作业被触发时没有运行带有标签“docker”的从节点,和/或新的从节点也没有被触发(可能是由于AMI/ec2实例容量限制或没有动态从节点启动)。

有一个名为“docker”的从属节点。这个脚本过去是可以工作的。现在有一个不同的问题阻止了从属节点的分发,我正在寻找解决方法。我已经将等待日志添加到描述中。感谢其他的提示!我一定会检查的。 - Scott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接