Универсальный триггер Jenkins Webhook для фиксации слияния

#git #jenkins #jenkins-pipeline #webhooks #jenkins-generic-webhook-trigger

#git #дженкинс #дженкинс-конвейер #веб-крючки #дженкинс-общий триггер веб-крючка

Вопрос:

Я пытаюсь сгенерировать webhook из Github, чтобы запускать сборку всякий раз, когда ветвь функций объединяется с конкретной ветвью (например master ). Я использую плагин «Generic Webhook Trigger» в Jenkins для этого, поскольку не смог найти других подходящих плагинов.

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

  • payload.ref == «ссылки / head / master»
  • payload.commits[1].message Матчи Merge pull request*

Однако в плагине кажется, что я мог установить только один фильтр. Есть ли какой-либо способ установить несколько фильтров?

Ответ №1:

Я решил это с помощью regexpFilterExpression .

Сначала вам нужно будет поместить имя ветки, для которой пришло событие push, в переменную с именем ref , добавив это в GenericTrigger класс:

 genericVariables: [
    [key: 'ref', value: '$.ref']
]
  

Теперь нам нужны все заголовки из коммитов, которые были в полезной нагрузке триггера, поэтому добавьте для него еще одну переменную

 ,[key: 'commit_titles', value: '$.commits[*].title']
  

Затем нам нужно собрать строку, к которой будет применен фильтр, определив regexpFilterText свойство в GenericTrigger class

 ...
regexpFilterText: 'BRANCH: $ref COMMIT_TITLES: $commit_titles END',
...
  

Переменные будут заменены.

Затем пришло время определить фактический фильтр

 ...
regexpFilterExpression: "BRANCH: refs/heads/master COMMIT_TITLES: .*?(Merge pull request).*? END"
...
  

Полный пример:

 properties ([
    pipelineTriggers([
        [$class: 'GenericTrigger',
            genericVariables: [
                [key: 'ref', value: '$.ref'],
                [key: 'commit_titles', value: '$.commits[*].title']
            ],
            token: 'my secret token',
            causeString: 'Triggered because of $commit_titles in branch $ref',
            printContributedVariables: true,
            printPostContent: true,
            silentResponse: false,
            regexpFilterText: 'BRANCH: $ref COMMIT_TITLES: $commit_titles END',
            regexpFilterExpression: "BRANCH: refs/heads/master COMMIT_TITLES .*?(Merge pull request).*? END"
        ]
    ])
])