【问题标题】:Parallel jenkins agents at kubernetes with kubernetes pluginkubernetes 上的并行 jenkins 代理和 kubernetes 插件
【发布时间】:2020-02-27 00:26:45
【问题描述】:

我正在使用 Jenkins 版本 2.190.2 和 Kubernetes 插件 1.19.0 我有这个 jenkins 作为 AWS 的 kubernetes 集群的主人。 这个 jenkins 配置了 kubernetes 插件并且运行正常。 我配置了一些正在运行的 pod 模板和容器。 我能够运行指定代理和容器的声明性管道。

我的问题是我无法并行运行作业。 当同时执行多个作业时,第一个作业启动,创建 pod 并执行内容。第二个作业等待第一个作业结束,即使使用不同的代理。

示例:

管道 1

pipeline {
    agent { label "bash" }

    stages {
        stage('init') {
            steps {
                container('bash') {
                    echo 'bash'
                    sleep 300
                }
            }
        }
    }
}

管道 2

pipeline {
    agent { label "bash2" }

    stages {
        stage('init') {
            steps {
                container('bash2') {
                    echo 'bash2'
                    sleep 300
                }
            }
        }
    }
}

这是 org.csanchez.jenkins.plugins.kubernetes 日志。我已经上传到 wetransfer -> we.tl/t-ZiSbftKZrK

我已经阅读了很多这个问题,并且我已经配置了 jenkins 从这个 JAVA_OPTS 开始,但问题没有解决。

-Dhudson.slaves.NodeProvisioner.initialDelay=0 
-Dhudson.slaves.NodeProvisioner.MARGIN=50 
-Dhudson.slaves.NodeProvisioner.MARGIN0=0.85

Kubernetes 插件配置:

  • Kubernetes cloud / Concurrency Limit = 50。我配置没有值,但问题仍然存在
  • Kubernetes 云/Pod 保留 = 从不
  • Pod 模板/没有值的并发限制。我已经配置了 10,但问题仍然存在
  • Pod 模板/Pod 保留 = 默认

我缺少什么配置或我在做什么错误?

【问题讨论】:

    标签: jenkins kubernetes jenkins-pipeline jenkins-plugins


    【解决方案1】:

    由于另一个问题,我终于解决了我的问题。 我们在创建普通 pod 时开始出错,因为我们在 aws 的 kubernetes 节点没有足够的可用 IP。由于这个错误,我们扩展了节点,现在 jenkins 管道可以与不同的 pod 和容器并行运行。

    【讨论】:

      【解决方案2】:

      您的 pod 是并行创建的

      Oct 31, 2019 3:13:30 PM INFO org.csanchez.jenkins.plugins.kubernetes.KubernetesLauncher launch
      Created Pod: default/bash-4wjrk
      ...
      Oct 31, 2019 3:13:30 PM INFO org.csanchez.jenkins.plugins.kubernetes.KubernetesLauncher launch
      Created Pod: default/bash2-3rxck
      

      但是你的 bash2 pod 失败了

      Caused by: java.net.UnknownHostException: jenkins-jnlp.default.svc.cluster.local
      

      【讨论】:

      • 但我不明白为什么,因为如果作为 firsts 代理启动,bash2 模板可以正常工作。模板没有问题。我认为这个问题与配置有关,但我不知道可能是什么。
      • 然后使用kubectl获取bash和bash2运行时的pod yaml配置并进行比较
      • 我比较了 bash1 在运行状态下的 yaml 文件,bash2 在错误状态下,bash1 完成后 bash2 在运行状态下的文件。唯一的区别是元数据/标签/名称、规范/容器/env/JENKINS_AGENT_NAME、规范/容器/env/JENKINS_NAME
      【解决方案3】:

      您应该使用Parallel Stages。您可以在 pipeline syntax 的 Jenkins 文档中找到相关说明。

      声明式管道中的阶段可以在parallel 块中声明多个嵌套阶段,这些阶段将并行执行。请注意,一个阶段必须只有一个 stepsstagesparallel。嵌套阶段本身不能包含更多parallel 阶段,但在其他方面的行为与任何其他stage 相同,包括stages 中的顺序阶段列表。任何包含parallel 的阶段都不能包含agenttools,因为如果没有steps,这些都是不相关的。

      此外,您可以通过将failFast true 添加到包含parallelstage 来强制您的parallel 阶段全部中止。添加failfast 的另一个选项是在管道定义中添加一个选项:parallelsAlwaysFailFast()

      示例管道可能如下所示:

      Jenkinsfile
      pipeline {
          agent none
          stages {
              stage('Run pod') {
                  parallel {
                      stage('bash') {
                          agent {
                              label "init"
                          }
                          steps {
                              container('bash') {
                                  echo 'bash'
                                  sleep 300
                              }
                          }
                      }
                      stage('bash2') {
                          agent {
                              label "init"
                          }
                          steps {
                              container('bash') {
                                  echo 'bash'
                                  sleep 300
                              }
                          }
                      }
                  }
              }
          }
      }
      

      【讨论】:

      • 抱歉,我可能没有很好地解释我的目的。我知道并行函数,但不是我需要的。我需要使用带有容器 C1 的 pod 模板 PT1 和使用带有容器 C2 的 pod 模板 PT2 的管道 P2 同时运行管道 P1。
      猜你喜欢
      • 2022-10-24
      • 2019-02-08
      • 2016-02-20
      • 2020-11-28
      • 1970-01-01
      • 2018-02-28
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      相关资源
      最近更新 更多