如何在 Jenkins 文件中的 Jenkins 管道代码中添加 gerrit 触发事件
how to add gerrit-trigger events inside Jenkins pipeline code, inside Jenkinsfile
我想在 Jenkinsfile 中添加 gerrit 触发事件,就像我们在 JobDSL 中所做的那样,
triggers {
upstream('pipeline_properties', 'UNSTABLE')
gerrit {
events {
refUpdated()
}
project('reg_exp:jenkins', ["plain:${jenkins_branch}"])
}
}
这在管道代码中是否可行,可以在触发器下找到诸如 cron 和东西之类的东西,但无法获得如何在其中添加 gerrit-trigger 事件的参考。
这是一个有效的 Jenkinsfile
涵盖了 gerrit 触发事件部分,请参阅代码段下方的参考资料
BuildDiscarderProperty
& SCMTrigger
也用于示例。
#!/usr/bin/env groovy
properties(
[
[
$class: 'BuildDiscarderProperty',
strategy: [$class: 'LogRotator', numToKeepStr: '10']
],
pipelineTriggers([
[
$class: 'SCMTrigger',
scmpoll_spec: "H H 1,15 1-11 *"
],
[
$class: 'GerritTrigger', gerritProjects: [
[
$class: "GerritProject",
compareType: "REG_EXP",
pattern: "jenkins",
branches: [
[
$class: "Branch",
pattern: "${jenkins_branch}"
]
]
]
],
triggerOnEvents: [
[$class: "PluginRefUpdatedEvent"]
]
]
])
]
)
node {
echo 'Hello World'
}
有用的参考
config.xml
在JENKINS_HOME
作业目录下用于调试
如果您使用的是声明式管道(与脚本管道相反,其他答案中使用的属性方法应该适用),您想要使用'triggers' 指令。令人困惑的是,使用 properties
似乎有效,但最终(无声地)与其他声明性事物发生冲突,例如 options
和 triggers
.
轻松生成 Gerrit 触发器声明性指令的最佳方法是使用 Jenkins 生成器,可用于 https://$your-jenkins-host/directive-generator
.
的任何 Jenkins 实例
例子
- 导航到
https://$your-jenkins-host/directive-generator
- Select“触发器:触发器”作为示例指令字段。
- 添加触发器,例如在创建补丁集或发布“!build”评论时触发。
- 添加一个模式与其名称匹配的项目和另一个与一个或多个分支匹配的项目。
- 单击“生成声明性指令”按钮。
你应该得到类似的东西:
triggers {
gerrit customUrl: '', gerritProjects: [[branches: [[compareType: 'PLAIN', pattern: 'master']], compareType: 'PLAIN', disableStrictForbiddenFileVerification: false, pattern: 'ring-project']], triggerOnEvents: [commentAddedContains('!build'), patchsetCreated(excludeDrafts: true, excludeNoCodeChange: true, excludeTrivialRebase: true)]
}
准备好在您的声明性管道 Jenkinsfile 中使用。
我想在 Jenkinsfile 中添加 gerrit 触发事件,就像我们在 JobDSL 中所做的那样,
triggers {
upstream('pipeline_properties', 'UNSTABLE')
gerrit {
events {
refUpdated()
}
project('reg_exp:jenkins', ["plain:${jenkins_branch}"])
}
}
这在管道代码中是否可行,可以在触发器下找到诸如 cron 和东西之类的东西,但无法获得如何在其中添加 gerrit-trigger 事件的参考。
这是一个有效的 Jenkinsfile
涵盖了 gerrit 触发事件部分,请参阅代码段下方的参考资料
BuildDiscarderProperty
& SCMTrigger
也用于示例。
#!/usr/bin/env groovy properties( [ [ $class: 'BuildDiscarderProperty', strategy: [$class: 'LogRotator', numToKeepStr: '10'] ], pipelineTriggers([ [ $class: 'SCMTrigger', scmpoll_spec: "H H 1,15 1-11 *" ], [ $class: 'GerritTrigger', gerritProjects: [ [ $class: "GerritProject", compareType: "REG_EXP", pattern: "jenkins", branches: [ [ $class: "Branch", pattern: "${jenkins_branch}" ] ] ] ], triggerOnEvents: [ [$class: "PluginRefUpdatedEvent"] ] ] ]) ] ) node { echo 'Hello World' }
有用的参考
config.xml
在JENKINS_HOME
作业目录下用于调试
如果您使用的是声明式管道(与脚本管道相反,其他答案中使用的属性方法应该适用),您想要使用'triggers' 指令。令人困惑的是,使用 properties
似乎有效,但最终(无声地)与其他声明性事物发生冲突,例如 options
和 triggers
.
轻松生成 Gerrit 触发器声明性指令的最佳方法是使用 Jenkins 生成器,可用于 https://$your-jenkins-host/directive-generator
.
例子
- 导航到
https://$your-jenkins-host/directive-generator
- Select“触发器:触发器”作为示例指令字段。
- 添加触发器,例如在创建补丁集或发布“!build”评论时触发。
- 添加一个模式与其名称匹配的项目和另一个与一个或多个分支匹配的项目。
- 单击“生成声明性指令”按钮。
你应该得到类似的东西:
triggers {
gerrit customUrl: '', gerritProjects: [[branches: [[compareType: 'PLAIN', pattern: 'master']], compareType: 'PLAIN', disableStrictForbiddenFileVerification: false, pattern: 'ring-project']], triggerOnEvents: [commentAddedContains('!build'), patchsetCreated(excludeDrafts: true, excludeNoCodeChange: true, excludeTrivialRebase: true)]
}
准备好在您的声明性管道 Jenkinsfile 中使用。