Jenkins 部署
可用的 Ocean 集成 Port 为 Jenkins 提供了一个Ocean integration ,可让您自动将 Jenkins 资源与 Port 同步, 并提供更多配置选项。 这是推荐的将 Port 与 Jenkins 集成的方式。如果您仍希望使用 Port 的 API,请关注此页面。
被用于 Jenkins 构建后,您可以在 Port 中轻松创建/更新和查询实体。
💡 Jenkins 的常见构建 Usage
例如,Port 的应用程序接口(API)可轻松实现 Port 与 Jenkins 构建的集成:
- 报告正在运行的CI任务的状态;
- 更新软件目录中有关微服务新**构建版本的信息;
- 获取现有实体。
先决条件
- 本例被用于了以下 Jenkins 插件:
- Plain Credentials (>=143.v1b_df8b_d3b_e48)
- HTTP Request (>=1.16)
2.示例中被用于的方法如下,这些签名需要经过批准:
new groovy.json.JsonSlurperClassic
method groovy.json.JsonSlurperClassic parseText java.lang.String
3.将您的 PORT_CLIENT_ID
和 PORT_CLIENT_SECRET
添加为Jenkins Credentials ,以便在您的 Pipelines 中被用于。
4.确保您的 Port 安装中已有Blueprint ,以便创建/更新实体。
设置
本指南中被用于的所有 Port API 路由都可以在 Port 的API documentation 中找到。
要在 Jenkins 构建中与 Port 交互,请按照以下步骤操作:
获取您的应用程序接口令牌
下面的代码段向您展示了如何使用 withCredentials
将 PORT_CLIENT_ID
和 PORT_CLIENT_SECRET
凭据传递给联编,它利用 Plain Credentials 插件将凭据绑定到变量。
Provider 提供的代码段还包括将 Port 的 API URL 保存为环境变量,以便在未来阶段使用,并使用凭据向 Port 的 API 发出请求,以获取访问令牌:
Get API token
pipeline {
agent any
environment {
API_URL = "https://api.getport.io"
}
...
withCredentials([
string(credentialsId: 'port-client-id', variable: 'PORT_CLIENT_ID'),
string(credentialsId: 'port-client-secret', variable: 'PORT_CLIENT_SECRET')
]){
// Token request body
auth_body = """
{
"clientId": "${PORT_CLIENT_ID}",
"clientSecret": "${PORT_CLIENT_SECRET}"
}
"""
// Make a request to fetch Port API's token
token_response = httpRequest contentType: 'APPLICATION_JSON',
httpMode: "POST",
requestBody: auth_body,
url: "${API_URL}/v1/auth/access_token"
// Parse the response to get the accessToken
def slurped_response = new JsonSlurperClassic().parseText(token_response.content)
def token = slurped_response.accessToken // Use this token for authentication with Port
...
}
使用 Port 的 API
在 Jenkins 构建中添加以下代码,以创建/更新实体或获取现有实体:
- Create/Update
- Get
import groovy.json.JsonSlurperClassic
...
auth_body = """
{
"clientId": "${PORT_CLIENT_ID}",
"clientSecret": "${PORT_CLIENT_SECRET}"
}
"""
token_response = httpRequest contentType: 'APPLICATION_JSON',
httpMode: "POST",
requestBody: auth_body,
url: "${API_URL}/v1/auth/access_token"
def slurped_response = new JsonSlurperClassic().parseText(token_response.content)
def token = slurped_response.accessToken // Port's access token
entity_body = """
{
"identifier": "example-entity",
"properties": {
"myStringProp": "My value",
"myNumberProp": 1,
"myBooleanProp": true,
"myArrayProp": ["myVal1", "myVal2"],
"myObjectProp": {"myKey": "myVal", "myExtraKey": "myExtraVal"}
}
}
"""
// request url : {API_URL}/blueprints/<blueprint_name>/entities/<entity_name>
response = httpRequest contentType: "APPLICATION_JSON", httpMode: "POST",
url: "${API_URL}/v1/blueprints/blueprint/entities?upsert=true&merge=true",
requestBody: entity_body,
customHeaders: [
[name: "Authorization", value: "Bearer ${token}"],
]
println(response.content)
import groovy.json.JsonSlurperClassic
...
auth_body = """
{
"clientId": "${PORT_CLIENT_ID}",
"clientSecret": "${PORT_CLIENT_SECRET}"
}
"""
token_response = httpRequest contentType: 'APPLICATION_JSON',
httpMode: "POST",
requestBody: auth_body,
url: "${API_URL}/v1/auth/access_token"
def slurped_response = new JsonSlurperClassic().parseText(token_response.content)
def token = slurped_response.accessToken // Port's access token
response = httpRequest contentType: 'APPLICATION_JSON', httpMode: "GET",
url: "${API_URL}/v1/blueprints/blueprint/entities/entity-example",
customHeaders: [
[name: "Authorization", value: "Bearer ${token}"],
]
println(response.content)
示例
有关与 Jenkins 一起使用 Port 的实用示例,请参阅examples 页面。