Jenkins pipeline 声明式agent动态设置代理标签

def agentLabel

if (profile== "test") {
    agentLabel = "test"
} else if (profile== "uat") {
    agentLabel = "uat"
} else {
    agentLabel = "prd"
}

pipeline {
    agent { label agentLabel }
    
    stages{
        stage('test dynamically agent'){
            steps{
                script{
                    println agentLabel
                }
            }
        }
    }
}

原文链接

1赞

很有创意的一种用法,不过有个小问题,profile这个变量是在哪里定义的呢?

profile 在选项参数那边定义。

我这种方式,我们每个环境都是单个的VPC。部署时候需要区分。

感谢分享,我根据分享内容,配置了如下流水线,但是没生效,能帮忙看一下吗?

def agentLabel

if (ServerNumber== "docker-slave1") {
    agentLabel = "docker-slave1"
} else if (ServerNumber== "docker-slave2") {
    agentLabel = "docker-slave2"
} else if (ServerNumber== "docker-slave3") {
    agentLabel = "docker-slave3"
} else {
    agentLabel = "docker-slave4"
}

pipeline {
    agent {
        label 'agentLabel'
    }
    parameters {
        string(name: 'HB_PD_URL', defaultValue: 'harbor.abc.com/abc/abc-3.5.x:latest', description: '产品包在harbor中的地址')
        string(name: 'HB_DV_URL', defaultValue: 'harbor.abc.com/abc/datavolume:latest', description: '数据卷容器在harbor中的地址')
        string(name: 'TICKET',  description: '回调唯一标识')
        string(name: 'ServerNumber', description: '机器ID')
    }
    stages {
        stage('清理旧版本数据') {
            steps {
                echo "清理旧版本数据"
                echo "${HB_PD_URL}"
                echo "${params.HB_DV_URL}"
                echo "${params.TICKET}"
                echo "${params.ServerNumber}"
            }
        }
    }
}

报错如下图:

调用上面这个pipeline的工程是这么配置的:


Environment.properties文件内容是:
HB_PD_URL=“harbor.abc.com/abc/abc-3.5.5:latest
HB_DV_URL=“harbor.abc.com/abc/datavolume:latest
TICKET=234abcd
ServerNumber=docker-slave1

ServerNumber 这个参数没找到

是的,没找到参数,可能和我配置两个Job传递参数时有些问题,我想确定一下我的pipeline和您的分享是一致的吧,pipeline没有问题吧?
这个没有传递过去参数的问题您有什么想法吗?

[quote=“InGramViking, post:7, topic:537”]
没找到
[/quote]


我的参数是这样的

好的,感谢,我先单独测试pipeline的正确性;问题可能出在两个Job传递变量时,我再排查一下;

配置成功了,发一下配置:

Deploy_DockerJob

pipeline部分:

def agentLabel

if (ServerNumber== "docker-slave1") {
    agentLabel = "docker-slave1"
} else if (ServerNumber== "docker-slave2") {
    agentLabel = "docker-slave2"
} else if (ServerNumber== "docker-slave3") {
    agentLabel = "docker-slave3"
} else {
    agentLabel = "docker-slave4"
}

pipeline {
    agent {
        label "${agentLabel}"
    }
    parameters {
        string(name: 'HB_PD_URL', defaultValue: 'harbor.abc.com/abc/abc-3.5.x:latest', description: '产品包在harbor中的地址')
        string(name: 'HB_DV_URL', defaultValue: 'harbor.abc.com/abc/datavolume:latest', description: '数据卷容器在harbor中的地址')
        string(name: 'TICKET',  description: '回调唯一标识')
        string(name: 'ServerNumber', description: '机器ID')
    }
    stages {
        stage('清理旧版本数据') {
            steps {
                echo "清理旧版本数据"
                echo "${HB_PD_URL}"
                echo "${params.HB_DV_URL}"
                echo "${params.TICKET}"
                echo "${params.ServerNumber}"
            }
        }
    }
}

页面部分:
在这个job的页面部分再添加参数(不明白为啥,在pipeline中已经设置了parameters,在页面上还得再配置,不然curl 触发的时候报不是参数化构建job;截图不全,有四个参数,只截了两个)

Build_Deploy_DockerJob

这个job会调用 Deploy_DockerJob,传递参数,传递的方式及文件内容在上面的回复中,配置没问题;