Publish Pipeline Events to an HTTP Endpoint using the API

Updated 1 month ago by Michael Cretzman

Currently, this feature is behind a Feature Flag. Contact Harness Support to enable the feature. Feature Flags can only be removed for Harness Professional and Essentials editions. Once the feature is released to a general audience, it's available for Trial and Community Editions.

See New features added to Harness and Features behind Feature Flags (Early Access) for Feature Flag information.

To help you analyze how Pipelines are performing, Harness can send key Pipeline deployment events to a URL endpoint as a JSON payload. Next, you can use other tools to consume and build dashboards for the events.

In this topic:

Before You Begin

You can see how to create event rules in Harness UI in Publish Pipeline Events to an HTTP Endpoint.

Step: Query the event rules for an Application

You can query the event rules for an Application using the GraphQL eventsConfigs method. You simply need an Application Id. See Use Harness Applications API.

Here is an example:

query{
eventsConfigs(appId: "UkO-q8YnSR2dAyiJCw4V9A") {
id
appId
name
enabled
delegateSelectors
rule {
type
pipelineRule {
allEvents
allPipelines
pipelineIds
events
}
}
webhookConfig{
url
headers {
key
value
}
}
}
}

The output shows all the events:

{
"data": {
"eventsConfigs": [
{
"id": "cKScQtWISvGySK3lFxvG1w",
"appId": "UkO-q8YnSR2dAyiJCw4V9A",
"name": "Send me everything",
"enabled": true,
"delegateSelectors": null,
"rule": {
"type": "ALL",
"pipelineRule": {
"allEvents": true,
"allPipelines": true,
"pipelineIds": null,
"events": null
}
},
"webhookConfig": {
"url": "http://127.0.0.1:3000",
"headers": []
}
},
{
"id": "maCF_W44QRCF8eeygNa9Vg",
"appId": "UkO-q8YnSR2dAyiJCw4V9A",
"name": "Demo Send Everything",
"enabled": true,
"delegateSelectors": null,
"rule": {
"type": "ALL",
"pipelineRule": {
"allEvents": true,
"allPipelines": true,
"pipelineIds": null,
"events": null
}
},
"webhookConfig": {
"url": "https://32ec0fac9910.ngrok.io/events",
"headers": [
{
"key": "custom-header",
"value": "hello-world"
}
]
}
}
]
}
}

Now that you have the event rule Id, you can also use the eventsConfig method to search for that specific event.

You can also query using the Application Id and event rule name:

{
eventsConfigsByName(appId: "UkO-q8YnSR2dAyiJCw4V9A", name: "Send me everything") {
webhookConfig {
url
headers {
key
value
}
}
}
}

This will return the specific event rule settings:

{
"data": {
"eventsConfigsByName": {
"webhookConfig": {
"url": "http://127.0.0.1:3000",
"headers": []
}
}
}
}

Step: Create Event Rule

You use createEventsConfig to create an event rule. You simply need the Application Id.

mutation{
createEventsConfig(input: {
appId: "UkO-q8YnSR2dAyiJCw4V9A"
name: "apiexample",
enabled: false,
rule: {
type: ALL,
}
webhookConfig: {
url:"http://127.0.0.1:3000"
}
})
{
eventsConfig {
appId
name
enabled
rule {
type
pipelineRule {
allEvents
pipelineIds
allPipelines
events
}
}
webhookConfig {
url
headers {
key
value
}
}
}
}
}

The new event rule is returned.

{
"data": {
"createEventsConfig": {
"eventsConfig": {
"appId": "UkO-q8YnSR2dAyiJCw4V9A",
"name": "apiexample",
"enabled": false,
"rule": {
"type": "ALL",
"pipelineRule": null
},
"webhookConfig": {
"url": "http://127.0.0.1:3000",
"headers": []
}
}
}
}
}

The new event rule will also show up in the Application UI.

Option: Update and Delete Event Rules

There are also APIs for deleteEventsConfig and updateEventsConfig.

Update example:

mutation{
updateEventsConfig(input: {
appId: "123"
name: "foo",
enabled: false,
rule: {
type: ALL,
}
webhookConfig: {
url: "http://127.0.0.1:3000"
}
})
{
eventsConfig {
appId
name
enabled
rule {
type
pipelineRule {
allEvents
pipelineIds
allPipelines
events
}
}
webhookConfig {
url
headers {
key
value
}
}
}
}
}

Delete example:

mutation{
deleteEventsConfig (input : {
appId : "Jid5r7XHQYCHL8Azz3tKpg"
eventsConfigId : "j-hkK6gNSvGymqLakZGWnQ"
clientMutationId : "del0001"
}) {
clientMutationId
}
}


How did we do?