当前位置: 首页 > 知识库问答 >
问题:

在不同节点上运行 Jenkins 阶段

苗森
2023-03-14

我有一个多分支管道架构的以下Jenkinsfile

#!/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节点上并行运行“构建”阶段,而仅在Ubuntu节点上运行“测试”阶段。

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

非常感谢

共有2个答案

单喜
2023-03-14

派对有点晚了,但仍然...您可以使用脚本 {},以便创建所需的标签。像这样:

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

当然,您可能希望以某种方式标记从属节点。基本上配置Jenkins上的所有节点并给它们有意义的名称。

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

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

谢谢

 类似资料:
  • 我试图在jenkins管道中的不同节点上运行不同的阶段,比如第一阶段是签出,第二阶段是构建,第三阶段是单元测试。例如: 如果我尝试这样做,我的问题是如果我在Linux1节点中签出代码,那么当签出的代码在node1中时,为什么其他阶段可以在不同的节点中运行。 代码将如何分布,如果我的理解不正确,我如何实现并行,并确保每个阶段都可以并行并减少时间。 如果可能,请推荐任何用于编写Jenkins管道的gr

  • 问题内容: 我有一大堆具有相同标签的节点。我希望能够在Jenkins中运行一个作业,该作业在具有相同标签的 所有 节点上执行并同时执行。 我看到了在詹金斯中使用矩阵配置选项的建议,但我只能想到一个轴(标签组)。当我尝试运行该作业时,似乎它只执行一次而不是300次(该标签组中的每个节点1次)。 我的另一条轴应该是什么?还是…有一些插件可以做到这一点?我曾经尝试过NodeLabel参数插件,然后选择“

  • 问题内容: 目标 在同一节点上运行声明性Jenkins管道的多个阶段。 安装程序 这只是显示问题的一个最小示例。有2个Windows节点“ windows-slave1”和“ windows-slave2”,均标有“ windows”标签。 注意:我真正的Jenkinsfile无法使用全局代理,因为存在需要在不同节点上运行的阶段组(例如Windows与Linux)。 预期行为 Jenkins根据标

  • 目标 在同一节点上运行声明性Jenkins管道的多个阶段。 设置 这只是说明问题的一个最小示例。有两个Windows节点“Windows-slave1”和“Windows-slave2”都标有“Windows”标签。 注意:我的real Jenkins文件不能使用全局代理,因为需要在不同的节点(例如Windows和Linux)上运行多组阶段。 预期行为 Jenkins基于标签选择阶段1中的一个节点

  • 请帮我做下面的事。我在一台共享服务器上安装了Jenkins。目前由多个团队使用,因此不允许在那里安装其他软件包/软件。每个团队都添加了专用的从节点,并根据需要进行配置。同样,我们有一个专用节点来运行我们的作业。(这也是我想运行我的工作的地方。) 我有 bitbucket 存储库,其中“Jenkinsfile”将包含部署步骤,而“Dockerfile”则希望从中创建容器并在其中运行部署步骤。 我想先

  • 我需要在 jenkins 管道的不同阶段分配相同的节点。场景是我需要运行分布式JMeter测试,并创建一个管道,如下所示: 第1阶段:并行设置一些代理,例如获取源代码和测试,编译源代码和安装依赖项,将jmeter服务器作为守护进程运行,获取当前节点的IP地址。 阶段2:在阶段1中分配相同的节点,并使用一个节点作为JMeter主节点,在该节点中,它将阶段1中所有节点的IP地址列表传递给 JMeter