Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用kubernetes插件在kubernetes并行jenkins代理_Jenkins_Kubernetes_Jenkins Pipeline_Jenkins Plugins - Fatal编程技术网

使用kubernetes插件在kubernetes并行jenkins代理

使用kubernetes插件在kubernetes并行jenkins代理,jenkins,kubernetes,jenkins-pipeline,jenkins-plugins,Jenkins,Kubernetes,Jenkins Pipeline,Jenkins Plugins,我正在使用Jenkins版本2.190.2和Kubernetes插件1.19.0 我让詹金斯担任AWS kubernetes集群的大师。 这个jenkins配置了kubernetes插件,运行正常。 我已经配置了一些正在运行的pod模板和容器。 我能够运行指定代理和容器的声明性管道 我的问题是我无法并行运行作业。 当同时执行多个作业时,第一个作业开始,pod被创建并执行。第二个作业等待第一个作业结束,即使使用不同的代理 例如: 管道1 pipeline { agent { label "

我正在使用Jenkins版本2.190.2和Kubernetes插件1.19.0 我让詹金斯担任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

我已经读了很多关于这个问题的书,并且从这个JAVA_选项开始配置jenkins,但是问题并没有解决

-Dhudson.slaves.NodeProvisioner.initialDelay=0 
-Dhudson.slaves.NodeProvisioner.MARGIN=50 
-Dhudson.slaves.NodeProvisioner.MARGIN0=0.85
Kubernetes插件配置为:

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

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

您的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吊舱在

Caused by: java.net.UnknownHostException: jenkins-jnlp.default.svc.cluster.local
你应该使用。您可以在Jenkins的文档中找到

声明性管道中的阶段可以在
并行
块中声明许多嵌套的阶段,这些阶段将并行执行。请注意,一个阶段必须有且只能有一个
步骤
阶段
、或
并行
。嵌套的阶段本身不能包含更多的
并行
阶段,但其行为与任何其他
阶段
相同,包括
阶段
中的顺序阶段列表。任何包含
并行
的阶段都不能包含
代理
工具
,因为如果没有
步骤
,这些都是不相关的

此外,您可以通过将
failFast true
添加到包含
并行
阶段
中,在其中一个阶段出现故障时,强制所有
并行
阶段都中止。添加
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
                        }
                    }
                }
            }
        }
    }
}

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

但我不明白为什么,因为如果作为firsts代理启动,bash2模板工作正常。模板没有问题。我认为这是配置的问题,但我不知道会是什么。然后使用kubectl在bash和bash2运行时获取它们的pod yaml配置,并对它们进行比较。我比较了bash1在运行状态下的yaml文件,bash2在错误状态下的yaml文件,bash2在运行状态下的bash1完成后的bash2文件。唯一的区别是元数据/标签/名称、spec/containers/env/JENKINS\u AGENT\u名称、spec/containers/env/JENKINS\u名称。也许我没有很好地解释我的目的。我知道并行函数,但这不是我需要的。我需要同时使用pod模板PT1和容器C1运行管道P1,使用pod模板PT2和容器C2运行管道P2。