我无法在Jenkinsfile管道中定义动态变量

g6baxovj  于 2022-11-01  发布在  Jenkins
关注(0)|答案(1)|浏览(192)

我想在Jenkinsfile中设置动态变量,下面是我的Jenkinsfile

def determineProjectByBranch(branchName) {
  String projectName = "";

  if (branchName.contains("api")) {
    projectName = "api";
  } else if (branchName.contains("auth")) {
    projectName = "auth";
  }

  return projectName;
}

pipeline {
  agent any

  stages {
    stage("Build") {
      environment {
        PROJECT_NAME = determineProjectByBranch("${GIT_BRANCH}")
      }

      steps {
        script {
          PROJECT_NAME = determineProjectByBranch("${GIT_BRANCH}")
        }
        echo "branch name: ${GIT_BRANCH}"
        echo "project name: " + PROJECT_NAME // it shows empty value
        echo "project name: ${PROJECT_NAME}"
        sh "chmod +x gradlew"
        sh "./gradlew ${PROJECT_NAME}:clean ${PROJECT_NAME}:build"
      }
    }
  }
}

正如你可以看到上面的代码我想使用函数,使它可以设置动态值,但我找不到正确的方式来设置动态变量。
我也尝试了下面的代码,但它也不工作.

def determineProjectByBranch(branchName) {
  String projectName = "";

  if (branchName.contains("api")) {
    projectName = "api";
  } else if (branchName.contains("auth")) {
    projectName = "auth";
  }

  return projectName;
}

def projectName

pipeline {
  agent any

  stages {
    stage("Build") {
      steps {
        script {
          projectName = determineProjectByBranch("${GIT_BRANCH}")
        }
        echo "branch name: ${GIT_BRANCH}"
        echo "project name: " + projectName // it shows empty value
        echo "project name: ${projectName}"
        sh "chmod +x gradlew"
        sh "./gradlew ${projectName}:clean ${projectName}:build"
      }
    }
  }
}

你可能认为函数返回空值,但当我用下面的代码构建时,它显示了预期值

def determineProjectByBranch(branchName) {
  String projectName = "";

  if (branchName.contains("api")) {
    projectName = "api";
  } else if (branchName.contains("auth")) {
    projectName = "auth";
  }

  return projectName;
}

def projectName

pipeline {
  agent any

  stages {
    stage("Build") {
      steps {
        echo "branch name: ${GIT_BRANCH}"
        echo "project name: " + determineProjectByBranch("${GIT_BRANCH}") // it shows expected value
        echo "project name: ${projectName}"
        sh "chmod +x gradlew"
        sh "./gradlew ${PROJECT_NAME}:clean ${PROJECT_NAME}:build"
      }
    }
  }
}

我不确定定义变量取决于Jenkins版本,但我的版本是2.361.2。如有任何帮助,将不胜感激,提前感谢🙇

yizd12fk

yizd12fk1#

我只是硬编码的价值观和删除不相关的部分和以下似乎为我工作的罚款。

def determineProjectByBranch(branchName) {
  String projectName = "";

  if (branchName.contains("api")) {
    projectName = "api";
  } else if (branchName.contains("auth")) {
    projectName = "auth";
  }

  return projectName;
}

pipeline {
  agent any

  stages {
    stage("Build") {
      environment {
        PROJECT_NAME = determineProjectByBranch("api123")
      }

      steps {
        echo "branch name:"
        echo "project name: " + PROJECT_NAME // it shows empty value
        echo "project name: ${PROJECT_NAME}"
      }
    }
  }
}

输出量

[Pipeline] withEnv
[Pipeline] {
[Pipeline] echo
branch name:
[Pipeline] echo
project name: api
[Pipeline] echo
project name: api
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // stage

相关问题