如何在管道中执行不同阶段以在同一Jenkins代理上运行?

时间:2019-10-27 11:33:24

标签: jenkins

我的jenkinsfile看起来像这样:

pipeline {
  agent {label "master"}
  parameters {
    string(name: "host", defaultValue: "ci_agent_001 || ci_agent_002")
  }
  stages {
    stage ("build") {
    agent ( label "${params.host}" )
    steps {
      script {
        sh "./script.py --build"
      }
    }
  }
    stage ("deploy") {
    agent ( label "${params.host}" )
    steps {
      script {
        sh "./script.py --deploy"
      }
    }
  }
    stage ("test") {
    agent ( label "${params.host}" )
    steps {
      script {
        sh "./script.py --test"
      }
    }
  }
}

每个Python脚本都处理我需要的所有逻辑,但是我必须具有相同的代理程序来运行这些阶段,并且如果我在host参数中允许多个选项,则无法声明该代理程序阶段我知道,第二阶段的座席将获得相同的待遇(并且没有停机时间,即我不能在我的各个阶段之间使用另一个工作)。

我可以指定整个管道的代理吗?

1 个答案:

答案 0 :(得分:1)

可以。实际上,您可以完全从运行管道中释放您的主机:

  • agent {label "master"}替换为agent {label params.host}
  • 清除各个阶段中的所有agent ( label "${params.host}" )行(您也不需要script块,因为您可以直接在sh块中运行steps个步骤)

如果稍后您决定不想将单个节点分配给所有阶段,则必须在声明式管道内使用脚本化管道来对应该在同一节点上运行的阶段进行分组:

stage("stages that share the same node") {
  agent { label params.host }
  steps {
    script {
      stage("$NODE_NAME - build") {
        sh "./script.py --build"
      }
      stage("$NODE_NAME - deploy") {
        sh "./script.py --deploy"
      }
      stage("$NODE_NAME - test") {
        sh "./script.py --test"
      }
    }
  }
}
stage("look at me I might be on another node") {
  agent { label params.host }
  steps {
    echo NODE_NAME
  }
}