在不同的节点上运行Jenkins阶段

时间:2018-01-16 14:59:44

标签: jenkins jenkins-pipeline

我有以下多分支管道架构的Jenkins文件

#!/usr/bin/groovy

pipeline {
    agent {
        node {
            label 'ubuntu'
            customWorkspace "/src/$BUILD_NUMBER"
        }
    }
    environment {
        SRC_DIR = "$WORKSPACE"
        BUILD_DIR="/build/$BUILD_NUMBER"
    }

    stages {
        stage('Build') {
            steps {
                dir(BUILD_DIR) {
                    sh '$SRC_DIR/build.sh'
                }
            }
        }

        stage('Test') {
            steps {
                dir(BUILD_DIR) {
                   sh '$SRC_DIR/test.sh'
                }
            }
        }
    }
}

我试图在Ubuntu和Red Hat节点上并行运行'Build'阶段,而只在Ubuntu节点上运行'Test'阶段。

任何人都可以帮我指定如何选择在哪个节点上运行哪个阶段。我在网上找到了一些解决方案,但他们建议重写构建阶段两次:一次用于Red Hat节点,另一次用于Ubuntu节点。没有代码重复,有没有办法做到这一点?

非常感谢

2 个答案:

答案 0 :(得分:4)

当然,你想要以某种方式标记你的从属节点。基本上配置Jenkins上的所有节点并为它们提供有意义的名称。

  stage('Build') {
   steps {
     node('os_linux') {
       sh './build.sh' 
     }
     node('os_redhat') {
       sh './build.sh' 
   }
  }

这将以串行方式运行任务,Jenkinsfile语法还支持在不同节点上并行执行命令。

谢谢,

答案 1 :(得分:0)

参加聚会有点晚,但仍然... 您可以使用 script {} ,以便创建所需的标签。 像这样:

stage('Build') {
    steps {
        script {
            dev label = 'RHEL'
            if (env.ENV == 'ubuntu') {
                label = 'Ubuntu'
            }
            node("${label}") {
                dir(BUILD_DIR) {
                    sh '$SRC_DIR/build.sh'
                }
            }
        }
    }
}