Jenkins流水线:when条件和Mercurial标签

3
我正在尝试仅在当前版本已使用版本号标记时运行Jenkins构建的最后一步(部署)。 我试图按照以下示例进行操作,但这仅适用于GIT:following example。 这是我设置的内容:
  1. Jenkins polls my repository and pull the jenkinsfile from it
  2. The following jenkinsfile is executed

    // --- Get sources from mercurial ---
    stage ('Checkout') {
        steps {
            bat "Hg purge --config extensions.purge= --all --print"
            checkout([$class: 'MercurialSCM', credentialsId: '', revision: 'default', source: 'MY_REPO'])
        }
    }
    
    // --- BUILD ---
    stage ('Build') {
        // my build
    }
    
    // --- DEPLOY MASTER ---
    stage ('Deploy') {
        when { tag "release*" }
        steps {
            bat "\"${env.WORKSPACE}\\jenkins\\deploy.bat\" \"M:\\dev-FU4\""
        }
    }
    
很遗憾,每次都会忽略部署部分... 构建的屏幕截图: Screenshot of the build 问题似乎是这样的: - Mercurial标签实际上是在.hgtags文件中添加了一行的提交 - 当我拉出将要标记的修订版本时,它不会被部署,因为还没有标记 - 当我拉出带有“标记提交”的修订版本时,它没有被部署,因为该标记引用的是旧版。 您有任何想法如何解决这个问题吗?
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
3

很抱歉打扰大家,我已经解决了问题。

我添加了以下内容:

  • 一个步骤来确定提交是否为Mercurial标签。
  • 如果标签以“release”开头,则更新到标签版本。
  • 变量${hgTagVersion}可供任何需要它的脚本使用。

以下是源代码:

// Pipeline stages
stages {

    // --- Get sources from mercurial ---
    stage ('Checkout') {
        steps {
            bat "Hg purge --config extensions.purge= --all --print"
            checkout([$class: 'MercurialSCM', credentialsId: '', revision: 'default', source: 'MY_REPO'])
        }
    }

    stage ('Deployment determination') {
        steps {
            // Determine if Deploy is needed
            script {
                HG_LATEST_DESC = bat (
                    script: '@echo off & hg log --template {desc} --limit 1',
                    returnStdout: true
                ).trim()

                // dummy test of a tag commit
                // HG_LATEST_DESC = "Added tag release-test for changeset 1dcf7a76d27c"

                deployIsNeeded = false
                hgTag = ""
                hgChgSet = ""
                hgTagVersion = ""

                hgsplit = HG_LATEST_DESC.split("Added tag ")
                if (hgsplit.length == 2)
                {
                    hgsplit = hgsplit[1].split(" for changeset ")
                    if(hgsplit.length == 2)
                    {
                        hgTag = hgsplit[0]
                        hgChgSet = hgsplit[1]
                        if(hgTag.contains("release-"))
                        {
                            deployIsNeeded = true;
                            hgTagVersion = hgTag.split("release-")[1]
                        }
                    }
                }

                if (deployIsNeeded)
                {
                    println "Deploy is needed. Hg will checkout to tag and master will be deployed."
                    println "HG tag: ${hgTag}"
                    println "HG changeset: ${hgChgSet}"
                    println "Deploy version: ${hgTagVersion}"
                }
                else
                {
                    println "Deploy is not needed. Build will remain local."
                }
            }
        }
    }

    // --- Checkout to deploy tag ---
    stage ('Deploy tag checkout')
    {
        when { expression { return deployIsNeeded; } }
        steps {
            bat "hg update --clean --rev ${hgChgSet}"
        }
    }

    // --- BUILD ---
    stage ('Build') {
        // my build steps
    }


    // --- DEPLOY MASTER ---
    stage ('Deploy') {
        when { expression { return deployIsNeeded; } }
        steps {
            // my deployment script
        }
    }
}
以下是需要翻译的内容:

当不需要部署时,从BlueOcean查看的流水线如下所示: 输入图像描述

当需要部署时: 输入图像描述


谢谢!你为什么需要“部署标签检出”步骤? - Violet Giraffe
应该是 log --template \'{desc}\' - 你的代码中缺少引号,所以模板无法工作。 - Violet Giraffe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,