Jenkins+github配置构建触发器
安装Jenkins
参考地址: https://blog.csdn.net/qq_38661798/article/details/84375765
Jenkins
一般要有访问公网的权限,需要能通过url或者ip地址直接访问
,才能成功配置webhook
。
docker安装jenkins
参考: 官方文档安装Jenkins
# jenkinsci/blueocean 是LTS版本
docker run --name jenkins -u root -d -p 8080:8080 -p 50000:50000 -v jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock --restart=always jenkinsci/blueocean
打开http://ip:8080
即可访问Jenkins
安装Jenkins常用插件
https://blog.csdn.net/xiangxi1204/article/details/138826269
安装jenkins插件
前,先修改Jenkins的插件源
为国内源
.
- 安装
Deploy to container
插件; - 安装流水线插件
workflow-aggregator
; - 安装
Git Parameter
; Git
拉取代码Pipeline
流水线kubernetes
连接k8s动态创建Slave
代理Config File Provider
存储配置文件Extended Choice Parameter
扩展选择框参数,支持多选
在Jenkins上指定git绝对路径
在Jenkins的全局工具
配置中,指定git的绝对路径
使用Poll SCM定时检查代码库是否有更新-构建触发器
# 每分钟检查一次(5个星)
* * * * *
# 其他时间可以根据提示配置
配置构建指令
在构建
->Execute shell
–中添加构建指令
# 添加构建指令
echo "building ......"
配置完成后点击保存
.
使用webhook自动构建
必须Jenkins有公网ip地址且可被访问
参考: https://blog.csdn.net/qq_21768483/article/details/80177920
在Jenkins
的Github插件
的配置中,点击高级
按钮,启用Hook URL,并将Hook URL复制出来,并保存刚才的设置
在github
项目的Settings
中点击Webhooks
,然后点击Add webhook
,在Payload URL
中填写Jenkins复制出来的Hook URL
选择事件: 推送事件,只要有comity就会拉取代码
触发远程构建器
http://Jenkins的url地址
/job/项目名称
/build?token=自定义token
访问这个url地址即可远程触发构建。
将这个地址粘贴在github的webhook中,就可以自动触发远程构建
。
在Jenkins内关闭“防止跨站点请求伪造”
Github访问Jenkins的时候,没有携带请求头,不关闭防止跨站点请求伪造
将无法正常访问Jenkins。
在Jenkins的系统管理
-》全局安全配置
-》CSRF Protection
中,取消勾选防止跨站点请求伪造
,然后点击保存
不关闭“防止跨站点请求伪造”访问Jenkins,需要获取crumb值
这时候的webhook
需携带验证信息和请求头
# curl模拟访问
curl -X post -v -u admin:admin -H "Jenkins-Crumb:88a12946e078" http://192.168.70.131:8080/jenkins/job/ProOne/build?token=自定义token
# 携带token访问时的完整的url地址
http://用户名:密码@192.168.70.131:8080/jenkins/crumblssuer/api/xml
pipeline语法
参考 https://www.jenkins.io/zh/doc/book/pipeline/syntax/#declarative-sections
pipeline基本语法示例
// def 定义变量
def registry = "192.168.0.100"
pipeline{
// 节点选择
agent any
// stages-阶段集--分为下面3个步骤
stages {
// Build阶段
stage(Build){
// Build的具体步骤
steps{
// 调用的命令都是shell命令
echo 'build......'
}
}
// Test阶段
stage("Test"){
// Test的具体步骤
steps{
echo 'test......'
}
}
// Deploy阶段
stage(Deploy){
// Deploy的实际步骤
steps{
echo 'deploy......'
}
}
}
}
script示例
script{}
可以执行指定语言
的脚本(如 Python
、JavaScript
、Shell
脚本等)
// 导入 Groovy 的 JSON 包
import grovy.json.*
// 导入 Groovy 的 IO 包
import grovy.io.*
// 导入 Groovy 的文件包
// import com.cwcttravel.hudson.Plugins.extended_choice.ExtendedChoiceParameterDefinition
// 定义一个名为 BRANCH 的变量,并将其值设置为 Jenkins 参数中的 BRANCH 参数的值。如果 BRANCH 参数不存在,则将 BRANCH 变量的值设置为默认值 master。
BRANCH = params.getOrDefault('BRANCH', 'master')
// def 定义变量
// def registry = "192.168.0.100"
// 定义一个流水线
pipeline{
// 挑选节点运行---any表示在任意节点运行
agent any
// 阶段集
stages{
// 阶段1:拉取代码
stage('拉取代码') {
steps {
// script 可以执行指定语言的脚本(如 Python、JavaScript、Shell 脚本等)
script {
// 输出日志,表示开始更新代码
echo '开始更新代码'
// 使用 Git SCM 插件检出代码
checkout([
$class: 'GitSCM', // 指定 Git SCM 插件
branches: [[name: "${BRANCH}"]], // 指定检出分支
// ... 其他 Git 配置 ...
])
}
}
}
// 构建Docker镜像阶段
stage('Build Docker Image') {
// 构建Docker镜像阶段的具体步骤
steps {
script {
// 进入指定目录
sh '/tmp/my-build'
// 执行Docker构建命令,根据Dockerfile构建镜像
sh 'docker build -f Dockerfile.x86 -t go-run-server-amd64:alpine3.20.3 .'
// 打印镜像构建完成
echo 'Docker镜像构建完成'
}
}
}
// 阶段3:推送到Docker仓库
stage('推送镜像到Docker仓库') {
steps {
script {
// 输出日志,表示开始推送镜像
echo '开始推送镜像'
// 使用 Docker Registry 插件推送镜像
docker.withRegistry('https://registry.cn-hangzhou.cr.volces.com', 'my-docker-credentials') {
}
}
}
}
}
}