Запуск Jenkins Job по webhook комиту с тегом

ci
automation
infrastructure
jenkins
pipeline
java
Теги: #<Tag:0x00007fedbc5b31d0> #<Tag:0x00007fedbc5b3090> #<Tag:0x00007fedbc5b2f28> #<Tag:0x00007fedbc5b2dc0> #<Tag:0x00007fedbc5b2c80> #<Tag:0x00007fedbc5b2b40>

(Andrey Melnichenko) #1

Добрый день всем!

Шаг 1. Есть 4 репозитория в каждом есть ветка develop, хочу настроить запуск джобы по хуку но только если в комите был ТЕГ.
Шаг 2. В идеале выливать код синхронно со всех 4-х репозиториев, т.е. если в 3 репы пришли комиты с тегом а в 4-ю нет то пока не выливать, а стартовать только после 4-го коммита с тегом.
Настройки Дженкинса


Настройки ГИТа


(Sergey Korol) #2

Ну для начала нужно включить Discover tags behavior в настройках гита. А дальше - добавить conditional step, проверяя соответствующий тег. Но используя Jenkins 1.x подход, все это будет выглядеть достаточно громоздко.

Второй шаг вообще навеивает костылями. Стандартный гит плагин не поддерживает multi checkout. А существующие альтернативы, насколько я помню, уже deprecated. Т.е. вариант только шелом все это делать без участия гит плагина.

Но лучше все же перейти на пайплайны. Там и теги легко обрабатываются, и multi checkout поддерживается из коробки.


(Andrey Melnichenko) #3

@ArtOfLife , спасибо за оперативный ответ, какой Pipeline-плагин для решения такого рода задачи Вы бы посоветовали. А то только что посмотрел в доступных плагинах в дженкинсе их 100500


(Sergey Korol) #4

(Andrey Melnichenko) #5

@ArtOfLife, переделал джобу на пайплайн, написал простенький скрипт с помощью документации, но то что я ожидаю он не делает.
Рipeline скрипт:

pipeline {
    agent any
    triggers {
        cron('* * * * *')
    }
    stages {
        stage ('Prepare') {
            steps {
                git branch: 'tag1', url: 'git@bitbucket.org:moboxcompany/tests.git'
            }
        }
        stage ('Deploy') {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: "JenkinsSrv", transfers: [sshTransfer(execCommand: 'pwd')])])
            }
        }
    }
    post ('POST BUILD'){
        always {
            echo 'This is post action!!!'
        }
    }
}

Я ожидаю что Jenkins будет каждую минуту проверять наличие обновлений в репозитории и если они есть то выполнять стейджи
Но в реальности триггер ничего нового не видит.

Вариант 2:

Bitbucket hooks, когда активирую эту опцию то при каждом пуше стартует сборка но если добавляю условие в стейдж

when { 
        tag "release*" 
}

то сборка стартует но результат такой