【问题标题】:Jenkins MultiBranch - Reference git repo's tag from pipeline file (Jenkinsfile)Jenkins MultiBranch - 从管道文件 (Jenkinsfile) 中引用 git repo 的标签
【发布时间】:2018-01-17 00:48:56
【问题描述】:

这与一年多前回答的问题相同:Jenkinsfile get current tag

那里接受的答案对我不起作用,我认为从那时起行为必须在管道中发生变化。

我的仓库有标签(推送到原点!),我添加了 Jenkins 选项来发现标签,但是我无法从管道步骤中获取或引用它们。 它只是显示为空。

在我的 MultiBranch Pipeline 作业中我添加了“发现标签”步骤

我有一个带有发布标签集的 git repo:

myhost$ git fetch
myhost$ git tag
0.0.42
myhost$ git tag --sort version:refname
0.0.42

在我尝试过的 Jenkinsfile 中:

sh "git tag --sort version:refname | tail -1 > version.tmp"
sh "cat version.tmp"

和:

sh(returnStdout: true, script: "git tag --sort version:refname | tail -1").trim()

他们都一无所有(null)

【问题讨论】:

  • 您是否尝试过运行 git fetch --tags 以确保 Jenkins 在克隆期间获取它们?我不确定它是否开箱即用。发现(创造新工作)并不一定意味着它们在克隆时可用。
  • 我刚刚确认这是正确的答案 - 如果您回答问题,我会将其标记为已接受的答案。
  • @StephenKing:我尝试在第一步中添加sh 'git fetch --tags'(就在checkout scm之后。但我遇到了以下问题:+ git fetch --tags. fatal: could not read Username for 'https://bitbucket.org': No such device or address'.我在这里缺少什么?

标签: git jenkins jenkins-pipeline


【解决方案1】:

您必须确保 Jenkins 使用标签获取您的 repo。您可以在 Jenkins 构建控制台中查看是否是这种情况。必须有git fetch --no-tags ...git fetch --tags ... 之类的行。

我的 Jenkins 安装似乎有时会在没有明显原因的情况下改变这种行为。为确保它获取标签,请将高级克隆行为添加到您的管道作业中,并使用未标记的复选框不获取标签

【讨论】:

    【解决方案2】:

    你应该试试

     sh "git tag --sort version:refname > tags.tmp"
     sh "tail tags.tmp -n 1 > version.tmp"
     sh "cat version.tmp"
    

    我认为这种改变应该会奏效。

    谢谢,

    【讨论】:

      最近更新 更多