KOP GitOps - Triggers - Rafay Product Documentation

Overview

Triggers are external events that start a pipeline job. Two types of triggers are currently supported.


Webhooks

External Git repos can be configured to send a webhook to the Controller. If the webhook payload satisfies the specified criteria, the pipeline job is started.


Cron Job

This is essentially a "periodic repository" sync operation that is performed as per configured schedule. When the sync operation detects that monitored files have been updated in the repository, it starts the pipeline job.

Examples of common cron expressions:


Trigger Variables

Trigger variables can be dynamically "set" based on environmental data and from the "payload" received as part of the incoming webhook. These variables can be used in the stages of the "pipeline" allowing for "dynamic actions". Some stages in the pipeline can then be executed and some skipped based on a dynamic evaluation of the "trigger variables" that are set as part of a pipeline job. With this approach, the developer/operator just has to make the commit in Git with the "suitable metadata" and the correct "stage" in the pipeline will be automatically executed.

Some common examples are:

The trigger variables supported by the platform are:

Trigger Name Description
trigger.name (StringType) The user friendly name for the trigger
trigger.id (StringType) The unique ID for the trigger
trigger.when (TimeType) Timestamp for the trigger
trigger.payload (MapType) The payload received from the repository as part of the webhook

See JSON payload example below shows the "payload" received as part of a webhook from a Git repository.


Example

In the example shown below, the following trigger variables are "dynamically set" and can then be used by the stages as part of a "pipeline job".

{
  "ref": "refs/heads/main",
  "before": "ab3a10e498ebb976f6d9beb6c33e8fca9fa641f4",
  "after": "fd1ad213c0c8deca1782cac3612d41ca8737dfbb",
  "repository": {
    "id": 312689044,
    "node_id": "MDEwOlJlcG9zaXRvcnkzMTI2ODkwNDQ=",
    "name": "apps",
    "full_name": "hardik-rafay/apps",
    "private": true,
    "owner": {
      "name": "hardik-rafay",
      "email": "61439574+hardik-rafay@users.noreply.github.com",
      "login": "hardik-rafay",
      "id": 61439574,
      "node_id": "MDQ6VXNlcjYxNDM5NTc0",
      "avatar_url": "https://avatars.githubusercontent.com/u/61439574?v=4",
      "gravatar_id": "",
      "url": "https://api.github.com/users/hardik-rafay",
      "html_url": "https://github.com/hardik-rafay",
      "followers_url": "https://api.github.com/users/hardik-rafay/followers",
      "following_url": "https://api.github.com/users/hardik-rafay/following{/other_user}",
      "gists_url": "https://api.github.com/users/hardik-rafay/gists{/gist_id}",
      "starred_url": "https://api.github.com/users/hardik-rafay/starred{/owner}{/repo}",
      "subscriptions_url": "https://api.github.com/users/hardik-rafay/subscriptions",
      "organizations_url": "https://api.github.com/users/hardik-rafay/orgs",
      "repos_url": "https://api.github.com/users/hardik-rafay/repos",
      "events_url": "https://api.github.com/users/hardik-rafay/events{/privacy}",
      "received_events_url": "https://api.github.com/users/hardik-rafay/received_events",
      "type": "User",
      "site_admin": false
    },
    "html_url": "https://github.com/hardik-rafay/apps",
    "description": null,
    "fork": false,
    "url": "https://github.com/hardik-rafay/apps",
    "forks_url": "https://api.github.com/repos/hardik-rafay/apps/forks",
    "keys_url": "https://api.github.com/repos/hardik-rafay/apps/keys{/key_id}",
    "collaborators_url": "https://api.github.com/repos/hardik-rafay/apps/collaborators{/collaborator}",
    "teams_url": "https://api.github.com/repos/hardik-rafay/apps/teams",
    "hooks_url": "https://api.github.com/repos/hardik-rafay/apps/hooks",
    "issue_events_url": "https://api.github.com/repos/hardik-rafay/apps/issues/events{/number}",
    "events_url": "https://api.github.com/repos/hardik-rafay/apps/events",
    "assignees_url": "https://api.github.com/repos/hardik-rafay/apps/assignees{/user}",
    "branches_url": "https://api.github.com/repos/hardik-rafay/apps/branches{/branch}",
    "tags_url": "https://api.github.com/repos/hardik-rafay/apps/tags",
    "blobs_url": "https://api.github.com/repos/hardik-rafay/apps/git/blobs{/sha}",
    "git_tags_url": "https://api.github.com/repos/hardik-rafay/apps/git/tags{/sha}",
    "git_refs_url": "https://api.github.com/repos/hardik-rafay/apps/git/refs{/sha}",
    "trees_url": "https://api.github.com/repos/hardik-rafay/apps/git/trees{/sha}",
    "statuses_url": "https://api.github.com/repos/hardik-rafay/apps/statuses/{sha}",
    "languages_url": "https://api.github.com/repos/hardik-rafay/apps/languages",
    "stargazers_url": "https://api.github.com/repos/hardik-rafay/apps/stargazers",
    "contributors_url": "https://api.github.com/repos/hardik-rafay/apps/contributors",
    "subscribers_url": "https://api.github.com/repos/hardik-rafay/apps/subscribers",
    "subscription_url": "https://api.github.com/repos/hardik-rafay/apps/subscription",
    "commits_url": "https://api.github.com/repos/hardik-rafay/apps/commits{/sha}",
    "git_commits_url": "https://api.github.com/repos/hardik-rafay/apps/git/commits{/sha}",
    "comments_url": "https://api.github.com/repos/hardik-rafay/apps/comments{/number}",
    "issue_comment_url": "https://api.github.com/repos/hardik-rafay/apps/issues/comments{/number}",
    "contents_url": "https://api.github.com/repos/hardik-rafay/apps/contents/{+path}",
    "compare_url": "https://api.github.com/repos/hardik-rafay/apps/compare/{base}...{head}",
    "merges_url": "https://api.github.com/repos/hardik-rafay/apps/merges",
    "archive_url": "https://api.github.com/repos/hardik-rafay/apps/{archive_format}{/ref}",
    "downloads_url": "https://api.github.com/repos/hardik-rafay/apps/downloads",
    "issues_url": "https://api.github.com/repos/hardik-rafay/apps/issues{/number}",
    "pulls_url": "https://api.github.com/repos/hardik-rafay/apps/pulls{/number}",
    "milestones_url": "https://api.github.com/repos/hardik-rafay/apps/milestones{/number}",
    "notifications_url": "https://api.github.com/repos/hardik-rafay/apps/notifications{?since,all,participating}",
    "labels_url": "https://api.github.com/repos/hardik-rafay/apps/labels{/name}",
    "releases_url": "https://api.github.com/repos/hardik-rafay/apps/releases{/id}",
    "deployments_url": "https://api.github.com/repos/hardik-rafay/apps/deployments",
    "created_at": 1605303332,
    "updated_at": "2021-05-14T07:29:13Z",
    "pushed_at": 1620977387,
    "git_url": "git://github.com/hardik-rafay/apps.git",
    "ssh_url": "git@github.com:hardik-rafay/apps.git",
    "clone_url": "https://github.com/hardik-rafay/apps.git",
    "svn_url": "https://github.com/hardik-rafay/apps",
    "homepage": null,
    "size": 14192,
    "stargazers_count": 0,
    "watchers_count": 0,
    "language": "Mustache",
    "has_issues": true,
    "has_projects": true,
    "has_downloads": true,
    "has_wiki": true,
    "has_pages": false,
    "forks_count": 0,
    "mirror_url": null,
    "archived": false,
    "disabled": false,
    "open_issues_count": 0,
    "license": null,
    "forks": 0,
    "open_issues": 0,
    "watchers": 0,
    "default_branch": "main",
    "stargazers": 0,
    "master_branch": "main"
  },
  "pusher": {
    "name": "hardik-rafay",
    "email": "61439574+hardik-rafay@users.noreply.github.com"
  },
  "sender": {
    "login": "hardik-rafay",
    "id": 61439574,
    "node_id": "MDQ6VXNlcjYxNDM5NTc0",
    "avatar_url": "https://avatars.githubusercontent.com/u/61439574?v=4",
    "gravatar_id": "",
    "url": "https://api.github.com/users/hardik-rafay",
    "html_url": "https://github.com/hardik-rafay",
    "followers_url": "https://api.github.com/users/hardik-rafay/followers",
    "following_url": "https://api.github.com/users/hardik-rafay/following{/other_user}",
    "gists_url": "https://api.github.com/users/hardik-rafay/gists{/gist_id}",
    "starred_url": "https://api.github.com/users/hardik-rafay/starred{/owner}{/repo}",
    "subscriptions_url": "https://api.github.com/users/hardik-rafay/subscriptions",
    "organizations_url": "https://api.github.com/users/hardik-rafay/orgs",
    "repos_url": "https://api.github.com/users/hardik-rafay/repos",
    "events_url": "https://api.github.com/users/hardik-rafay/events{/privacy}",
    "received_events_url": "https://api.github.com/users/hardik-rafay/received_events",
    "type": "User",
    "site_admin": false
  },
  "created": false,
  "deleted": false,
  "forced": false,
  "base_ref": null,
  "compare": "https://github.com/hardik-rafay/apps/compare/ab3a10e498eb...fd1ad213c0c8",
  "commits": [
    {
      "id": "fd1ad213c0c8deca1782cac3612d41ca8737dfbb",
      "tree_id": "c9d4933c230e4a8d4c930bb078384cb52dfc78a5",
      "distinct": true,
      "message": "Update deployment.yaml",
      "timestamp": "2021-05-14T00:29:47-07:00",
      "url": "https://github.com/hardik-rafay/apps/commit/fd1ad213c0c8deca1782cac3612d41ca8737dfbb",
      "author": {
        "name": "Hardik Italia",
        "email": "61439574+hardik-rafay@users.noreply.github.com",
        "username": "hardik-rafay"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "username": "web-flow"
      },
      "added": [
      ],
      "removed": [
      ],
      "modified": [
        "helm/nginx/templates/deployment.yaml"
      ]
    }
  ],
  "head_commit": {
    "id": "fd1ad213c0c8deca1782cac3612d41ca8737dfbb",
    "tree_id": "c9d4933c230e4a8d4c930bb078384cb52dfc78a5",
    "distinct": true,
    "message": "Update deployment.yaml",
    "timestamp": "2021-05-14T00:29:47-07:00",
    "url": "https://github.com/hardik-rafay/apps/commit/fd1ad213c0c8deca1782cac3612d41ca8737dfbb",
    "author": {
      "name": "Hardik Italia",
      "email": "61439574+hardik-rafay@users.noreply.github.com",
      "username": "hardik-rafay"
    },
    "committer": {
      "name": "GitHub",
      "email": "noreply@github.com",
      "username": "web-flow"
    },
    "added": [
    ],
    "removed": [
    ],
    "modified": [
      "helm/nginx/templates/deployment.yaml"
    ]
  }
}