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