> For the complete documentation index, see [llms.txt](https://developer.harness.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.harness.io/continuous-integration/3.0/use-harness-ci/use-harness-ci/use-drone-plugins/plugin-step-settings-reference.md).

# Plugin step settings

This topic provides settings for the **Plugin** step. For more information about plugins, go to [Explore plugins](/continuous-integration/use-harness-ci/use-harness-ci/use-drone-plugins/explore-ci-plugins.md).

{% hint style="info" %}
Depending on the stage's build infrastructure, some settings might be unavailable or optional.
{% endhint %}

### Name <a href="#name" id="name"></a>

Enter a name summarizing the step's purpose. Harness automatically assigns an **Id** ([Entity Identifier](/harness-ai/use-harness-platform/references/entity-identifier-reference.md)) based on the **Name**. You can change the **Id**.

### Description <a href="#description" id="description"></a>

Optional text string describing the step's purpose.

### Container Registry and Image <a href="#container-registry-and-image" id="container-registry-and-image"></a>

**Container Registry** is a Harness container registry connector that has access to Docker Hub. If you have created your own plugin, the connector must have access to the container registry where your plugin image is located.

The name of the plugin's Docker image. The image name should include the tag, or it defaults to the `latest` tag if unspecified. For more information about tags, go to [Docker build tags](https://docs.docker.com/engine/reference/commandline/build/#tag).

You can use any Docker image from any Docker registry, including Docker images from private registries.

{% hint style="info" %}
These fields are optional when using a [local runner build infrastructure](/continuous-integration/use-harness-ci/use-harness-ci/set-up-build-infrastructure/define-a-docker-build-infrastructure.md), [self-managed AWS/GCP/Azure VM build infrastructure](/continuous-integration/3.0/use-harness-ci/use-harness-ci/set-up-build-infrastructure/vm-build-infrastructure.md), or [Harness Cloud build infrastructure](/continuous-integration/use-harness-ci/use-harness-ci/set-up-build-infrastructure/use-harness-cloud-build-infrastructure.md). These fields are only required if the build machine doesn't have the required binaries pre-installed.
{% endhint %}

### Privileged <a href="#privileged" id="privileged"></a>

Select this option to run the container with escalated privileges. This is the equivalent of running a container with the Docker `--privileged` flag.

### Settings <a href="#settings" id="settings"></a>

Specify plugin-specific settings according to the plugin's documentation, either in the Harness CI documentation ([Explore plugins](/continuous-integration/use-harness-ci/use-harness-ci/use-drone-plugins/explore-ci-plugins.md)) or on the Drone Plugins Marketplace.

For detailed information about a plugin's settings, go to the plugin's page on the [Drone Plugins Marketplace](http://plugins.drone.io/). In addition to the settings described on a plugin's Marketplace page, each plugin has a README where you can read about the plugin's settings in detail. The README can include additional or uncommon settings that aren't described on the Marketplace page or the Harness CI documentation. You can find README links at the top of each plugin's Marketplace page.

#### Output variables <a href="#output-variables" id="output-variables"></a>

{% hint style="warning" %}
Not all plugins write output variables.

Output variables, that use special characters ( e.g. '.' ',' '/' ) in their key or value, may not work when executed on [self-managed VM build infrastructures](/continuous-integration/3.0/use-harness-ci/use-harness-ci/set-up-build-infrastructure/vm-build-infrastructure.md).
{% endhint %}

Output variables are exposed values that can be used by other steps or stages in the pipeline. If the plugin writes output to the `DRONE_OUTPUT.env` file, you can use [expressions](/harness-ai/use-harness-platform/variables-and-expressions/runtime-inputs.md#expressions) to reference those output variables in other steps and stages in the pipeline.

For example, to write to the `DRONE_OUTPUT.env` file, the plugin must use a command such as the following:

```
echo "VAR_NAME=somevalue" >> $DRONE_OUTPUT
```

At runtime, the CI engine sets the `$DRONE_OUTPUT` environment variable to a temporary file path such as `/tmp/engine/xyz-output.env`. When a step appends `KEY=value` pairs to this file using `echo`, Harness CI automatically captures them as output variables. These can then be referenced in subsequent steps using expression syntax.

To verify that `$DRONE_OUTPUT` is set, you can run:

```
echo $DRONE_OUTPUT
```

This should return a path like `/tmp/engine/xyz-output.env`.

To reference the resulting output variable in another step in the same stage, use either of the following expressions:

```
<+steps.STEP_ID.output.outputVariables.VAR_NAME>
<+execution.steps.STEP_ID.output.outputVariables.VAR_NAME>
```

To reference an output variable in a stage other than the one where the output variable originated, use either of the following expressions:

```
<+stages.STAGE_ID.spec.execution.steps.STEP_ID.output.outputVariables.VAR_NAME>
<+pipeline.stages.STAGE_ID.spec.execution.steps.STEP_ID.output.outputVariables.VAR_NAME>
```

For each expression:

* Replace `STEP_ID` with the ID of the **Plugin** step.
* Replace `VAR_NAME` with the relevant variable name.
* In cross-stage references, replace `STAGE_ID` with the ID of the stage where the **Plugin** step exists.

If the step is within a step group, include the step group identifier in the expression, such as:

```
<+execution.steps.STEP_GROUP_ID.steps.STEP_ID.output.outputVariables.VAR_NAME>
<+pipeline.stages.STAGE_ID.spec.execution.steps.STEP_GROUP_ID.steps.STEP_ID.output.outputVariables.VAR_NAME>
```

**Output secrets**

Plugin step can export output secrets, which can be used in subsequent steps or stages just like output variables. Output secrets are handled securely by Harness: their values are masked in logs and treated as secrets.

To export an output secret, write to the file path provided by the `$HARNESS_OUTPUT_SECRET_FILE` environment variable. For example:

```
echo "SECRET_KEY=supersecretvalue" >> $HARNESS_OUTPUT_SECRET_FILE
```

At runtime, Harness automatically captures these values as secrets. They can be referenced in subsequent steps or stages the same way as output variables, using expression syntax:

```
<+steps.STEP_ID.output.outputVariables.SECRET_KEY>
<+stages.STAGE_ID.spec.execution.steps.STEP_ID.output.outputVariables.SECRET_KEY>
```

{% hint style="info" %}
**FEATURE FLAGS**

To use output secrets, the following feature flag must be enabled:

* `CI_ENABLE_OUTPUT_SECRETS` For Harness Docker Runner, also enable:
* `CI_ENABLE_PLUGIN_OUTPUT_SECRETS` To enable these flags, [contact Harness Support](mailto:support@harness.io).
  {% endhint %}

**Output Variables on Step Failure**

Output variables will be exported from the plugin step even if the step fails. Consider a CI pipeline stage with two steps: a plugin step **step1** and a run step **step2**. Suppose the plugin step is designed to export two variables, `foo` and `bar`. If the step fails after successfully exporting foo but before reaching `bar`, `foo` will still be available for the next step.

#### Environment variables <a href="#environment-variables" id="environment-variables"></a>

When a Harness CI pipeline runs, it produces a number of environment variables, including many `DRONE_` environment variables. You can reference these in your plugin script, if needed. For more information, go to the [CI environment variables reference](/continuous-integration/3.0/troubleshooting-and-resources/troubleshoot-harness-ci/ci-env-var.md).

### Image Pull Policy <a href="#image-pull-policy" id="image-pull-policy"></a>

If you specified a [Container Registry and Image](#container-registry-and-image), you can specify an image pull policy:

* **Always:** The kubelet queries the container image registry to resolve the name to an image digest every time the kubelet launches a container. If the kubelet encounters an exact digest cached locally, it uses its cached image; otherwise, the kubelet downloads (pulls) the image with the resolved digest, and uses that image to launch the container.
* **If Not Present:** The image is pulled only if it isn't already present locally.
* **Never:** The image is assumed to exist locally. No attempt is made to pull the image.

### Run as User <a href="#run-as-user" id="run-as-user"></a>

If you specified a [Container Registry and Image](#container-registry-and-image), you can specify the user ID to use for running processes in containerized steps.

For a Kubernetes cluster build infrastructure, the step uses this user ID to run all processes in the pod. For more information, go to [Set the security context for a pod](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod).

### Set container resources <a href="#set-container-resources" id="set-container-resources"></a>

Set maximum resource limits for the resources used by the container at runtime:

* **Limit Memory:** The maximum memory that the container can use. You can express memory as a plain integer or as a fixed-point number using the suffixes `G` or `M`. You can also use the power-of-two equivalents `Gi` and `Mi`. The default is `500Mi`.
* **Limit CPU:** The maximum number of cores that the container can use. CPU limits are measured in CPU units. Fractional requests are allowed; for example, you can specify one hundred millicpu as `0.1` or `100m`. The default is `400m`. For more information, go to [Resource units in Kubernetes](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#resource-units-in-kubernetes).

### Timeout <a href="#timeout" id="timeout"></a>

Set the timeout limit for the step. Once the timeout limit is reached, the step fails and pipeline execution continues. To set skip conditions or failure handling for steps, go to:

* [Step Skip Condition settings](/harness-ai/use-harness-platform/pipelines/step-skip-condition-settings.md)
* [Step Failure Strategy settings](/harness-ai/use-harness-platform/pipelines/failure-handling/define-a-failure-strategy-on-stages-and-steps.md)
