如何将JOB_NAME排除文件夹放入Jenkins的环境变量中?

时间:2017-01-25 13:32:10

标签: jenkins jenkins-pipeline

我想将当前正在执行的Jenkins作业的名称放入环境变量中,以便稍后在我的管道中使用,而不使用文件夹名称。我假设我需要类似的东西:

withEnv(['JOB_BASE_NAME=JOB_NAME.split('/').last()']) {
    echo "Job base name: ${JOB_BASE_NAME}"
}

但是我收到了错误:

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: 
    unclassified method java.lang.String div java.lang.String

4 个答案:

答案 0 :(得分:6)

在Jenkins文档中,您有§Using environment variables部分提到:

  

Jenkins管道中可访问的环境变量的完整列表记录在localhost:8080/pipeline-syntax/globals#env,假设Jenkins主机在localhost上运行:8080

如果你点击链接,你会发现Jenkins已经提供了JOB_BASE_NAME OOTB,所以这正是你想要的。

  

JOB_BASE_NAME -   此构建项目的短名称剥离文件夹路径,例如“bar / foo”的“foo”。

答案 1 :(得分:4)

我解决了这个问题。如果有人发现它有用:

{{1}}

答案 2 :(得分:0)

可能为时已晚,但想到会帮助需要使用bash的更简单解决方案的人。

${JOB_NAME%%/*}

示例:

  • 我创建了一个名为poc_jenkins_pipeline
  • 的项目
  • 如果我尝试访问默认的jenkins变量${JOB_NAME}
    • 返回值poc_jenkins_pipeline/develop,即<project name>/<branch name>
  • 在bash ${JOB_NAME%%/*}中使用%运算符返回值poc_jenkins_pipeline
  • 参考链接 - https://qa.nuxeo.org/jenkins/pipeline-syntax/globals

答案 3 :(得分:0)

如果您想要没有文件夹名称的 Jenkins 作业名称,您可以使用:

def job = "${JOB_BASE_NAME}"