BuildingTag() 始终返回 false

dot*_*nor 5 jenkins jenkins-pipeline

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

pipeline {
  agent {
    docker {
      image 'node:10'
    }

  }
  stages {
    stage('Build') {
      steps {
        sh 'yarn install'
        sh 'node scripts/build.js'
      }
    }
    stage('Lint') {
      steps {
        sh 'yarn lint'
      }
    }
    stage('Deploy') {
      when {
        buildingTag()
      }
      environment {
      }
      steps {
        sh 'node scripts/deploy.js'
        sh 'node scripts/publish.js'
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

sor*_*oru 3

可能是由于这个错误:

https://issues.jenkins-ci.org/browse/JENKINS-55987

解决方法是:

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

Run Code Online (Sandbox Code Playgroud)

和:

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()
}

// workaround https://issues.jenkins-ci.org/browse/JENKINS-55987
def String readCurrentTag() {

    return sh(returnStdout: true, script: "git describe --tags").trim()           
}


Run Code Online (Sandbox Code Playgroud)