Выполнять шаг Jenkins Pipeline только при создании тега

У меня есть определенная логика сборки, например публикация, которую я хотел бы, чтобы Jenkins выполнял только при создании тега Git. Как я могу выполнить это, используя декларативный конвейер Дженкина?

Другими словами, я пытаюсь создать функциональность, эквивалентную функциональности Travis CI по развертыванию тегов:

deploy:
  [...]
  on: 
    tags: true

Существует встроенное условие для проверки ветки, но я не вижу ни одного, указывающего тег.


person vossad01    schedule 21.01.2018    source источник


Ответы (2)


Обновление: Начиная с версии 1.2.8 Подключаемый модуль определения модели конвейера теперь можно использовать buldingTag():

stage('Deploy') {
  when {
    buildingTag()
  }
  steps {
    echo 'Replace this with your actual deployment steps'
  }
}

При использовании конфигурации Multibranch Pipeline вы можете использовать условие expression вместе с переменной среды TAG_NAME, предоставляемой лежащий в основе плагин Branch API. К сожалению, вы не можете напрямую проверить, определена ли переменная среды на уровне Groovy (ограничения API), поэтому вам нужно протестировать ее в оболочке:

stage('Deploy') {
  when { expression { sh([returnStdout: true, script: 'echo $TAG_NAME | tr -d \'\n\'']) } }
  steps {
    echo 'Replace this with your actual deployment steps'
  }
}

Вышеупомянутое использует преимущества непустых строк, которые являются правдивыми в Groovy.

Более простой способ может быть представлен в будущих версиях. См. jenkinsci/pipeline-model-definition-plugin#240.

person vossad01    schedule 21.01.2018
comment
Может кто-нибудь объяснить, что должно делать выражение во втором примере? К сожалению, buildingTag() у меня не работает :( - person user568021; 24.05.2019

У меня была аналогичная ситуация, которую я обработал, получив имя ветки, в случае тега это похоже на refs/tags/v101.0.0-beta8468, поэтому вам нужно извлечь/разобрать это, чтобы проверить, является ли это тегом, иначе это просто имя ветки, например pipeline. например.

if(env.gitlabBranch.contains("tags"))
    {
        isTag = true
        echo "----------------true----------------"
        branch = env.gitlabBranch.split("/")[2]
        imageTag = branch

    }
    else
    {
        branch = "origin/$env.gitlabBranch"

    }

И на шаге проверки укажите ветку как

 branches: [[name: "${branch}"]

если вы хотите оформить заказ из того же проекта. Основываясь на переменной isTag, вы можете выбрать запуск определенного этапа. Нравиться:

if(isTag) {
stage('Deploy') {
   // your logic here
}

инициализируйте свой isTag как false :)

person Siddhant Mishra    schedule 21.01.2018