本文通过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容器.

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

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

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

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

配置Github webhook
webhook可以在Github仓库有新的提交时,自动发送消息到Jenkins,触发Jenkins流水线自动运行.
生成github token
进入github –> setting –> Developer settings –> Personal Access Token –> Generate new token


Github webhooks设置
由于是在本地使用docker启动的Jenkins容器,因此需要使用ngrok将Jenkins地址暴露给外网.
下载完ngrok后, 在ngrok的目录下执行ngrok http 8081, 其中8081指本地Jenkins服务端口. 然后可以看到以下界面

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

填写Payload URL为ngrok生成的域名加上/github-webhook/, 并将上一步生成的github token填写到secret中. 点击保存.
配置Jenkins Github Plugin
系统管理 –> 系统设置 –> GitHub –> Add GitHub Sever

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

设置完成后, 点击TestConnection, 提示Credentials verified for user UUserName, rate limit: xxx, 则表明有效
创建流水线
在Jenkins管理主页面点击新建任务选项, 选择新建pipeline

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

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

最后点击保存.
添加Jenkinsfile
最后需要在本地代码库添加Jenkinsfile指定流水线的运行步骤. 默认需要将Jenkinsfile放置在代码根目录下. 文件内容如下
pipeline {
agent any
stages {
stage('Test') {
steps {
sh './gradlew test'
}
}
stage('Build') {
steps {
sh './gradlew clean build'
}
}
}
}
然后将代码push到github, 便能够看到Jenkins自动运行流水线.