当前位置: 首页 > 知识库问答 >
问题:

如何将GIT标记从当前分支读入变量?

燕英逸
2023-03-14

我想在声明性Jenkins管道中使用git标记。我的詹金斯档案是这样的

pipeline {
    agent any
    stages {
        stage('Setup') {
            steps {
                script {
                    env.MY_GIT_TAG = sh(returnStdout: true, script: 'git tag -l --points-at HEAD')
                    // ... 
                }
            }
        }
        stage('Build'){
            // build my code etc ....
        }
        stage('Publish') {
            // push code somewhere depending on tag
            sh "curl -X POST --upload-file ./MyDeployable https://someserver/uri/MyDeployable-${env.MY_GIT_TAG}"
        }
    }
}

但是环境变量MY_GIT_TAG总是空的。经过一些调查,我在Jenkins的日志中注意到这一点:git抓取--no-tags--进度...

有没有办法告诉詹金斯跳过--无标签参数?

因为我事先不知道提交是如何标记的,所以我想从git中签出标签并将其用作变量。所以这个问题的解决方案在这里是不可行的。

共有3个答案

微生博简
2023-03-14

正如Tai Ly所提到的,这里描述了两种可能的解决方案

解决方案1)

您可以在Jenkinsfile中创建一个自定义签出,将noTags设置为false。

checkout([
    $class: 'GitSCM',
    branches: scm.branches,
    doGenerateSubmoduleConfigurations: scm.doGenerateSubmoduleConfigurations,
    extensions: [[$class: 'CloneOption', noTags: false, shallow: false, depth: 0, reference: '']],
    userRemoteConfigs: scm.userRemoteConfigs,
 ])

解决方案2)

在Jenkins Web界面的分支源行为中添加一个"高级克隆行为"条目。它也可以在组织/团队级别为GitHub/比特桶插件设置

濮君植
2023-03-14

正如注释中提到的,sh不返回任何内容。您可以执行env.MY_GIT_TAG=sh(returStdout: true,脚本:'git tag-l--minst-at HEAD'). trim()来返回stdout。

阚砚文
2023-03-14

我们可以使用,sh(returStdout: true, cript:"git tag--ort=-creatordate|head-n 1"). trim()将此转换为一个变量并使用它。

pipeline {
  agent any
    stages {
        stage('get git tag') {
            steps {
             script {
             latestTag = sh(returnStdout:  true, script: "git tag --sort=-creatordate | head -n 1").trim()
             env.BUILD_VERSION = latestTag
             echo "env-BUILD_VERSION"
             echo "${env.BUILD_VERSION}"
            }
        }
    }
  }
}
 类似资料:
  • 问题内容: 我想标记当前的git changeset并从Jenkinsfile内部推送标记。如果标签已经存在,则必须将其替换。 我想使用此逻辑来标记随标记传递的内部版本,该标记将是移动标记。 我怎样才能做到这一点? 问题答案: 这是我能够以这种方式实现的方法,但是,如果您知道更好的方法,我很乐意听到。

  • 当前分支没有跟踪信息。请指定要与哪个分支合并。详见git-pull(1) 如果要设置此分支的跟踪信息,可以使用以下方法: 我希望只更新主分支,而不更新我当前的分支(反正它是一个标记)。这样的事情可能发生吗? 我需要这样做的原因是我有一个自动脚本,它总是git拉出存储库,当然会因为上面的错误而失败…

  • 问题内容: 我是Shell脚本的新手,无法解决这个问题。如果您不熟悉,则命令git branch返回类似 ,其中星号标记当前已签出的分支。当我在终端中运行以下命令时: 我得到: 如预期的那样。 但是,当我跑步时 要么 然后 ,结果只是目录中文件的列表。我们如何使test =“ *开发”的价值? 然后,下一步(一旦我们将“ *开发”变成名为test的变量),就是要获得子字符串。只是以下内容吗? 我正

  • 在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase。 在本节中我们将学习什么是“变基”,怎样使用“变基”,并将展示该操作的惊艳之处,以及指出在何种情况下你应避免使用它。 变基的基本操作 请回顾之前在 分支的合并 中的一个例子,你会看到开发任务分叉到两个不同分支,又各自提交了更新。 Figure 35. 分叉的提交历史 之前介绍过,整合分支最容易的方法是 merge

  • 问题内容: 通过执行以下任一操作,我可以找到当前的git分支名称: 但是,当处于分离的HEAD状态时,例如在Jenkins maven构建的后期构建阶段(或在Travis git fetch中),这些命令将不起作用。 我当前的工作解决方案是这样的: 它显示在HEAD提示上具有最后提交的任何分支名称。这可以正常工作,但我认为使用git-fu更强的人可能有更漂亮的解决方案? 问题答案: 更瓷器的方式:

  • 代码合并主分支后,分支上显示合并过来的提交记录。 我想查看该分支原本的开发记录比较困难,比如我想看看当时我改了哪些内容,很难知道哪次提交是当时的开发。 所以如何查看分支当时的开发记录,而不是合并过来的。