如何在API调用中使用GitLab CI生成的Newman报告构件
方案说明
完全可以通过GitLab官方提供的制品API拉取生成的Newman报告,具体操作如下:
前置准备
你需要提前获取以下信息:
- 你的GitLab实例访问地址(公有云GitLab就是
https://gitlab.com) - 对应项目的ID(可以在项目主页的名称下方查看)
- 生成Newman报告的CI任务的JOB ID(可以在CI流水线的任务详情页查看)
- 拥有该项目
read_api权限的个人访问令牌(PAT),如果你的Go服务是在同个GitLab CI流水线内运行,可直接用系统预置的CI_JOB_TOKEN无需额外生成令牌。
1. CURL拉取报告示例
直接调用GitLab Jobs制品API即可拉取指定报告文件,命令如下:
curl --header "PRIVATE-TOKEN: 你的个人访问令牌" "https://<你的GitLab地址>/api/v4/projects/<项目ID>/jobs/<JOB_ID>/artifacts/outputfile.json"
如果要拉取指定分支下最新成功运行的对应任务的报告,可使用如下请求:
curl --header "PRIVATE-TOKEN: 你的个人访问令牌" "https://<你的GitLab地址>/api/v4/projects/<项目ID>/jobs/artifacts/<分支名>/raw/outputfile.json?job=<你的CI任务名称>"
2. Go代码适配修改
你可以将原本读取本地文件的逻辑替换为发送HTTP请求拉取报告内容,示例代码如下:
package main import ( "io" "fmt" "net/http" ) func main() { // 配置请求参数 gitlabURL := "https://<你的GitLab地址>/api/v4/projects/<项目ID>/jobs/<JOB_ID>/artifacts/outputfile.json" token := "你的个人访问令牌" // 构建请求 req, err := http.NewRequest("GET", gitlabURL, nil) if err != nil { fmt.Println("构建请求失败:", err) return } req.Header.Add("PRIVATE-TOKEN", token) // 发送请求 client := &http.Client{} resp, err := client.Do(req) if err != nil { fmt.Println("请求报告失败:", err) return } defer resp.Body.Close() // 读取响应内容(后续可直接解析,无需写入本地文件) reportContent, err := io.ReadAll(resp.Body) if err != nil { fmt.Println("读取报告内容失败:", err) return } // 后续你的Newman报告解析逻辑直接使用reportContent即可 fmt.Println("成功拉取报告,长度:", len(reportContent)) }
注意事项
- 如果你的Go服务在同个GitLab CI流水线内运行,可直接将
PRIVATE-TOKEN替换为JOB-TOKEN,值填系统环境变量CI_JOB_TOKEN即可,无需手动生成和维护个人访问令牌。 - 你需要确保生成Newman报告的CI任务的制品保留时间未过期,否则会拉取失败。
内容的提问来源于stack exchange,提问作者ord_bear
相关产品推荐
相关产品推荐

