映射扩展
简介
将数据映射到 Port 的默认方式是使用JQ JSON processor 将数据映射和转换为 Port 实体。
不过,在某些情况下,您可能希望将数据映射到 Port,而默认的 JQ 映射是不够的。
可能的被用于案例:
- 将版本库 README.md 文件内容映射到 Port;
- 检查版本库中是否存在特定文件;
- 检查版本库中是否存在特定字符串;
- 检查版本库中是否被用于了特定版本的 packages;
- 检查版本库中是否配置了 CI/CD Pipelines;
将文件内容映射到Port中
在下面的示例中,您将定义 GitLab 项目并将其 README.md 文件内容导出到 Port:
Repository blueprint
{
"identifier": "gitlabRepository",
"title": "Repository",
"icon": "Microservice",
"schema": {
"properties": {
"url": {
"title": "URL",
"type": "string",
"format": "url"
},
"readme": {
"title": "README",
"type": "string",
"format": "markdown"
},
"description": {
"title": "Description",
"type": "string"
},
"language": {
"title": "Language",
"type": "string"
},
"namespace": {
"title": "Namespace",
"type": "string"
},
"fullPath": {
"title": "Full Path",
"type": "string"
},
"defaultBranch": {
"title": "Default Branch",
"type": "string"
}
},
"required": []
},
"mirrorProperties": {},
"calculationProperties": {},
"relations": {}
}
我们可以看到,其中一个属性的类型是 markdown,这意味着我们需要将 README.md 文件的内容映射到 Port 中。
为此,我们将使用带有文件路径的 file://
前缀来告诉 GitLab 输出程序,我们要将文件内容映射到 Port 中。
- kind: project
selector:
query: "true"
port:
entity:
mappings:
identifier: .path_with_namespace | gsub(" "; "")
title: .name
blueprint: '"gitlabRepository"'
properties:
url: .web_url
readme: file://README.md
description: .description
namespace: .namespace.name
fullPath: .namespace.full_path
defaultBranch: .default_branch
搜索检查
我们可以被用于 GitLab 输出程序对我们的资源库进行搜索检查,以确保它们符合我们组织的政策和标准。
利用 Port 记分卡和搜索检查功能,组织可以定义对每个存储库执行的一系列检查,检查结果将反映在 Port 中存储库的记分卡中,这将有助于组织识别不符合组织政策和标准的存储库。
工作原理
搜索检查使用GitLab Advanced Search API 。
这意味着 GitLab Search API 支持的任何搜索查询都可以被 GitLab 输出程序引用。
语法
search://scope=<scope>&&query=<query>
search://
- 这是表示映射是搜索检查的前缀;scope
- 搜索范围,目前只支持blobs
(在资源库文件中搜索) (更多详情请参见GitLab Search API ) ;query
- 要搜索的查询,应是有效的 GitLab 高级搜索查询(详情请参见GitLab Advanced Search syntax ) 。
搜索检查示例
search://scope=blobs&&query=filename:README.md
- 检查项目是否包含README.md
文件;search://scope=blobs&&query=filename:test_* extension:py
- 检查项目是否包含测试;search://scope=blobs&&query=filename:".gitlab-ci.yml
- 检查项目是否配置了 gitlab CI;search://scope=blobs&&query=fastapi filename:requirements.txt
- 检查项目是否在requirements.txt
文件中引用了 fastapi; 在下面的截图中,我们可以看到我们使用了与 gitlab 高级搜索完全相同的查询语句
集成配置示例
- kind: project
selector:
query: 'true'
port:
entity:
mappings:
identifier: .path_with_namespace | gsub(" "; "")
title: .name
blueprint: '"gitlabRepository"'
properties:
url: .web_link
description: .description
namespace: .namespace.name
fullPath: .namespace.full_path
defaultBranch: .default_branch
readme: file://README.md
hasLicense: search://scope=blobs&&query=filename:"LICENSE"
usingFastapiPackage: search://scope=blobs&&query=fastapi filename:requirements.txt
hasCI: search://scope=blobs&&query=filename:.gitlab-ci.yml
usingOldLoggingPackage: search://scope=blobs&&query=logging extension:py
hasTests: search://scope=blobs&&query=filename:test_* extension:py
反映搜索检查结果的记分卡示例: