搭建Github webhook触发的Jenkins Pipeline

本文通过docker启动Jenkins流水线, 使用ngrok将Jenkins接口暴露给github, 然后配置项目的github webhook关联Jenkins流水线项目, 实现代码变更触发流水线运行.

创建Jenkins容器


首先下载jenkins的docker镜像: docker pull jenkins/jenkins

注意不要使用docker pull jenkins下载官方镜像, 因为官方镜像版本没有更新, 无法使用pipeline等主要Jenkins插件.

镜像下载完成后, 使用命令创建Jenkins容器:

docker run -d --name myjenkins -p 9999:8080 -p 50000:50000 -v /var/jenkins_home jenkins

-d参数表示容器可在后台运行
--name指定容器名称
-p [port]:[containerPort]表示将容器内部的端口(containerPort)映射到外部端口(port)
jenkins/jenkins表示docker image的名称

完成之后便可以通过docker ps命令查看到创建的好的Jenkins容器.

image

初始化Jenkins客户端


根据docker创建的Jenkins容器暴露出的端口8081,可以通过http://localhost:8081访问到Jenkins客户端, 客户端首次登陆需要解锁Jenkins.

Jenkins_unlock

解锁步骤如下:

  1. 执行docker exec -it {jenkins_container_name} bash进入容器
  2. 然后执行cat /var/jenkins_home/secrets/initialAdminPassword
  3. 复制终端打印出的秘钥, 并粘贴到Jenkins客户端初始页面,点击继续

然后进入下一页面:

jenkins_plugins

点击Install suggested plugins, 然后等待所有插件安装完成.插件完成后, 将转到创建管理员的页面:

create_admin

填写完相应信息之后, 点击继续, 然后进入配置示例页面,直接点击继续, 完成Jenkins初始化配置工作.

jenkins_ready

配置Github webhook


webhook可以在Github仓库有新的提交时,自动发送消息到Jenkins,触发Jenkins流水线自动运行.

生成github token

进入github –> setting –> Developer settings –> Personal Access Token –> Generate new token

github token

token generate success

Github webhooks设置

由于是在本地使用docker启动的Jenkins容器,因此需要使用ngrok将Jenkins地址暴露给外网.

下载完ngrok后, 在ngrok的目录下执行ngrok http 8081, 其中8081指本地Jenkins服务端口. 然后可以看到以下界面

ngrok

将ngrok暴露出的域名复制下来, 然后进入GitHub上指定的项目 –> setting –> WebHooks –> add webhook

webhook config

填写Payload URL为ngrok生成的域名加上/github-webhook/, 并将上一步生成的github token填写到secret中. 点击保存.

配置Jenkins Github Plugin


系统管理 –> 系统设置 –> GitHub –> Add GitHub Sever

jenkins github config

API URL 输入 https://api.github.com,Credentials点击Add添加,选择Secret Text,如下图

add secret

设置完成后, 点击TestConnection, 提示Credentials verified for user UUserName, rate limit: xxx, 则表明有效

创建流水线


在Jenkins管理主页面点击新建任务选项, 选择新建pipeline

create pipeline

选择触发器GitHub hook trigger for GITScm polling,这样每次push代码都会触发Jenkins自动构建.

github repo config

选择pipeline script from scm, scm选择git然后在Repository URL中填入项目地址.

repo address

最后点击保存.

添加Jenkinsfile


最后需要在本地代码库添加Jenkinsfile指定流水线的运行步骤. 默认需要将Jenkinsfile放置在代码根目录下. 文件内容如下

pipeline {
    agent any
    stages {
        stage('Test') {
            steps {
                sh './gradlew test'
            }
        }
        stage('Build') {
            steps {
                sh './gradlew clean build'
            }
        }
    }
}

然后将代码push到github, 便能够看到Jenkins自动运行流水线.