【问题标题】:How can i use multiple type of agents in a single declarative jenksinfile如何在单个声明性 jenkinsfile 中使用多种类型的代理
【发布时间】:2020-10-30 11:19:57
【问题描述】:

如何在一个声明式 jenkinsfile 中使用多种类型的代理。 就像我有两个标签。 第一类简单标签

       agent {
              label "node_name"
            }

kubernetes 类型的第二个。

           agent {
                     kubernetes {
                            cloud 'cloudName'
                            namespace 'NameSpaceName'
                            label 'AgentLabel'
                            inheritFrom 'agent'
                        }
           }

我想根据条件在这两者之间进行选择 比如如果给定了一些参数,则运行 node agent ,否则运行 kubernetes agent。

【问题讨论】:

    标签: kubernetes groovy jenkins-pipeline pipeline agent


    【解决方案1】:

    我相信这不可能完全按照您想要的方式,但您可以通过在阶段级别定义代理来解决:

    pipeline {
        agent none
    
        stages {
            stage('A') {
                when { /* some condition */ }
                agent {
                    label "node_name"
                }
                steps {
                    sameCodeForBothStages()
                }
            }
            stage('B') {
                when { /* some condition */ }
                agent {
                    kubernetes {
                        cloud 'cloudName'
                        namespace 'NameSpaceName'
                        label 'AgentLabel'
                        inheritFrom 'agent'
                    }
                }       
                steps {
                    sameCodeForBothStages()
                }
            }
        }
    }
    
    void sameCodeForBothStages() {
        sh "echo 'Hello'"
    }
    
    

    明显的缺点是管道视图中会显示两个单独的阶段。

    为避免在两个阶段出现重复代码,您可以像我在示例中那样调用函数。

    【讨论】:

    • 感谢@zett42,我熟悉这个概念,但问题是我有多个阶段,我需要以相同的方式影响所有阶段..
    • @Abhishektomar 另一种可能的解决方案是使用脚本阶段,因此您不受声明性管道约束的限制。您可以在script 块中使用stage('name') { },但您必须将agent 替换为node,其语法不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 2021-06-07
    • 2022-11-25
    相关资源
    最近更新 更多