如何在Github Webhook推送事件中启用多分支构建的Jenkins工作

84次阅读
没有评论

问题描述

正在为几个项目在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以获取更多信息。

正文完