本文通过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自动运行流水线.