jenkins管道:当条件和mercurial标签

jenkins管道:当条件和mercurial标签,jenkins,tags,mercurial,Jenkins,Tags,Mercurial,仅当当前版本已标记有版本号时,我才尝试运行jenkins构建(部署)的最后一步。 我试着去看电影,但这只适合GIT 以下是我的设置: Jenkins轮询我的存储库并从中提取Jenkins文件 执行以下文件 // --- Get sources from mercurial --- stage ('Checkout') { steps { bat "Hg purge --config extensions.purge= --all --print" chec

仅当当前版本已标记有版本号时,我才尝试运行jenkins构建(部署)的最后一步。 我试着去看电影,但这只适合GIT

以下是我的设置:

  • Jenkins轮询我的存储库并从中提取Jenkins文件
  • 执行以下文件

    // --- 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\""
        }
    }
    
  • 不幸的是,每次都会忽略部署部分

    构建的屏幕截图:

    问题似乎如下:

    • Mercurial标记实际上是一个提交,在.hgtags文件中添加了一行

    • 当我拉取将被标记的修订时,它没有部署,因为还没有标记

    • 当我使用“标记提交”拉取修订时,它没有被部署,并且标记引用了旧的修订


    你知道怎么做吗?

    对不起,打扰你们了,我已经弄明白了

    我补充说:

    • 确定提交是否为mercurial标记的步骤
    • 如果标签以“发布”开头,则更新标签修订的步骤
    • 变量${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查看的管道:

    需要部署时: