трубопровод Дженкинса: когда состояние и ртутные метки - PullRequest
1 голос
/ 30 января 2020

Я пытаюсь выполнить последний шаг моей сборки (развертывания) jenkins, только если текущая версия помечена номером версии. Я пытался следовать следующему примеру , но это только для GIT.

Вот что я настроил:

  1. Дженкинс опрашивает мой репозиторий и вытягивает jenkinsfile из него
  2. Следующий jenkinsfile выполняется

    // --- 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

Проблема, как представляется, заключается в следующем:

  • Ртутные теги действительно, коммит со строкой, добавленной в файл .hgtags

  • Когда я извлекаю ревизию, которая будет помечена, она не развертывается, так как тега пока нет

  • Когда я извлекаю ревизию с помощью «фиксации тега», она не развертывается, и тег ссылается на более старую ревизию.

Есть ли у вас какие-либо идеи? о том, как это сделать?

1 Ответ

0 голосов
/ 31 января 2020

Извините за беспокойство, ребята, я понял это.

Я добавил:

  • Шаг, который определяет, является ли коммит ртутным тегом.
  • Шаг, который обновляет ревизию тега, если тег начинается с «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
        }
    }
}

Вот трубопровод, рассматриваемый из голубого океана, когда нет необходимости развертывать: enter image description here

И когда необходимо развернуть: enter image description here

...