Run a GitHub Action in CI
Github Actions is a GitHub feature that enables you to automate various event-driven activities in GitHub, such as cloning a repository, generating Docker images, and testing scripts.
Harness CI supports launching GitHub Actions as part of a Pipeline Stage using the Plugin step.
You simply use the GitHub Actions Drone Plugin, plugins/github-actions, in the Plugin step, and then replicate the GitHub Action settings.
The Github Actions Drone Plugin runs your GitHub Actions in the background using nektos/act.
In this topic, we cover using GitHub Actions in the Plugin step with one of the several GitHub Actions listed in GitHub Marketplace.
In this topic:
- Before You Begin
- Step 1: Create the CI Stage
- Step 2: Add the Codebase
- Step 3: Define the Build Farm Infrastructure
- Step 4: Add the Plugin step
- Step 5: View the Results
- Configure As Code: YAML
- See Also
Before You Begin
Step 1: Create the CI Stage
In your Harness Pipeline, click Add Stage, and then click CI.
Step 2: Add the Codebase
In Connector, select an existing Connector to your codebase repo, or create a new one. See Code Repo Connectors.
You can see the URL for the repo account below Repository Name. Don't add the URL into Repository Name.
In Repository Name, enter the name of the repo containing the codebase.
For example, if the account URL is https://github.com/mycompany
and the repo in that account is myapp
, enter myapp
in the Repository Name.
Step 3: Define the Build Farm Infrastructure
In the CI stage Infrastructure, define the build farm for the codebase.
The following example uses a Kubernetes cluster build farm. You can use AWS for your build infrastructure as well. See Set Up an AWS VM Build Infrastructure.
In Select a Kubernetes Cluster, select, or create, a Kubernetes Connector. See Kubernetes Cluster Connector Settings Reference. This Connector connects Harness to the cluster to use as the build farm.
In Namespace, enter the Kubernetes namespace to use. You can use a Runtime Input (<+input>
) or expression also. See Runtime Inputs.
See Define a Kubernetes Cluster Build Infrastructure for more information.
Step 4: Add the Plugin step
In the stage's Execution, click Add step, select Plugin.
The Plugin settings appear.
Enter the following settings:
Name | Enter a unique name for the step. | ||||||
Description | Harness automatically generates a unique ID for the step. | ||||||
Container Registry | Select or create a Harness Connector for the container registry. | ||||||
Image | Enter the name of the Drone Plugin: | ||||||
Privileged | The Drone Plugin uses nektos/act to run GitHub Actions in CI. It requires DIND (docker-in-docker) to run your images. Hence, the Privileged attribute needs to be enabled to run with escalated permissions. | ||||||
Settings | Replicate the GitHub Action attributes under Settings. For example:
For example, for the Upload Cloud Storage Action, the attributes are as follows:
The The above attributes of Upload Cloud Storage Action are replicated in CI Plugin Settings as follows: |
Here's an example:

For the step settings on CI Plugins, see Plugin Step Settings.
Step 5: View the Results
Save the Pipeline and click Run.
You can see the logs for the GitHub GCP Upload Action in the Pipeline as it runs.
Configure As Code: YAML
To configure your pipeline as YAML in CI, go to Harness Pipeline Studio and click YAML. Here’s is a working example of GitHub Action Cloud Storage Upload to GCP in CI. Modify the YAML attributes such as name, identifiers, codebase, connector ref, environment variables based on your Pipeline requirements.
pipeline:
name: gcp-upload-github-action # Configure your Pipeline name
identifier: gcpuploadgithubaction # Configure your Pipeline identifier
projectIdentifier: Demo_CI_pipelines # Configure your Project identifier
orgIdentifier: default # Configure your Organization
tags: {}
stages:
- stage:
identifier: gcp_upload_success_gha # Configure your Stage identifier
name: stage 1
type: CI
variables:
- name: GCP_SECRET_KEY_BASE64 # Configure your Secret Key Name
type: Secret
value: gcpbase64secret # Configure your Secret Key Value
spec:
execution:
steps:
- step:
identifier: gcsuploader # Configure your step identifier name
name: step one # Configure your step name
type: Plugin
spec:
connectorRef: dockerhub
image: plugins/github-actions
privileged: true
settings: # Configure your plugins Settings configuration
uses: google-github-actions/[email protected]
with:
path: pom.xml
destination: cie-demo-pipeline/github-action
credentials: <+stage.variables.GCP_SECRET_KEY_BASE64>
infrastructure: # Configure your Infrastructure Settings
type: KubernetesDirect
spec:
connectorRef: buildfarm
namespace: cie-demo-pipeline
properties:
ci:
codebase: # Configure your Codebase
connectorRef: githubautouser
repoName: springboot
build:
type: branch
spec:
branch: ci-autouser