詹金斯的条件经纪人

时间:2019-04-22 20:17:59

标签: git jenkins

我试图在通过分支定义的詹金斯中设置条件代理,例如:

cloud = myconditional()
    pipeline {
    agent {
        kubernetes {
            cloud cloud
        }
    }

并且,函数myconditional在库/vars/myconditional.groovy中定义

def call() {
    def cloud = "clusterB"
    echo "Branch ${env.GIT_BRANCH}"
    if ("${env.GIT_BRANCH}" != "master") {
       echo "use clusterA"
       cloud = "clusterA"
    }else{
        echo "use clusterB"
    }
    return cloud
...

但是我得到Branch null

使用scm

的其他方式
def getGitBranchName() {
    return scm.branches[0].name
}

def call() {
    def cloud = "clusterB"
    def branch = getGitBranchName()
    echo "Branch ${branch}"
    if (branch != "master") {
       echo "use clusterA"
       cloud = "clusterA"
    }else{
        echo "use clusterB"
    }
    return cloud

但是我得到了org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use method hudson.plugins.git.BranchSpec getName,并且我没有更改Jenkins配置的权限。

我尝试打印环境变量,但我得到了:

def call() {
    sh 'env > env.txt'
    sh 'cat env.txt'
    ....

我有:org.jenkinsci.plugins.workflow.steps.MissingContextVariableException: Required context class hudson.FilePath is missing

我的问题是,我如何才能从管道中获得实际的分支{}?

非常感谢

1 个答案:

答案 0 :(得分:1)

如果使用的是Jenkins多分支管道,则可以使用以下变量获取分支名称。

  

env.BRANCH_NAME

您可以使用以下条件:

if ("${BRANCH_NAME}" != "master" ) {
     ...
} else {
     ...
}