如何从jenkinsfile中获取管道的名称

red*_*888 13 jenkins jenkins-pipeline

env.JOB_NAME管道名称后缀为分支名称.

所以env.JOB_NAME将是<jenkins_pipeline_name>_<my_branch>

我怎样才能获取管道名称并将其存储在我的jenkins文件顶部的环境{}块中的var中以通过该文件使用?

我不想只是声明性地使用脚本管道.

kig*_*was 7

你可以检查一下http://YOUR-JENKINS-SERVER.com/pipeline-syntax/globals#env,它会给你

JOB_NAME
  Name of the project of this build, such as "foo" or "foo/bar".
JOB_BASE_NAME
  Short Name of the project of this build stripping off folder paths, such as "foo" for "bar/foo".
Run Code Online (Sandbox Code Playgroud)

对于具有多个分支和 PR 的 jenkins 组织项目,JOB_NAME实际上是YOUR_ORG_NAME/YOUR_REPO_NAME/YOUR_BRANCH_OR_PR_NAME,例如my-org/my-repo/PR-23,而JOB_BASE_NAME只是PR-23。正如以色列所说,你可以用它env.JOB_NAME.tokenize('/') as String[]来得到你想要的东西。

如果您想在 Jenkins 中使用更多奇特的脚本,Groovy可以是一个很好的参考。


OK9*_*999 6

由于您正在使用multibranch作业,因此env变量返回它从分支.ie _ ..创建的实际作业名称.所以,如果没有一些机制来剥离/删除分支名称,我认为没有jenkins开箱即用的env变量.

  • env.JOB_BASE_NAME就是答案 (25认同)
  • 在多分支管道中,env.JOB_BASE_NAME只是分支名称-参见[JENKINS-44278](https://issues.jenkins-ci.org/browse/JENKINS-44278)。 (3认同)

Jef*_*iks 6

@ red888指出了以下对我来说像魔术一样有效的答案。我在实际答案中指出这一点,因为我几乎错过了它:

env.JOB_BASE_NAME

Credit to @red888 in the comment above. Send upvotes his/her way.


Isr*_*les 5

在詹金斯管道中

def allJob = env.JOB_NAME.tokenize('/') as String[];
def projectName = allJob[0];
Run Code Online (Sandbox Code Playgroud)