【问题标题】:Jenkins Pipeline Examples for Selecting Different Jenkins Node用于选择不同 Jenkins 节点的 Jenkins 流水线示例
【发布时间】:2019-03-15 15:13:47
【问题描述】:

我们的 Jenkins 设置由主节点和不同/专用的工作节点组成,用于在开发、测试和生产环境中运行作业。如何创建一个脚本化的管道代码,允许用户选择环境(可能从主节点)并根据所选的环境执行所选节点中的其余作业?这是我最初的想法:

stage('Select environment ') {

  script {
    def userInput = input(id: 'userInput', message: 'Merge to?',
    parameters: [[$class: 'ChoiceParameterDefinition', defaultValue: 'strDef', 
      description:'describing choices', name:'Env', choices: "dev\ntest\nprod"]
    ])

    println(userInput);  
  }
  echo "Environment here ${params.Env}" // prints null here

  stage("Build") {
    node(${params.Env}) { // schedule job based upon the environment selected earlier
      echo "My test here"
    }
  }
}

我走在正确的道路上还是应该看看别的?

另一个后续问题是,在工作节点上运行的作业还需要额外的用户输入。有没有一种方法可以一次性组合用户输入,从而不会提示用户使用多个用户屏幕?

【问题讨论】:

  • node(${params.Env}) 应该是node(params.Env)

标签: jenkins jenkins-pipeline


【解决方案1】:

如果您在开始作业时将环境作为构建参数传递,并且您的节点上有适当的标签,您可以执行以下操作:

agent = params.WHAT_NODE
agentLabels = "deploy && ${agent}"

pipeline {

    agent  { label agentLabels }

    ....

}

【讨论】:

    【解决方案2】:

    最终为脚本化管道执行以下操作:

    选择环境的代码可以在任何节点上运行(无论是主节点还是运行代理的从节点)。参数可以注入环境变量:env..

    node {
      stage('Select Environment'){
        env.Env = input(id: 'userInput', message: 'Select Environment',
                        parameters: [[$class: 'ChoiceParameterDefinition', 
                        defaultValue: 'strDef', 
                        description:'describing choices', 
                        name:'Env', 
                        choices: "jen-dev-worker\njen-test-worker\njen-prod-worker"]
                  ])
        println(env.Env); 
      }
    
      stage('Display Environment') {
        println(env.Env);  
      }
    }
    

    以下代码 sn-p 确保脚本将在上一步中选择的环境中执行。需要带有标签的 Jenkins 工作人员:jen-dev-worker、jen-test-worker、jen-prod-worker) 可用。

    node (env.Env) {
      echo "Hello world, I am running on ${env.Env}"   
    }
    

    【讨论】:

    • 您可以删除包裹input 步骤的node 并保存一个执行器槽。
    猜你喜欢
    • 1970-01-01
    • 2022-09-26
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    • 2018-12-19
    相关资源
    最近更新 更多