gpt4 book ai didi

jenkins - 如何从 Jenkins 管道脚本中的标签获取节点名称

转载 作者:行者123 更新时间:2023-12-04 18:03:13 25 4
gpt4 key购买 nike

我有一组虚拟机用于测试我的构建结果。所有 VM 都配置为 Jenkins 从节点。主节点可以启动和停止虚拟机。

VM 被标记为三个一组( cluster1cluster2 ),并具有不同的角色( role1role2role3 )。

我想编写一个以 GROUP 名称作为参数的管道脚本 (StringParameterValue) 和

  • 启动属于该组的 VM
  • 在每个节点上运行单独的测试(并行)
  • 完成后停止虚拟机。

  • 管道脚本大致如下所示:
    def VM1 = ??? get name of the node labeled ("GROUP && role1") ???;
    def VM2 = ??? get name of the node labeled ("GROUP && role2") ???;
    def VM3 = ??? get name of the node labeled ("GROUP && role3") ???;
    def VMs = [VM1, VM2, VM3];

    node (master) {

    stage 'Start'
    def start = [:];
    for ( vm in VMs ) {
    start["${vm}"] = {
    build job: 'Start_VM', parameters: [
    [$class: 'StringParameterValue', name: 'VMNAME', value: vm]];
    }
    }
    parallel start;

    def tests = [:];
    for (int i = 0; i < VMs.size; i++) {
    tests["role${i}"] = {
    node (VMs[i]) {
    build job: "Test_role${i}";
    }
    }
    }
    parallel tests;

    Stage 'Stop'
    def stop = [:];
    for ( vm in VMs ) {
    stop["${vm}"] = {
    build job: 'Stop_VM', parameters: [
    [$class: 'StringParameterValue', name: 'VMNAME', value: vm]];
    }
    }
    parallel stop;
    }

    问:如何通过组标签导出单个节点名称?

    最佳答案

    我实现了一个从标签中获取节点名称的函数:

    def roles = ['role1', 'role2', 'role3'];

    def getNodeNames (group, roles) {
    def lgroup = Jenkins.instance.getLabel(group)
    def result = [:]

    for (role in roles) {
    def lrole = lgroup.and(Jenkins.instance.getLabel(role))
    def nodes = lrole.getNodes()
    if (nodes.size() > 0) {
    result[role] = nodes[0].getNodeName()
    }
    }
    print "getNodeNames($group) = ${result}"
    return result
    }

    def VMs = getNodeNames(GROUP)

    关于jenkins - 如何从 Jenkins 管道脚本中的标签获取节点名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38774418/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com