Я настраиваю интеграцию веб-перехватчиков между частным репозиторием GitHub и сборкой Jenkins. Я настраиваю задания исключительно с помощью сценариев Job DSL groovy (я готов перейти на другой программный механизм настройки c задания, но я не приму никаких ответов, требующих от меня настройки заданий вручную). Я хотел бы настроить контекст состояния фиксации и набор настраиваемых сообщений на основе состояния сборки.
Документация Job DSL API, встроенная в Jenkins , бесполезна, только дает мне эту подпись : githubPullRequest(Closure closure)
, но не сообщает мне, как построить подходящее закрытие.
Вот соответствующие разделы моего задания DSL:
triggers {
githubPush()
githubPullRequest {
useGitHubHooks()
buildStatus {
completedStatus('SUCCESS', 'Build succeeded!')
completedStatus('FAILURE', 'Build failed. ')
completedStatus('ERROR', 'Build errored. This is probably a problem with Jenkins or related infrastructure and not an issue with your code changes.')
}
}
}
(...)
scm {
git {
remote {
github('privateorg/myrepo', 'ssh')
credentials('my-credential-id')
refspec('+refs/pull/*:refs/remotes/origin/pr/*')
}
branch('${sha1}')
}
}
Это ошибка:
ERROR: (build.groovy, line 8) No signature of method: javaposse.jobdsl.dsl.helpers.triggers.TriggerContext.buildStatus() is applicable for argument types:
(build$_run_closure1$_closure2$_closure10$_closure11) values:
[build$_run_closure1$_closure2$_closure10$_closure11@602572cb]
Строка 8:
buildStatus {
Если я удалю весь блок buildStatus
, Дженкинс примет сценарий и успешно создаст задание. Мои хуки pu sh работают, а мои хуки запросов на вытягивание - нет.
Я не программист Groovy и не очень хорошо знаком с какими-либо аспектами Jenkins. Я понимаю, что не существует метода, совместимого с написанным мной DSL, но я не знаю, где искать действительные сигнатуры методов. Я не понимаю, как DSL сопоставляется с вызовами методов достаточно хорошо, чтобы найти или даже распознать подходящий метод и создать совместимый DSL.
Поиск в Google сообщения об ошибке привел меня к некоторым людям, у которых были похожие проблемы в 2016 году -2017: 1 , 2 , 3 . Их проблема, по-видимому, возникла из-за устаревания плагина Github Pull Request Builder как основного, связанного плагина и соответствующего изменения синтаксиса. Это привело меня к открытию нового синтаксиса, приведенного здесь :
triggers {
githubPush()
githubPullRequest {
useGitHubHooks()
extensions {
'org.jenkinsci.plugins.ghprb.extensions.status.GhprbSimpleStatus' {
buildStatus {
'org.jenkinsci.plugins.ghprb.extensions.comments.GhprbBuildResultMessage' {
message 'Build in progress...'
result 'PENDING'
}
'org.jenkinsci.plugins.ghprb.extensions.comments.GhprbBuildResultMessage' {
message 'Build succeeded! It is safe to merge ${ghprbSourceBranch} into ${ghprbTargetBranch}.'
result 'SUCCESS'
}
'org.jenkinsci.plugins.ghprb.extensions.comments.GhprbBuildResultMessage' {
message 'Build failed.'
result 'FAILURE'
}
'org.jenkinsci.plugins.ghprb.extensions.comments.GhprbBuildResultMessage' {
message 'Build errored. This is probably a problem with Jenkins or related infrastructure and not an issue with your code changes.'
result 'ERROR'
}
}
}
}
}
}
Но это тоже не помогло; сбой по сути тот же:
ERROR: (build.groovy, line 9) No signature of method: javaposse.jobdsl.dsl.helpers.triggers.TriggerContext.org.jenkinsci.plugins.ghprb.extensions.status.GhprbSimpleStatus() is applicable for argument types:
(build$_run_closure1$_closure2$_closure10$_closure11$_closure12) values:
[build$_run_closure1$_closure2$_closure10$_closure11$_closure12@707221f0]
Строка 9:
'org.jenkinsci.plugins.ghprb.extensions.status.GhprbSimpleStatus' {
Среди всего этого я изо всех сил пытаюсь понять различия между buildStatus, commitStatus, completedStatus, et c. Что это значит?
Тем временем я вернул DSL к версии без buildStatus
и попытался создать PR, чтобы увидеть, запустит ли он сборку. Это не так. Я проверил "Журнал обработчиков GitHub":
Started on Aug 4, 2020 6:16:47 PM
Started by event from 10.101.32.177 ⇒ https://my-jenkins-host.com/github-webhook/ on Tue Aug 04 18:16:47 UTC 2020
Using strategy: Default
[poll] Last Built Revision: Revision 91170fb44c40737a6410acfba820d6555a0475bb (refs/remotes/origin/dev)
using credential my-credential-id
> git --version # timeout=10
using GIT_ASKPASS to set credentials
> git ls-remote -h -- git@github.com:privateorg/myrepo.git # timeout=10
Found 64 remote heads on git@github.com:privateorg/myrepo.git
Ignoring refs/heads/branch1 as it doesn't match any of the configured refspecs
Ignoring refs/heads/branch2 as it doesn't match any of the configured refspecs
...
Ignoring refs/heads/branch64 as it doesn't match any of the configured refspecs
Done. Took 0.71 sec
No changes
Возможно, журнал обработчиков не подходящее место для просмотра, но использование -h
в вызове git ls-remote
привело только к списку филиалы - не пиры. Если я использую ту же команду локально, но без -h
, будут перечислены PR, которые, я уверен, будут соответствовать моему refspe c.
Первоначально я столкнулся с этими проблемами при использовании CloudBees Core Client Master версии 2.204.3.7, ревизия 3. Обновление до последней версии (2.235.2.3) не помогло.
Используемые версии плагинов:
- Job DSL: 1.77
- GHPRB: 1.42.1
Если в игре есть другие плагины, которые имеют отношение к этому вопросу, дайте мне знать, и я добавлю их.
Сводка моих вопросов:
- Каков правильный синтаксис для настройки пользовательских сообщений о состоянии, которые будут отображаться в GitHub?
- Что не так с моей допустимой в остальном конфигурации, такой, что опрос пультов игнорирует PR, и что открытие нового PR не запускает сборку ?
- Есть ли другое место, где мне следует искать документацию по этим вещам? Или другие ресурсы, которые помогут мне узнать, что я делаю?