Skip to main content

ArgoCD

通过 ArgoCD 集成,您可以根据映射和定义将 ArgoCD 实例中的 "集群"、"项目"、"应用程序 "和 "部署历史 "资源导入 Port。

常见被用于情况

  • 在 ArgoCD 中映射受监控的 Kubernetes 资源。
  • 实时关注对象变更(创建/更新),并自动将变更应用到 Port 中的实体。

安装

从以下安装方法中选择一种:

使用该安装选项意味着集成将能使用 webhook 实时更新 Port。

本表总结了安装时可用的参数,请在下面的脚本中按自己的需要进行设置,然后复制并在终端运行:

ParameterDescriptionRequired
port.clientIdYour port client id
port.clientSecretYour port client secret
port.baseUrlYour port base url, relevant only if not using the default port app
integration.identifierChange the identifier to describe your integration
integration.typeThe integration type
integration.eventListener.typeThe event listener type
integration.secrets.tokenThe ArgoCD API token token
integration.config.serverUrlThe ArgoCD server url
scheduledResyncIntervalThe number of minutes between each resync
initializePortResourcesDefault true, When set to true the integration will create default blueprints and the port App config Mapping

helm repo add --force-update port-labs https://port-labs.github.io/helm-charts
helm upgrade --install my-argocd-integration port-labs/port-ocean \
--set port.clientId="CLIENT_ID" \
--set port.clientSecret="CLIENT_SECRET" \
--set initializePortResources=true \
--set scheduledResyncInterval=60 \
--set integration.identifier="my-argocd-integration" \
--set integration.type="argocd" \
--set integration.eventListener.type="POLLING" \
--set integration.secrets.token="<your-token>" \
--set integration.config.serverUrl="<your-server-url>"

生成 ArgoCD 令牌

  1. 导航至 <serverURL>/settings/accounts/<user>。例如,如果您在 https://localhost:8080 访问 ArgoCD,则应导航到 https://localhost:8080/settings/accounts/<user>
  2. 在 "令牌 "下,单击 "生成新"创建新令牌。

接收 ArgoCD 对象

ArgoCD 集成使用 YAML 配置来描述将数据加载到开发者门户的过程。

下面是配置中的一个示例片段,演示了从 ArgoCD 获取 "应用程序 "数据的过程:

createMissingRelatedEntities: true
deleteDependentEntities: true
resources:
- kind: application
selector:
query: "true"
port:
entity:
mappings:
identifier: .metadata.uid
title: .metadata.name
blueprint: '"argocdApplication"'
properties:
gitRepo: .spec.source.repoURL
gitPath: .spec.source.path
destinationServer: .spec.destination.server
namespace: .metadata.namespace
syncStatus: .status.sync.status
healthStatus: .status.health.status
createdAt: .metadata.creationTimestamp
relations:
project: .spec.project

该集成利用JQ JSON processor 从 ArgoCD 的 API 事件中对现有字段和 Values 进行选择、修改、连接、转换和其他操作。

配置结构

集成配置决定了从 ArgoCD 中查询哪些资源,以及在 Port 中创建哪些实体和属性。

支持的资源 以下资源可被用于来映射 ArgoCD 中的数据,可以引用下面链接的 API 响应中出现的任何字段来进行映射配置。
  • 集成配置的根密钥是 "资源 "密钥:

    resources:
    - kind: application
    selector:
    ...
  • kind "键是 ArgoCD 对象的说明符:

      resources:
    - kind: application
    selector:
    ...
  • 通过 "选择器 "和 "查询 "键,您可以过滤哪些指定 "类型 "的对象将被录入软件目录:

    resources:
    - kind: application
    selector:
    query: "true" # JQ boolean expression. If evaluated to false - this object will be skipped.
    port:
  • Port"、"实体 "和 "映射 "键被用来将 ArgoCD 对象字段映射到Port实体。要创建多个同类映射,可在 resources 数组中添加另一项;

    resources:
    - kind: application
    selector:
    query: "true"
    port:
    entity:
    mappings: # Mappings between one ArgoCD object to a Port entity. Each value is a JQ query.
    identifier: .metadata.uid
    title: .metadata.name
    blueprint: '"argocdApplication"'
    properties:
    gitRepo: .spec.source.repoURL
    gitPath: .spec.source.path
    destinationServer: .spec.destination.server
    namespace: .metadata.namespace
    syncStatus: .status.sync.status
    healthStatus: .status.health.status
    createdAt: .metadata.creationTimestamp
    relations:
    project: .spec.project
    - kind: application # In this instance application is mapped again with a different filter
    selector:
    query: '.metadata.name == "MyApplicationName"'
    port:
    entity:
    mappings: ...
蓝图键 注意 blueprint 键的值 - 如果要使用硬编码字符串,需要用 2 组引号封装,例如使用一对单引号 ('),然后再用一对双引号 ("): :::

配置实时更新

目前,ArgoCD REST API 不支持以编程方式创建 webhook。 要在 ArgoCD 中设置 webhook 配置,以便向 Ocean 集成发送通知,请按以下步骤操作:

前提条件

  1. 您可以访问部署 ArgoCD 的 Kubernetes 集群。
  2. 安装并配置了 kubectl 以访问集群。

步骤

  1. 配置 ArgoCD 通知清单;
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj-labs/argocd-notifications/release-1.0/manifests/install.yaml

2.安装 ArgoCD 触发器和模板配置清单;

kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj-labs/argocd-notifications/release-1.0/catalog/install.yaml

3.使用 kubectl 连接到部署 ArgoCD 实例的 Kubernetes 集群;

kubectl config use-context <your-cluster-context>

4.将当前名称空间设置为 ArgoCD 名称空间,请使用以下命令;

kubectl config set-context --current --namespace=<your-namespace>

5.创建一个 YAML 文件(例如 argocd-webhook-config.yml),配置 webhook 通知服务。下面的示例展示了如何设置 webhook,以便在 ArgoCD 应用程序更新时发送实时事件。YAML 文件包括以下组件: 1.通知服务定义; 2.webhook 消息正文模板; 3.触发器定义; 4.订阅通知。 下面是一个 YAML 示例。请确保将 <WEBHOOK_URL> 替换为部署海洋集成的 ingress 或服务的实际 URL。默认情况下,传入的 Webhook 事件会发送到 Ocean 中的 /integration/webhook 路径,因此请勿替换路径参数。

webhook manifest file
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-notifications-cm
data:
trigger.on-sync-operation-change: |
- description: Application syncing has updated
send:
- app-status-change
when: app.status.operationState.phase in ['Error', 'Failed', 'Succeeded', 'Running']
trigger.on-deployed: |
- description: Application is synced and healthy
send:
- app-status-change
when: app.status.operationState.phase in ['Succeeded'] and app.status.health.status == 'Healthy'
trigger.on-health-degraded: |
- description: Application has degraded
send:
- app-status-change
when: app.status.health.status == 'Degraded'
service.webhook.port-ocean: |
url: <WEBHOOK_URL>
headers:
- name: Content-Type
value: application/json
template.app-status-change: |
webhook:
port-ocean:
method: POST
path: /integration/webhook
body: |
{
"action": "upsert",
"application_name": "{{.app.metadata.name}}"
}
subscriptions: |
- recipients:
- port-ocean
triggers:
- on-deployed
- on-health-degraded
- on-sync-operation-change

6.使用 kubectl 将 YAML 文件引用到集群。运行以下命令,将 <your-namespace> 替换为 ArgoCD 名称空间,将 <path-to-yaml-file> 替换为 YAML 文件的实际路径:

kubectl apply -n <your-namespace> -f <path-to-yaml-file>

该命令将 webhook 通知配置部署到 ArgoCD 通知 configmaps("argocd-notifications-cm")中,使 Ocean 能够接收实时事件。

将数据输入Port

要使用integration configuration 引用 ArgoCD 对象,可以按照以下步骤操作:

  1. 转到 DevPortal Builder 页面。
  2. 选择要被 ArgoCD 引用的蓝图。
  3. 从菜单中选择采集数据选项。
  4. 在 Kubernetes Stack Provider 类别下选择 ArgoCD。
  5. 根据需要修改configuration
  6. 单击 "Resync"。

示例

蓝图和相关集成配置示例:

集群

Cluster blueprint
{
"identifier": "argocdCluster",
"description": "This blueprint represents an ArgoCD cluster",
"title": "ArgoCD Cluster",
"icon": "Argo",
"schema": {
"properties": {
"namespaces": {
"items": {
"type": "string"
},
"icon": "DefaultProperty",
"title": "Namespace",
"type": "array",
"description": "Holds list of namespaces which are accessible in that cluster."
},
"applicationsCount": {
"title": "Applications Count",
"type": "number",
"description": "The number of applications managed by Argo CD on the cluster",
"icon": "DefaultProperty"
},
"serverVersion": {
"title": "Server Version",
"type": "string",
"description": "Contains information about the Kubernetes version of the cluster",
"icon": "DefaultProperty"
},
"labels": {
"title": "Labels",
"type": "object",
"description": "Contains information about cluster metadata",
"icon": "DefaultProperty"
},
"updatedAt": {
"icon": "DefaultProperty",
"title": "Updated At",
"type": "string",
"format": "date-time"
},
"server": {
"title": "Server",
"description": "The API server URL of the Kubernetes cluster",
"type": "string",
"format": "url",
"icon": "DefaultProperty"
}
},
"required": []
},
"mirrorProperties": {},
"calculationProperties": {},
"relations": {}
}
Integration configuration
createMissingRelatedEntities: true
deleteDependentEntities: true
resources:
- kind: cluster
selector:
query: "true"
port:
entity:
mappings:
identifier: .name
title: .name
blueprint: '"argocdCluster"'
properties:
namespaces: .namespaces
applicationsCount: .info.applicationsCount
serverVersion: .serverVersion
labels: .labels
updatedAt: .connectionState.attemptedAt
server: .server

项目

Project blueprint
{
"identifier": "argocdProject",
"description": "This blueprint represents an ArgoCD Project",
"title": "ArgoCD Project",
"icon": "Argo",
"schema": {
"properties": {
"namespace": {
"title": "Namespace",
"type": "string",
"icon": "DefaultProperty"
},
"createdAt": {
"title": "Created At",
"type": "string",
"format": "date-time",
"icon": "DefaultProperty"
},
"description": {
"title": "Description",
"description": "Project description",
"type": "string",
"icon": "DefaultProperty"
}
},
"required": []
},
"mirrorProperties": {},
"calculationProperties": {},
"relations": {
"cluster": {
"title": "Cluster",
"target": "argocdCluster",
"required": false,
"many": true
}
}
}
Integration configuration
createMissingRelatedEntities: true
deleteDependentEntities: true
resources:
- kind: project
selector:
query: "true"
port:
entity:
mappings:
identifier: .metadata.name
title: .metadata.name
blueprint: '"argocdProject"'
properties:
namespace: .metadata.namespace
createdAt: .metadata.creationTimestamp
description: .spec.description
relations:
cluster: '[.spec.destinations[].name | select(test("^[a-zA-Z0-9@_.:/=-]+$"))]'

申请

Application blueprint
{
"identifier": "argocdApplication",
"description": "This blueprint represents an ArgoCD Application",
"title": "ArgoCD Application",
"icon": "Argo",
"schema": {
"properties": {
"gitRepo": {
"type": "string",
"format": "url",
"icon": "Git",
"title": "Repository URL",
"description": "The URL of the Git repository containing the application source code"
},
"gitPath": {
"type": "string",
"title": "Path",
"description": "The path within the Git repository where the application manifests are located"
},
"destinationServer": {
"type": "string",
"title": "Destination Server",
"format": "url"
},
"namespace": {
"type": "string",
"title": "Namespace"
},
"syncStatus": {
"type": "string",
"title": "Sync Status",
"enum": ["Synced", "OutOfSync", "Unknown"],
"enumColors": {
"Synced": "green",
"OutOfSync": "red",
"Unknown": "lightGray"
},
"description": "The sync status of the application"
},
"healthStatus": {
"type": "string",
"title": "Health Status",
"enum": [
"Healthy",
"Missing",
"Suspended",
"Degraded",
"Progressing",
"Unknown"
],
"enumColors": {
"Healthy": "green",
"Missing": "yellow",
"Suspended": "purple",
"Degraded": "red",
"Progressing": "blue",
"Unknown": "lightGray"
},
"description": "The health status of the application"
},
"createdAt": {
"title": "Created At",
"type": "string",
"format": "date-time"
}
},
"required": []
},
"mirrorProperties": {},
"calculationProperties": {},
"relations": {
"project": {
"title": "Project",
"target": "argocdProject",
"required": false,
"many": false
}
}
}
Integration configuration
createMissingRelatedEntities: true
deleteDependentEntities: true
resources:
- kind: application
selector:
query: "true"
port:
entity:
mappings:
identifier: .metadata.uid
title: .metadata.name
blueprint: '"argocdApplication"'
properties:
gitRepo: .spec.source.repoURL
gitPath: .spec.source.path
destinationServer: .spec.destination.server
namespace: .metadata.namespace
syncStatus: .status.sync.status
healthStatus: .status.health.status
createdAt: .metadata.creationTimestamp
relations:
project: .spec.project

部署历史

Deployment history blueprint
{
"identifier": "argocdDeploymentHistory",
"description": "This blueprint represents an ArgoCD deployment history",
"title": "ArgoCD Deployment History",
"icon": "Argo",
"schema": {
"properties": {
"deployedAt": {
"title": "Deployed At",
"type": "string",
"format": "date-time",
"icon": "DefaultProperty"
},
"deployStartedAt": {
"title": "Deploy Started At",
"type": "string",
"format": "date-time",
"icon": "DefaultProperty"
},
"revision": {
"title": "Revision",
"type": "string",
"icon": "DefaultProperty"
},
"initiatedBy": {
"title": "Initiated By",
"type": "string",
"icon": "DefaultProperty"
},
"repoURL": {
"icon": "DefaultProperty",
"title": "Repository URL",
"type": "string",
"format": "url"
},
"sourcePath": {
"title": "Source Path",
"type": "string",
"icon": "DefaultProperty"
}
},
"required": []
},
"mirrorProperties": {},
"calculationProperties": {},
"aggregationProperties": {},
"relations": {
"application": {
"title": "Application",
"target": "argocdApplication",
"required": false,
"many": false
}
}
}
Integration configuration
createMissingRelatedEntities: true
deleteDependentEntities: true
resources:
- kind: deployment-history
selector:
query: "true"
port:
entity:
mappings:
identifier: .__applicationId + "-" + (.id | tostring)
title: .id | tostring
blueprint: '"argocdDeploymentHistory"'
properties:
deployedAt: .deployedAt
deployStartedAt: .deployStartedAt
revision: .revision
initiatedBy: .initiatedBy.username
repoURL: .source.repoURL
sourcePath: .source.path
relations:
application: .__applicationId

通过 webhook 进行替代安装

虽然上述 Ocean 集成是推荐的安装方法,但您可能更喜欢使用 webhook 从 ArgoCD 引用数据。 如果是这样,请使用以下说明:

Webhook installation (click to expand)

在本例中,您将在ArgoCD 和 Port 之间创建一个 webhook 集成,该集成将摄取应用程序实体并将其映射到 ArgoCD 项目。

Port configuration

创建以下蓝图定义:

Project blueprint
{
"identifier": "argocdProject",
"description": "This blueprint represents an ArgoCD Project",
"title": "ArgoCD Project",
"icon": "Argo",
"schema": {
"properties": {
"description": {
"title": "Description",
"description": "Project description",
"type": "string",
"icon": "DefaultProperty"
}
},
"required": []
},
"mirrorProperties": {},
"calculationProperties": {},
"relations": {}
}
Application blueprint
{
"identifier": "argocdApplication",
"description": "This blueprint represents an ArgoCD Application",
"title": "ArgoCD Application",
"icon": "Argo",
"schema": {
"properties": {
"gitRepo": {
"type": "string",
"format": "url",
"icon": "Git",
"title": "Repository URL",
"description": "The URL of the Git repository containing the application source code"
},
"gitPath": {
"type": "string",
"title": "Path",
"description": "The path within the Git repository where the application manifests are located"
},
"destinationServer": {
"type": "string",
"title": "Destination Server",
"format": "url"
},
"namespace": {
"type": "string",
"title": "Namespace"
},
"syncStatus": {
"type": "string",
"title": "Sync Status",
"enum": ["Synced", "OutOfSync", "Unknown"],
"enumColors": {
"Synced": "green",
"OutOfSync": "red",
"Unknown": "lightGray"
},
"description": "The sync status of the application"
},
"healthStatus": {
"type": "string",
"title": "Health Status",
"enum": [
"Healthy",
"Missing",
"Suspended",
"Degraded",
"Progressing",
"Unknown"
],
"enumColors": {
"Healthy": "green",
"Missing": "yellow",
"Suspended": "purple",
"Degraded": "red",
"Progressing": "blue",
"Unknown": "lightGray"
},
"description": "The health status of the application"
},
"createdAt": {
"title": "Created At",
"type": "string",
"format": "date-time"
}
},
"required": []
},
"mirrorProperties": {},
"calculationProperties": {},
"relations": {
"project": {
"title": "Project",
"target": "argocdProject",
"required": false,
"many": false
}
}
}

创建以下 webhook 配置using Port UI

Application webhook configuration
  1. 基本信息 选项卡 - 填写以下详细信息: 1.title: ArgoCD Application Mapper; 2.标识符 : argocd_application_mapper; 3.Description : 将 ArgoCD 应用程序映射到 Port 的 webhook 配置; 4.图标 : Argo
  2. 集成配置选项卡 - 填写以下 JQ 映射:
    [
    {
    "blueprint": "argocdApplication",
    "filter": "true",
    "entity": {
    "identifier": ".body.uid | tostring",
    "title": ".body.name | tostring",
    "properties": {
    "gitRepo": ".body.git_repo",
    "gitPath": ".body.git_path",
    "destinationServer": ".body.destination_server",
    "namespace": ".body.namespace",
    "syncStatus": ".body.sync_status",
    "healthStatus": ".body.health_status",
    "createdAt": ".body.created_at"
    },
    "relations": {
    "project": ".body.project"
    }
    }
    }
    ]

3.点击页面底部的保存

Create a webhook in ArgoCD

要在 ArgoCD 中设置向 Port 发送通知的 webhook 配置,请按以下步骤操作:

Prerequisite

  1. 您可以访问部署 ArgoCD 的 Kubernetes 集群。
  2. 安装并配置了 kubectl 以访问集群。

Steps

  1. 配置 ArgoCD 通知清单;
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj-labs/argocd-notifications/release-1.0/manifests/install.yaml

2.安装 ArgoCD 触发器和模板配置清单;

kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj-labs/argocd-notifications/release-1.0/catalog/install.yaml

3.使用 kubectl 连接到部署 ArgoCD 实例的 Kubernetes 集群;

kubectl config use-context <your-cluster-context>

4.将当前名称空间设置为 ArgoCD 名称空间,请使用以下命令;

kubectl config set-context --current --namespace=<your-namespace>

5.创建一个 YAML 文件(例如 argocd-webhook-config.yml),配置 webhook 通知服务。下面的示例展示了如何设置 webhook,以便在 ArgoCD 应用程序更新时发送实时事件。YAML 文件包括以下组件: 1.通知服务定义; 2.webhook 消息正文模板; 3.触发器定义; 4.订阅通知。 下面是一个 YAML 示例。请确保将 <YOUR_WEBHOOK_URL> 替换为创建 webhook 配置后收到的 url 键值。

webhook manifest file
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-notifications-cm
data:
trigger.on-sync-operation-change: |
- description: Application syncing has updated
send:
- app-status-change
when: app.status.operationState.phase in ['Error', 'Failed', 'Succeeded', 'Running']
trigger.on-deployed: |
- description: Application is synced and healthy
send:
- app-status-change
when: app.status.operationState.phase in ['Succeeded'] and app.status.health.status == 'Healthy'
trigger.on-health-degraded: |
- description: Application has degraded
send:
- app-status-change
when: app.status.health.status == 'Degraded'
service.webhook.port-webhook: |
url: <YOUR_WEBHOOK_URL>
headers:
- name: Content-Type
value: application/json
template.app-status-change: |
webhook:
port-webhook:
method: POST
body: |
{
"uid": "{{.app.metadata.uid}}",
"name": "{{.app.metadata.name}}",
"namespace": "{{.app.metadata.namespace}}",
"sync_status": "{{.app.status.sync.status}}",
"health_status": "{{.app.status.health.status}}",
"git_repo": "{{.app.spec.source.repoURL}}",
"git_path": "{{.app.spec.source.path}}",
"destination_server": "{{.app.spec.destination.server}}",
"created_at": "{{.app.metadata.creationTimestamp}}",
"project": "{{.app.spec.project}}"
}
subscriptions: |
- recipients:
- port-webhook
triggers:
- on-deployed
- on-health-degraded
- on-sync-operation-change

6.使用 kubectl 将 YAML 文件引用到集群。运行以下命令,将 <your-namespace> 替换为 ArgoCD 名称空间,将 <path-to-yaml-file> 替换为 YAML 文件的实际路径:

kubectl apply -n <your-namespace> -f <path-to-yaml-file>

该命令将 webhook 通知配置部署到 ArgoCD 通知 configmaps (argocd-notifications-cm),使 Port 能够接收实时事件。

完成!您在 ArgoCD 中的应用程序发生的任何变化都将触发指向 Port 提供的 webhook URL 的 webhook 事件。 Port 将根据映射解析事件,并相应地更新目录实体。

Argocd Events

在本示例中,您将在ArgoCD 和 Port 之间创建一个 webhook 集成,该集成将摄取所有事件实体并将其映射到 ArgoCD 应用程序。

Port configuration

创建以下蓝图定义:

Events blueprint
{
"identifier": "argocdEvent",
"description": "This blueprint represents ArgoCD events",
"title": "ArgoCD Events",
"icon": "Argo",
"schema": {
"properties": {
"event": {
"type": "string",
"title": "Event Name"
},
"namespace": {
"type": "string",
"title": "Namespace"
},
"description": {
"type": "string",
"title": "Description"
}
},
"required": []
},
"mirrorProperties": {},
"calculationProperties": {},
"aggregationProperties": {},
"relations": {
"application": {
"title": "Application",
"target": "argocdApplication",
"required": false,
"many": false
}
}
}

创建以下 webhook 配置using Port UI

Application webhook configuration
  1. 基本信息 选项卡 - 填写以下详细信息: 1.title: ArgoCD Event Mapper; 2.标识符 : argocd_event_mapper; 3.Description : 将 ArgoCD 事件映射到 Port 的 webhook 配置; 4.图标 : Argo
  2. 集成配置选项卡 - 填写以下 JQ 映射:
    [
    {
    "blueprint": "argocdEvent",
    "filter": "true",
    "entity": {
    "identifier": ".body.app_name + \"-\" + .body.event_name | tostring",
    "title": ".body.event_name | tostring",
    "properties": {
    "event": ".body.event_name",
    "namespace": ".body.namespace",
    "description": ".body.description"
    },
    "relations": {
    "application": ".body.uid"
    }
    }
    }
    ]

3.点击页面底部的保存

Create a webhook in ArgoCD

要在 ArgoCD 中设置向 Port 发送通知的 webhook 配置,请按以下步骤操作:

Prerequisite

  1. 您可以访问部署 ArgoCD 的 Kubernetes 集群。
  2. 安装并配置了 kubectl 以访问集群。

Steps

  1. 配置 ArgoCD 通知清单;
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj-labs/argocd-notifications/release-1.0/manifests/install.yaml

2.安装 ArgoCD 触发器和模板配置清单;

kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj-labs/argocd-notifications/release-1.0/catalog/install.yaml

3.使用 kubectl 连接到部署 ArgoCD 实例的 Kubernetes 集群;

kubectl config use-context <your-cluster-context>

4.将当前名称空间设置为 ArgoCD 名称空间,请使用以下命令;

kubectl config set-context --current --namespace=<your-namespace>

5.创建一个 YAML 文件(例如 argocd-events-config.yaml),配置 webhook 通知服务。下面的示例展示了如何设置 webhook 从 ArgoCD 发送实时事件。YAML 文件包括以下组件: 1.通知服务定义; 2.webhook 消息正文模板; 3.触发器定义; 4.订阅通知。 下面是一个 YAML 示例。请确保将 <YOUR_WEBHOOK_URL> 替换为创建 webhook 配置后收到的 url 键值。

event manifest file
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-notifications-cm
data:
trigger.on-created: |
- description: Application is created
send:
- app-created
when: true
oncePer: app.metadata.name
trigger.on-sync-running: |
- description: Application is being synced
send:
- app-sync-running
when: app.status.operationState.phase in ['Running']
trigger.on-sync-succeeded: |
- description: Application syncing has succeeded
send:
- app-sync-succeeded
when: app.status.operationState.phase in ['Succeeded']
trigger.on-sync-failed: |
- description: Application syncing has failed
send:
- app-sync-failed
when: app.status.operationState.phase in ['Error', 'Failed']
trigger.on-sync-status-unknown: |
- description: Application status is Unknown
send:
- app-sync-status-unknown
when: app.status.sync.status == 'Unknown'
trigger.on-deployed: |
- description: Application is synced and healthy
send:
- app-deployed
when: app.status.operationState.phase in ['Succeeded'] and app.status.health.status == 'Healthy'
trigger.on-health-degraded: |
- description: Application has degraded
send:
- app-health-degraded
when: app.status.health.status == 'Degraded'
trigger.on-deleted: |
- description: Application is deleted
send:
- app-deleted
when: app.metadata.deletionTimestamp != nil
oncePer: app.metadata.name
service.webhook.port-webhook: |
url: YOUR_WEBHOOK_URL
headers:
- name: Content-Type
value: application/json
template.app-created: |
webhook:
port-webhook:
method: POST
body: |
{
"uid": "{{.app.metadata.uid}}",
"event_name": "on-created",
"app_name": "{{.app.metadata.name}}",
"namespace": "{{.app.metadata.namespace}}",
"description": "Application is created"
}
template.app-sync-succeeded: |
webhook:
port-webhook:
method: POST
body: |
{
"uid": "{{.app.metadata.uid}}",
"event_name": "on-sync-succeeded",
"app_name": "{{.app.metadata.name}}",
"namespace": "{{.app.metadata.namespace}}",
"description": "Application syncing has succeeded"
}
template.app-sync-running: |
webhook:
port-webhook:
method: POST
body: |
{
"uid": "{{.app.metadata.uid}}",
"event_name": "on-sync-running",
"app_name": "{{.app.metadata.name}}",
"namespace": "{{.app.metadata.namespace}}",
"description": "Application is being synced"
}
template.app-sync-failed: |
webhook:
port-webhook:
method: POST
body: |
{
"uid": "{{.app.metadata.uid}}",
"event_name": "on-sync-failed",
"app_name": "{{.app.metadata.name}}",
"namespace": "{{.app.metadata.namespace}}",
"description": "Application syncing has failed"
}
template.app-health-degraded: |
webhook:
port-webhook:
method: POST
body: |
{
"uid": "{{.app.metadata.uid}}",
"event_name": "on-health-degraded",
"app_name": "{{.app.metadata.name}}",
"namespace": "{{.app.metadata.namespace}}",
"description": "Application has degraded"
}
template.app-deployed: |
webhook:
port-webhook:
method: POST
body: |
{
"uid": "{{.app.metadata.uid}}",
"event_name": "on-deployed",
"app_name": "{{.app.metadata.name}}",
"namespace": "{{.app.metadata.namespace}}",
"description": "Application is synced healthy"
}
template.app-sync-status-unknown: |
webhook:
port-webhook:
method: POST
body: |
{
"uid": "{{.app.metadata.uid}}",
"event_name": "on-sync-status-unknown",
"app_name": "{{.app.metadata.name}}",
"namespace": "{{.app.metadata.namespace}}",
"description": "Application status is Unknown"
}
template.app-deleted: |
webhook:
port-webhook:
method: POST
body: |
{
"uid": "{{.app.metadata.uid}}",
"event_name": "on-deleted",
"app_name": "{{.app.metadata.name}}",
"namespace": "{{.app.metadata.namespace}}",
"description": "Application deleted"
}
subscriptions: |
- recipients:
- port-webhook
triggers:
- on-created
- on-deployed
- on-health-degraded
- on-sync-failed
- on-sync-status-unknown
- on-sync-succeeded
- on-sync-running
- on-deleted

6.使用 kubectl 将 YAML 文件引用到集群。运行以下命令,将 <your-namespace> 替换为 ArgoCD 名称空间,将 <path-to-yaml-file> 替换为 YAML 文件的实际路径:

kubectl apply -n <your-namespace> -f <path-to-yaml-file>

该命令将 webhook 通知配置部署到 ArgoCD 通知 configmaps (argocd-notifications-cm),使 Port 能够接收实时事件。

完成!您在 ArgoCD 中的应用程序发生的任何变化都将触发指向 Port 提供的 webhook URL 的 webhook 事件。 Port 将根据映射解析事件,并相应地更新目录实体。