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