![image-20220513202145810](https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20220513202145810.png)
目录
文章目录
本节实践
- 实践:安装postman(测试成功)-2022.5.10
- 实践:用Postman调用一个接口,并结合使用Curl操作(测试成功)-2022.5.10
- 实践:通过API触发流水线-Jenkins(测试成功)-2022.5.11
- 实践:通过API触发流水线-GitLabCI(测试成功)-2022.5.13
实验环境
gitlab-ce:14.9.3-ce.0
实验代码
链接:https://pan.baidu.com/s/11h1TATVhq1JW7qZrFDdcPA?pwd=04rd
提取码:04rd
2020.5.14-通过API触发流水线-code
1、预备知识
目标:学习HTTP基础知识,掌握如何使用Postman和Curl调用接口的方法。
1.Web HTTP基础知识
1、HTTP请求是什么
HTTP超文本传输协议,是确保服务器(Server)和客户端(Client)之间的正确通信。
一个请求和响应的过程:
- Request 用户通过浏览器向我们的服务端发起请求。
- Response 服务端将客户端请求的资源数据进行响应。
2、调用接口的方法
请求类型:
- GET 向指定的URL请求资源,可携带参数(明文)。
- POST 向指定的URL提交资源,表单数据提交,数据进行封装(比Get方法安全)。
- PUT 与POST类似,通常用于对资源数据的更新修改。
- DELETE 删除指定的资源。
💘 演示:安装postman(测试成功)-2022.5.10 |
postman专门就是调试接口的;
1️⃣ 下载软件包
可以提前装好postman https://www.postman.com/downloads/
2️⃣ 注意,这个创建好,双击安装包,好像没有安装过程,就直接能使用了:……
安装结束。😘
💘 演示:用Postman调用一个接口,并结合使用Curl操作(测试成功)-2022.5.10 |
1️⃣ 新建一个Http Request
可以看到常见的http请求如下:
2️⃣ 打开jenkins,来到一个项目,在浏览器按f12打开检查选项,在Network位置找一个url并将其放在postman里进行测试
注意:?fullStages=true&_=1652143738538
?号后面的都是参数,以&分割,可以看到这里自动识别了其参数。
但是发现我们收到的response是有问题的,因为jenkins访问是需要认证的。
3️⃣ 因此,这里需要添加一个认证“
来到Authorization
,选择Basic Auth
,填写jenkins的用户名和密码,点击Send
:
会发现本次就调用接口成功了,我么拿到了接口返回来的json格式的数据:
之后,就需要我们做数据的过滤了!
👉🏼 使用postman
的好处,可以为我们做一些转化,例如:
测试结束。😘
3、HTTP常见的错误码
-
1xx : 服务已收到请求,请求者继续执行操作。
-
2xx:请求成功,常见(201)
-
3xx:请求成功,页面发生重定向(301)
-
4xx:客户端发生了错误
- 常见的是资源找不到了(404)
- 资源请求需要认证认证失败(401)
- 认证成功但是权限不够(403)
-
5xx: 服务端发生了错误
- 网关超时(504)
- 内部错误(500)
- 网关错误(502)
- 服务不可用(503)
2、Jenkins Generic Webhook实践
💘 实践: 通过API触发流水线-Jenkins (测试成功)-2022.5.11 |
1. 安装Generic webhook 插件
2. 配置POSTMAN请求
http://JENKINS_URL/generic-webhook-trigger/invoke
3. 配置Jenkins job中的webhook
4. 编写Pipeline 读取请求参数
5. POSTMAN发起请求
目的: 为Jenkins作业添加触发器,便于其他系统调用。
1.安装配置Generic WebHook
👉🏼 来到系统管理->创建管理->可选插件
:搜索Generic Webhook Trigger
重启后,进入一个Pipeline项目设置,已经可以选择这个触发器了…
👉🏼 本次新创建一个day4
视图:
这里使用正则表达式配置:day4-.*?
,点击保存:
👉🏼 在新创建的视图里创建一个项目day4-jenkins-trigger
:
在构建触发器这里,我们就能看到Generic Webhook Trigger
选项了:
2.Jenkins作业配置触发器
🍀 配置POSTMAN请求
1️⃣ 获取jenkins的接口地址:Jenkins Trigger URL
启动Generic Webhook触发器后, 相当于给Jenkins加了一个新的接口(http://JENKINS_URL/generic-webhook-trigger/invoke)。
调用的时候:这里要把 JENKINS_URL
换成自己真实的Jenkins 服务器地址,有端口就加上端口,是域名就写域名。下面是一个参考的URL:
http://172.29.9.101:8080/generic-webhook-trigger/invoke
2️⃣ 这里先在postman里创建一个post请求:
在Collections里新建一个post请求,配置一端json内容:
{
"name": "jenkins",
"version": "1.1.1",
"envName": "dev",
"users": [ //注意:json数据这里也是可以写列表的!
"aa",
"bb"
]
}
🍀 配置Jenkins job中的webhook
1️⃣ 在jenins刚创建的项目里配置一下Post content parameters
内容:
Post content parameters: 获取调用接口传进来的数据
$代表从postman发过来的request请求的数据。
👉🏼 本次实际配置内容如下:
2️⃣ Token: 给URL添加一个触发的认证
curl http://192.168.1.200:8080/generic-webhook-trigger/invoke?token=devops-service
这里也配置一下token吧,一般习惯使用项目名作为token:
增加了token之后,记得在postman那里的请求参数后面也要加上token参数:
http://172.29.9.101:8080/generic-webhook-trigger/invoke?token=day4-jenkins-trigger
⚠️ 流水线会触发相同token的作业, 建议触发token 唯一性;
🍀 编写Pipeline 读取请求参数
1️⃣ 配置一下流水线
pipeline {
agent any
stages {
stage('Hello') {
steps {
echo "${VERSION}"
echo "${USERS}"
}
}
}
}
保存。
🍀 POSTMAN发起请求
👉🏼 配置完pipeline后,直接在postman里发起请求,观察效果
可以看到这个流水线项目被成功触发了:
👉🏼 注意:关于配置Jenkins job中的webhook
里$
的解释
Post content parameters: 获取调用接口传进来的数据
$代表从postman发过来的request请求的整体数据,可以理解为post请求的根路径!
https://github.com/json-path/JsonPath
🍀 我们可以来增加一个webhookData
的变量,然后在Pipeline里调用这个变量,最后在postman里发起post请求,并观察效果:
3.解析GET/POST请求数据
1.解析POST数据
以上过程就是post请求过程。
2.解析GET数据
Request parameters: 获取URL中的请求参数
curl http://192.168.1.200:8080/generic-webhook-trigger/invoke?runopts=gitlab
🍀 本次测试过程:(测试成功)
1️⃣ 编写postman get请求
将原来的post请求拷贝下,然后修改删除body里的内容,修改请求类型为get
,添加一个变量为versions:2.2.2
:
2️⃣ 配置jenkins中的webhook及编写pipeline流水线
这里要下删除一下前面的webhook及pipeline里post相关数据:
pipeline {
agent any
stages {
stage('Hello') {
steps {
echo "${versions}"
}
}
}
}
3️⃣在postman里进行触发验证
符合预期,测试结束。😘
3.解析HEADER参数数据
Header parameters: 获取Header中的参数
🍀 本次测试过程:(测试成功)
1️⃣ postman里编写head请求
2️⃣ 在jenkins的job的webhook里配置Header parameters
及编写pipeline流水线脚本
pipeline {
agent any
stages {
stage('Hello') {
steps {
echo "demo header:${header_version}"
}
}
}
}
⚠️ 注意:Header parameters
这里只能使用_
,而不能使用-
!
3️⃣ postman里发起HEAD请求并验证
符合预期,测试结束。😘
4.扩展流水线解析JSON数据
安装插件: Pipeline Utility Steps
readJSON: 处理json数据
println("所有body数据 --> ${allData}")
def webHookData = readJSON text: "${allData}"
String userName = webHookData["name"]
String userName2 = webHookData.name
String group1Name = webHookData["group1"]["name"]
String group1Name2 = webHookData.group1.name
println('最外层name ---> $.name' + "${userName}")
println('最外层name ---> $.name' + "${userName2}")
println('第二层name ---> $.group1.name' + "${group1Name}")
println('第二层name ---> $.group1.name' + "${group1Name2}")
🍀 本次测试过程:
1️⃣ 来到刚才那个pipeline流水线项目里,删除之前的配置,只配置成如下的Post content parameters
内容,然后编写pieline脚本:
pipeline {
agent any
stages {
stage('Hello') {
steps {
echo "${webhookData}"
}
}
}
}
在postman里触发一下,观察效果:
可以看到,能正常触发成功。
2️⃣ 但是,在流水线里怎么去处理这个数据?
pipeline {
agent any
stages {
stage('Hello') {
steps {
script {
echo "${webhookData}"
data = readJSON text: "${webhookData}"
println(data.version)
}
}
}
}
}
编写好后我们rebuild一下,看下效果:
我们会看到一个常见的报错,提示: No such DSL method 'readJSON' found among steps [archive, ba
,这是因为换需要安装下Pipeline Utility Steps插件
才行。
3️⃣ 安装Pipeline Utility Steps插件
并再次构建测试效果
对Jenkins Pipeline中的数据处理(readJSON),使用
Pipeline utils step插件
!
5.自定义构建描述信息
1️⃣ 是否可以在构建后的状态这里显示更多的信息呢?
可以在项目的流水线语法
哪里查找下全局变量:
编写下pipeline代码:
pipeline {
agent any
stages {
stage('Hello') {
steps {
script {
echo "${webhookData}"
data = readJSON text: "${webhookData}"
println(data.version)
currentBuild.description = "version: ${data.version}\n env: ${data.envName}"
}
}
}
}
}
重新构建下,这里就可以看到构建后状态上有显示其他一些信息了:
2️⃣ 是否可以把这里的数字改成例如构建版本呢?
我们来编辑下pipeline代码:
pipeline {
agent any
stages {
stage('Hello') {
steps {
script {
echo "${webhookData}"
data = readJSON text: "${webhookData}"
println(data.version)
currentBuild.description = "version: ${data.version}\n env: ${data.envName}"
currentBuild.displayName = "version: ${data.version}"
}
}
}
}
}
rebuild后,就可以看到效果了:
测试成功,符合预期。😘
6.Rebuilder 插件使用
可以直接携带原触发参数进行触发,不用重复触发(不用在重复的提交代码了)。
👉🏼 现在有个需求,我们想重新再触发一次,难道每次都要去postman再发起一个请求吗?其实,可以使用jenkins的Rebuild
插件即可
此时,我们安装一下这个插件。(注意:回放,这个远程构建的参数是拿不到的,但rebuilder是可以拿到之前的那些构建参数的!)
此时,我们再重新构建一次看下效果:
进入某一次构建后,可以点击rebuild:
Rebuild成功。
3、GitLabCI 流水线触发实践
💘 实践:通过API触发流水线-GitLabCI(测试成功)-2022.5.13 |
1. B项目中开启Pipeline Trigger
2. 先通过postman进行触发测试
3. A项目中创建token变量, 然后集成到pipeline触发。
1.准备工作
- 本次在gitlab的
devops4-app-serice
项目里开启trigger:
- 创建一个认证token并赋值token:
2.使用API触发
- 使用curl命令进行测试
curl -X POST \
--fail \
-F token=7bddfd450d0de1aa1bad602ad9b44b \
-F ref=main \
http://172.29.9.101/api/v4/projects/2/trigger/pipeline
可以看到pipeline流水线项目被触发了:
- 使用postman测试
在postman里创建一个post请求,填写Body里的数据,然后点击Send:
验证:可以看到触发项目构建了。
- gitlabci作业中触发
本次在devops4-commit-service
项目新建一个.gitlab-ci.yml文件
,进行提交触发测试:
script:
- "curl -X POST -F token=TOKEN -F ref=REF_NAME http://192.168.1.200/api/v4/projects/31/trigger/pipeline"
本次完整代码:
stages:
- build
- test
- deploy
before_script:
- echo "Before script section"
- echo "For example you might run an update here or install a build dependency"
- echo "Or perhaps you might print out some debugging details"
after_script:
- echo "After script section"
- echo "For example you might do some cleanup here"
build:
stage: build
script:
- echo "Do your build here"
test:
stage: test
script:
- echo "Do another parallel test here"
- echo "For example run a lint test"
build-job:
stage: build
script:
- "curl -X POST -F token=7bddfd450d0de1aa1bad602ad9b44b -F ref=main http://172.29.9.101/api/v4/projects/2/trigger/pipeline"
- echo "Compile complete."
- sleep 1
deploy:
stage: deploy
script:
- echo "Do your deploy here"
可以看到devops4-app-serice
流水线被触发了:
- 优化: 将token以变量的方式存储到项目中。
stages:
- build
- test
- deploy
before_script:
- echo "Before script section"
- echo "For example you might run an update here or install a build dependency"
- echo "Or perhaps you might print out some debugging details"
after_script:
- echo "After script section"
- echo "For example you might do some cleanup here"
build:
stage: build
script:
- echo "Do your build here"
test:
stage: test
script:
- echo "Do another parallel test here"
- echo "For example run a lint test"
build-job:
stage: build
script:
- "curl -X POST -F token=${CITOKEN} -F ref=main http://172.29.9.101/api/v4/projects/2/trigger/pipeline"
- echo "Compile complete."
- sleep 1
deploy:
stage: deploy
script:
- echo "Do your deploy here"
验证:
3.触发并传递参数
curl -X POST \
--fail \
-F token=7bddfd450d0de1aa1bad602ad9b44b \
-F ref=main \
-F "variables[BUILD_TOOL]=mavenandmaven" \
http://172.29.9.101/api/v4/projects/2/trigger/pipeline
在devops4/devops4-app-serice
项目里编辑.gitlab-ci.yml文件:
stages: #对stages的编排
- build
- test
- deploy
# workflow:
# rules:
# - if: $CI_PIPELINE_SOURCE == "push"
# when: never
# - when: always
variables:
DEPLOY_ENV: "dev"
RUNNER_TAG: "maven"
deploy_job:
# rules:
# - if: '$DEPLOY_ENV == "dev"'
# when: manual
# - when: on_success
stage: deploy
tags:
- ${RUNNER_TAG}
variables:
DEPLOY_ENV2: "test"
script:
- echo ${DEPLOY_ENV}
deploy:
tags:
- ${RUNNER_TAG}
stage: deploy
script:
- echo "Do your deploy here"
- echo ${BUILD_TOOL}
# when: manual
然后触发测试:
关于我
我的博客主旨:
- 排版美观,语言精炼;
- 文档即手册,步骤明细,拒绝埋坑,提供源码;
- 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!
-
个人微信二维码:x2675263825 (舍得), qq:2675263825。
-
个人微信公众号:《云原生架构师实战》
-
个人csdn
https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421
-
个人博客:(www.onlyyou520.com)
-
开源干货😘
语雀:https://www.yuque.com/go/doc/73723298?#
最后
好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!