Jenkins groovy - 如何从最新提交中检索标签?

moh*_*het 3 git groovy git-tag jenkins-groovy jenkins-pipeline

要从 获取最新提交branchName,我们运行以下代码:

treeMapData = git(branch: branchName, credentialsId: credential, url: "${gitLabServer}/${projectName}/${repo}.git")
Run Code Online (Sandbox Code Playgroud)

根据我们的工作流程,确保每次提交有一个标签

我们想要构建代码,只有当提交被标记时。


如何检索最新提交的标签名称?

evo*_*box 6

我们可以从 repo 中获取标签,以防 Jenkins 还没有。

git fetch --tags
Run Code Online (Sandbox Code Playgroud)

我们需要找到指向特定提交或HEAD在我们的例子中的标签。幸运的是,git 中有一个方便的命令可以让我们做到这一点。

git tag --points-at HEAD
Run Code Online (Sandbox Code Playgroud)

使用awk我们可以将其转换为 groovy 可以伪造的输出。

awk NF
Run Code Online (Sandbox Code Playgroud)

所以我们,首先我们检查推送的分支是否是 master

if (env.BRANCH_NAME == 'master') {
Run Code Online (Sandbox Code Playgroud)

把它锁起来

  lock('publish master') {
Run Code Online (Sandbox Code Playgroud)

执行git tag shell脚本并赋值给TAG

    TAG = sh (
      returnStdout: true,
      script: 'git fetch --tags && git tag --points-at HEAD | awk NF'
    ).trim()
Run Code Online (Sandbox Code Playgroud)

如果标签存在,做点什么!

    if (TAG) {
      stage('Deploy Prod') {
        echo "Deploying to Prod ${TAG}"
      }
    }
Run Code Online (Sandbox Code Playgroud)

希望这能回答你的问题,或者至少会让你走上正轨。