Jenkins buildingTag()始终返回false

Jenkins buildingTag()始终返回false,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,每当我尝试使用buildingTag()创建条件阶段时,该阶段总是被跳过,即使当前提交是一个标记。这是我的文件: 管道{ 代理人{ 码头工人{ 图像“节点:10” } } 舞台{ 阶段(‘构建’){ 台阶{ sh“纱线安装” sh“节点脚本/build.js” } } 舞台(‘林特’){ 台阶{ sh“纱线绒线” } } 阶段(‘部署’){ 什么时候{ buildingTag() } 环境{ } 台阶{ sh“节点脚本/deploy.js” sh“节点脚本/publish.js” } } } }

每当我尝试使用
buildingTag()
创建条件阶段时,该阶段总是被跳过,即使当前提交是一个标记。这是我的文件:

管道{
代理人{
码头工人{
图像“节点:10”
}
}
舞台{
阶段(‘构建’){
台阶{
sh“纱线安装”
sh“节点脚本/build.js”
}
}
舞台(‘林特’){
台阶{
sh“纱线绒线”
}
}
阶段(‘部署’){
什么时候{
buildingTag()
}
环境{
}
台阶{
sh“节点脚本/deploy.js”
sh“节点脚本/publish.js”
}
}
}
}

可能是由于此错误:

解决办法是:

            when {
                expression {
                    return !isVersionTag(readCurrentTag())           
                }
            }

与:


我一直在使用soru的解决方案,但我在构建标记的分支时遇到了问题,所以我尝试了这个方法,它似乎起到了作用:

def boolean isVersionTag(String tag) {
    echo "checking version tag $tag"

    if (tag == null) {
        return false
    }

    // use your preferred pattern
    def tagMatcher = tag =~ /\d+\.\d+\.\d+/

    return tagMatcher.matches()
}

def String readCurrentTag() {
    return sh(returnStdout: true, script: 'echo ${TAG_NAME}').trim()
}
buildingTag()
要求设置
TAG\u NAME
环境变量

这不是在简单(非多分支)管道中自动设置的

pipeline {
    agent any
    environment {
        // To get the tag like shown soru's answer:
        // TAG_NAME = sh(returnStdout: true, script: "git describe --tags").trim()

        // In my case I already have a tag saved as an environment variable:
        // gitlabBranch=refs/tags/tagname
        TAG_NAME = "${env.gitlabBranch.split('/')[2]}"
    }
    stages {
        stage('buildingTag') {
            when { buildingTag() }
            steps {
                echo 'buildingTag works here.'
            }
        }
    }
}

Jenkins在控制台输出中显示的提交是否等于您标记的提交?通常情况下,这种情况应该有效correctly@mkemmerz日志显示
git checkout-f 8ce7cd6efc73d5632a089ae9ea992e075e2d784b
哪个是正确的提交。确定一下-您已经正确标记了它吗?@mkemmerz我正在使用
np
包来发布包,它还标记并将提交推送到GitHub。除了完全不标记提交之外,我不确定是否有其他方法可以错误地标记提交。这是一个很好的答案,但是我认为它不适用于嵌套条件。例如,在
post{success{script{
中的某个地方,因为
when{
仅表示
stage{when{
子值:(
pipeline {
    agent any
    environment {
        // To get the tag like shown soru's answer:
        // TAG_NAME = sh(returnStdout: true, script: "git describe --tags").trim()

        // In my case I already have a tag saved as an environment variable:
        // gitlabBranch=refs/tags/tagname
        TAG_NAME = "${env.gitlabBranch.split('/')[2]}"
    }
    stages {
        stage('buildingTag') {
            when { buildingTag() }
            steps {
                echo 'buildingTag works here.'
            }
        }
    }
}