问题描述
正在为几个项目在Jenkins上设置CI方案,使用多分支插件进行构建。目前的情况是,它能够很好地工作:可以检测并构建新的分支和Pull请求(PR)。但用户希望在Github的Webhook推送事件中构建新的推送,避免使用轮询。在不使用多分支时,只需勾选“GitHub hook trigger for GITScm polling”选项。在这种情况下,用户认为需要在Jenkinsfile中添加一个新的触发器,类似于下面这样的形式:
triggers {
githubWebhook()
}
用户目前的Jenkinsfile如下:
pipeline {
agent {
docker {
image '${REDACTED}/builder:sbt-0.13-jdk-oracle-8'
args '-v sbt-cache:/root/.sbt/ -v ivy-cache:/root/.ivy2/'
customWorkspace '/src/'
}
}
options {
buildDiscarder(logRotator(numToKeepStr: '10'))
timestamps()
timeout(time: 1, unit: 'HOURS')
}
stages {
stage('Testing') {
steps {
sh "sbt clean coverage test coverageReport coverageAggregate sonar"
}
}
stage('Push snapshot') {
when {
not {
branch 'master'
}
}
steps {
echo "[DRYRUN] sbt publishSnapshot"
}
}
stage('Push release') {
when {
branch 'master'
}
steps {
echo "[DRYRUN] sbt publish"
}
}
}
post {
changed {
echo "[DRYRUN] changed build"
}
}
}
有没有人处理过类似的问题?还有其他的解决方法吗?
解决方案
请注意以下操作可能存在版本差异,且在开始前请做好备份。
方案
根据官方的GitHub Branch Source Plugin文档,插件可以自动为你配置Webhook,前提是你已在Jenkins全局设置中配置了GitHub API令牌。
下面是操作步骤:
1. 进入主配置设置页面,点击“Manage Jenkins” > “Configure System”。
2. 在“GitHub Plugin Configuration”部分,添加一个带有你的凭据的服务器配置。
3. 如果需要一个令牌,可以通过“Additional Actions” > “Convert login to password and token”来生成一个。
你也可以通过GitHub自行手动配置,注册在服务器配置的帮助部分中提供的URL。
这样,你就可以通过配置Jenkins全局设置来自动触发Webhook,从而实现在Github Webhook推送事件中构建新的推送,避免使用轮询。
其他方法
还有一种方法是创建一个新的Jenkins作业(GitHub组织)并配置它扫描所有仓库和所有分支,你可以按照这个URL的指示进行操作。然后从Jenkins中按下”Scan organization”,现在你将看到所有包含Jenkinsfile的仓库和分支,其中包含所有阶段和流水线阶段,你还可以查看这个URL以获取更多信息。