> 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-delivery/troubleshooting-and-resources/tutorials/on-prem-hybrid-deployments/pdc.md).

# Deploy to a physical data center

Deploy artifacts to VMs or bare-metal hosts in a physical data center using SSH or WinRM with Harness CD.

This tutorial helps you get started with Harness Continuous Delivery (CD). The tutorial walks you through creating a CD pipeline with deployment type **Secure Shell (SSH)** or **WinRM** that manages remote Linux servers.

## What you will learn from this topic

* How to install and verify the Harness Delegate in your environment
* How to create SSH or WinRM credentials as Harness secrets
* How to set up connectors to your physical data center and an Artifactory repository
* How to define a Harness service, environment, and infrastructure definition
* How to create and execute a deployment pipeline using the Canary, Rolling, or Basic strategy

***

{% hint style="info" %}
[Sign up today to unleash the potential of intelligent Harness CD](https://app.harness.io/auth/#/signup/?module=cd\&utm_source=website\&utm_medium=harness-developer-hub\&utm_campaign=cd-plg\&utm_content=tutorials-cd-vm-pdc).
{% endhint %}

{% tabs %}
{% tab title="Secure Shell (SSH)" %}

## Before you begin

Verify that you have the following:

* **One or more Linux VM**. Use your own Linux VM or we recommend using [Vagrant](https://developer.hashicorp.com/vagrant/tutorials/getting-started/getting-started-install) for starting a new VM instance.
* **SSH Private Key to authenticate to the remote vm/server**. For steps, go to [Passwordless SSH using public-private key pairs](https://www.redhat.com/sysadmin/passwordless-ssh).
* [**Docker**](https://docs.docker.com/engine/install/) to set up and start *Docker Delegate*.
  * Check [delegate system and network requirements](https://developer.harness.io/harness-platform/use-harness-platform/delegates/delegate/delegate-concepts/delegate-requirements).

### Harness CD setup <a href="#getting-started-with-harness-cd" id="getting-started-with-harness-cd"></a>

Complete the following steps to configure the delegate, connectors, service, environment, and pipeline.

1. Log in to [Harness](https://app.harness.io/).
2. Select **Projects**, and then select **Default Project**.

{% hint style="warning" %}
For the pipeline to run successfully, follow all of the steps below as they are, including the naming conventions.
{% endhint %}

### Set up the Harness Delegate

<details>

<summary>What is the Harness Delegate?</summary>

The Harness Delegate is a service that runs in your local network or VPC to establish connections between the Harness Manager and various providers such as artifacts registries, cloud platforms, etc. The delegate is installed in the target infrastructure, for example, a Kubernetes cluster, and performs operations including deployment and integration. For more information, go to [Delegate overview](https://developer.harness.io/harness-platform/use-harness-platform/delegates/delegate/delegate-concepts/delegate-overview).

</details>

1. In **Project Setup**, select **Delegates**.
   1. Select **Delegates**.
      1. Select **Install delegate**. This tutorial uses the Docker delegate.
      2. In the command provided, `ACCOUNT_ID`, `MANAGER_ENDPOINT` and `DELEGATE_TOKEN` are auto-populated values that you can obtain from the delegate installation wizard.

         ```bash
         docker run --cpus=1 --memory=2g \
           -e DELEGATE_NAME=docker-delegate \
           -e NEXT_GEN="true" \
           -e DELEGATE_TYPE="DOCKER" \
           -e ACCOUNT_ID=ACCOUNT_ID \
           -e DELEGATE_TOKEN=DELEGATE_TOKEN \
           -e MANAGER_HOST_AND_PORT=MANAGER_ENDPOINT harness/delegate:23.05.79310
         ```
   2. Verify that the delegate is installed successfully and can connect to the Harness Manager.

{% hint style="info" %}
You can also follow the [Install Harness Delegate on Kubernetes or Docker](https://developer.harness.io/harness-platform/use-harness-platform/delegates/delegate/install-delegates/overview) steps to install the Kubernetes Delegate using the Helm, Terraform Helm Provider or Kubernetes manifest.
{% endhint %}

### Set up a Harness secret for your SSH private key

<details>

<summary>What are Harness secrets?</summary>

Harness offers built-in secret management for encrypted storage of sensitive information. Secrets are decrypted when needed, and only the private network-connected Harness Delegate has access to the key management system. You can also integrate your own secret manager. For more information, go to [Harness secret manager overview](https://developer.harness.io/harness-platform/use-harness-platform/secrets/secrets-management/harness-secret-manager-overview).

</details>

1. In **Project Setup**, select **Secrets**.
2. Select **New Secret** > **SSH Credential**.
3. Enter the secret name `harness_sshprivatekey` and click **Continue**.
4. With **SSH Key** as the Auth Scheme, select **Username/SSH Key** as the Authentication method.
5. Enter the username for the user account on the remote server in the **Username** field. For example: *ubuntu*
6. Next, select **Create or Select a Secret** and click **New Secret File**.
7. Enter the Secret Name **ssh-private-key** and click **Browse** to upload the SSH Private Key to Harness Secret Manager.
8. Click **Save** and if needed modify the SSH port number.
9. Finally, click **Save and Continue**.

### Set up Harness connectors to your physical data center and Artifactory repository

<details>

<summary>What are connectors?</summary>

Connectors in Harness enable integration with 3rd party tools, providing authentication and operations during pipeline runtime. For instance, a GitHub connector facilitates authentication and fetching files from a GitHub repository within pipeline stages. For more information, go to [Connectors](https://developer.harness.io/harness-platform/use-harness-platform/connectors).

</details>

**Create a Physical Data Center connector**

1. Copy the contents of [pdc-connector.yml](https://github.com/harness-community/harnesscd-example-apps/blob/master/vm-pdc/ssh/pdc-connector.yml).
2. In Harness, in **Project Setup**, select **Connectors**.
3. Select **Create via YAML Builder** and paste the copied YAML.
4. In the YAML, replace **HOST\_IP\_OR\_FQDN** with the Host IP/FQDN and **DELEGATE\_NAME** with the installed delegate name. To obtain the delegate name, navigate to **Default Project** > **Project Setup** > **Delegates**.
5. Select **Save Changes** and verify that the new connector named **harness\_pdc** is successfully created.
6. Finally, select **Test** under **CONNECTIVITY STATUS** to ensure the connection is successful.

**Create an Artifactory connector**

This tutorial uses an artifact for a ToDo List app, `todolist.war`, which is available in a public Harness Artifactory repo.

1. Copy the contents of [artifactory-connector.yml](https://github.com/harness-community/harnesscd-example-apps/blob/master/vm-pdc/ssh/artifactory-connector.yml).
2. In Harness, in **Project Setup**, select **Connectors**.
3. Select **Create via YAML Builder** and paste the copied YAML.
4. Select **Save Changes** and verify that the new connector named **harness\_artifactrepo** is successfully created.
5. Finally, select **Test** under **CONNECTIVITY STATUS** to ensure the connection is successful.

### Set up the Harness environment

<details>

<summary>What are Harness environments?</summary>

Environments define the deployment location, categorized as **Production** or **Pre-Production**. Each environment includes infrastructure definitions for VMs, Kubernetes clusters, or other target infrastructures. For more information, go to [Environments overview](/continuous-delivery/use-continuous-delivery/cd-building-blocks/environments/environment-overview.md).

</details>

1. In **Default Project**, select **Environments**.
2. Select **New Environment** and toggle to **YAML** to use the YAML editor.
3. Copy the contents of [environment.yml](https://github.com/harness-community/harnesscd-example-apps/blob/master/vm-pdc/ssh/environment.yml) and paste it into the YAML editor and select **Save**.
4. In **Infrastructure Definitions**, select **Infrastructure Definition** and select **Edit YAML**.
5. Copy the contents of [infrastructure-definition.yml](https://github.com/harness-community/harnesscd-example-apps/blob/master/vm-pdc/ssh/infrastructure-definition.yml) and paste it into the YAML editor.
6. Select **Save** and verify that the environment and infrastructure definition is created successfully.

### Set up the Harness service

<details>

<summary>What are Harness services?</summary>

In Harness, services represent what you deploy to environments. You use services to configure variables, manifests, and artifacts. The **Services** dashboard provides service statistics like deployment frequency and failure rate. For more information, go to [Services overview](/continuous-delivery/use-continuous-delivery/cd-building-blocks/services/services-overview.md).

</details>

1. In **Default Project**, select **Services**.
2. Select **New Service**.
3. Name the service `harness_ssh`.
4. Select **Save**, and then in the **Configuration** tab, toggle to **YAML** to use the YAML editor.
5. Select **Edit YAML** and copy the contents of [service.yml](https://github.com/harness-community/harnesscd-example-apps/blob/master/vm-pdc/ssh/service.yml) and paste it into the YAML editor.
6. Select **Save** and verify that the Service **harness\_ssh** is successfully created.

### Set up the pipeline

<details>

<summary>What are Harness pipelines?</summary>

A pipeline is a comprehensive process encompassing integration, delivery, operations, testing, deployment, and monitoring. It can utilize CI for code building and testing, followed by CD for artifact deployment in production. A CD Pipeline is a series of stages where each stage deploys a service to an environment. For more information, go to [CD pipeline basics](/continuous-delivery/new-to-continuous-delivery/overview.md#pipeline).

</details>

1. In **Default Project**, select **Pipelines**.
2. Select **New Pipeline**.
3. Enter the name `harness_ssh_pipeline`.
4. Select **Inline** to store the pipeline in Harness.
5. Select **Start** and, in the Pipeline Studio, toggle to **YAML** to use the YAML editor.
6. Select **Edit YAML** to enable edit mode, and choose any of the following execution strategies. Paste the respective YAML based on your selection.

{% tabs %}
{% tab title="Canary" %}

<details>

<summary>What are Canary deployments?</summary>

A canary deployment updates nodes in a single environment gradually, allowing you to use gates between increments. Canary deployments allow incremental updates and ensure a controlled rollout process. Go to [When to use Canary deployments](/continuous-delivery/use-continuous-delivery/manage-deployments/deployment-concepts.md#when-to-use-canary-deployments).

</details>

1. Copy the contents of [pipeline-ssh-canary.yml](https://github.com/harness-community/harnesscd-example-apps/blob/master/vm-pdc/ssh/pipeline-ssh-canary.yml) and paste it into the YAML editor.
2. Select **Save**.
3. You can switch to the **Visual** editor and confirm the pipeline, stage, and execution steps are as shown below.

![Canary](https://3694223630-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fy1JhZ4oKIppwY7d5AhPj%2Fuploads%2Fgit-blob-411f1a8542bfbcbbc15cbe496c1fa535ad2a32ae%2Fssh-canary.png?alt=media)
{% endtab %}

{% tab title="Rolling" %}

<details>

<summary>What are Rolling deployments?</summary>

Rolling deployments incrementally add nodes in a single environment with a new service version, either one-by-one or in batches defined by a window size. Rolling deployments allow a controlled and gradual update process for the new service version. Go to [When to use rolling deployments](/continuous-delivery/use-continuous-delivery/manage-deployments/deployment-concepts.md#when-to-use-rolling-deployments).

</details>

1. Copy the contents of [pipeline-ssh-rolling.yml](https://github.com/harness-community/harnesscd-example-apps/blob/master/vm-pdc/ssh/pipeline-ssh-rolling.yml) and paste it into the YAML editor.
2. Select **Save**.
3. You can switch to the **Visual** editor and confirm the pipeline, stage, and execution steps are as shown below.

![Rolling](https://3694223630-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fy1JhZ4oKIppwY7d5AhPj%2Fuploads%2Fgit-blob-2a0416551615d891fc5fc2072b0f5b834e379c33%2Fssh-rolling.png?alt=media)
{% endtab %}

{% tab title="Basic" %}

<details>

<summary>What are Basic deployments?</summary>

With basic deployments, all nodes (pods, instances, etc) within a single environment are updated at the same time with a single new service/artifact version. Go to [When to use basic deployments](/continuous-delivery/use-continuous-delivery/manage-deployments/deployment-concepts.md#when-to-use-basic-deployments).

</details>

1. Copy the contents of [pipeline-ssh-basic.yml](https://github.com/harness-community/harnesscd-example-apps/blob/master/vm-pdc/ssh/pipeline-ssh-basic.yml) and paste it into the YAML editor.
2. Select **Save**.
3. You can switch to the **Visual** editor and confirm the pipeline, stage, and execution steps are as shown below.

![Basic](https://3694223630-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fy1JhZ4oKIppwY7d5AhPj%2Fuploads%2Fgit-blob-9d7fc3c29bc85761a78402f776a25b159305fb73%2Fssh-basic.png?alt=media)
{% endtab %}
{% endtabs %}

It is time to execute the pipeline.

1. Select **Run**, and then select **Run Pipeline** to initiate the deployment.
2. Observe the execution logs as Harness copies the artifact from source to the remote server.
3. After a successful execution, you can check the artifact in your remote server using the following command:

```bash
ls -l ~/harness_ssh/harnessdevenv/todolist.war
```

### Deployment complete for SSH <a href="#congratulations" id="congratulations"></a>

You learned how to use Harness CD to copy an artifact to your remote servers via SSH.
{% endtab %}

{% tab title="WinRM" %}

## Before you begin

Verify that you have the following:

* **A Windows VM**. Use your own Windows VM or we recommend using [Vagrant](https://developer.hashicorp.com/vagrant/tutorials/getting-started/getting-started-install) for starting a new vm instance.
* [**Docker**](https://docs.docker.com/engine/install/) to set up and start *Docker Delegate*.
  * Check [delegate system and network requirements](https://developer.harness.io/harness-platform/use-harness-platform/delegates/delegate/delegate-concepts/delegate-requirements).

### Harness CD setup for WinRM

Complete the following steps to configure the delegate, connectors, service, environment, and pipeline.

1. Log in to [Harness](https://app.harness.io/).
2. Select **Projects**, and then select **Default Project**.

{% hint style="warning" %}
For the pipeline to run successfully, follow all of the steps as they are, including the naming conventions.
{% endhint %}

### Delegate for WinRM

<details>

<summary>What is the Harness Delegate?</summary>

The Harness Delegate is a service that runs in your local network or VPC to establish connections between the Harness Manager and various providers such as artifacts registries, cloud platforms, etc. The delegate is installed in the target infrastructure, for example, a Kubernetes cluster, and performs operations including deployment and integration. For more information, go to [Delegate overview](https://developer.harness.io/harness-platform/use-harness-platform/delegates/delegate/delegate-concepts/delegate-overview).

</details>

1. In **Project Setup**, select **Delegates**.
   * Select **Delegates**.
     * Select **Install delegate**. This tutorial uses the Docker Delegate.
     * In the command provided, `ACCOUNT_ID`, `MANAGER_ENDPOINT` and `DELEGATE_TOKEN` are auto-populated values that you can obtain from the delegate Installation wizard.

       ```bash
       docker run --cpus=1 --memory=2g \
         -e DELEGATE_NAME=docker-delegate \
         -e NEXT_GEN="true" \
         -e DELEGATE_TYPE="DOCKER" \
         -e ACCOUNT_ID=ACCOUNT_ID \
         -e DELEGATE_TOKEN=DELEGATE_TOKEN \
         -e MANAGER_HOST_AND_PORT=MANAGER_ENDPOINT harness/delegate:23.05.79310
       ```
   * Verify that the delegate is installed successfully and can connect to the Harness Manager.

{% hint style="info" %}
You can also follow the [Install Harness Delegate on Kubernetes or Docker](https://developer.harness.io/harness-platform/use-harness-platform/delegates/delegate/install-delegates/overview) steps to install the Kubernetes Delegate using the Helm, Terraform Helm Provider or Kubernetes manifest.
{% endhint %}

### Secrets for WinRM

<details>

<summary>What are Harness secrets?</summary>

Harness offers built-in secret management for encrypted storage of sensitive information. Secrets are decrypted when needed, and only the private network-connected Harness Delegate has access to the key management system. You can also integrate your own secret manager. For more information, go to [Harness secret manager overview](https://developer.harness.io/harness-platform/use-harness-platform/secrets/secrets-management/harness-secret-manager-overview).

</details>

1. In **Project Setup**, select **Secrets**.
   * Select **New Secret** > **WinRM Credential**.
   * Enter the secret name `harness_winrmpwd` and click **Continue**.
   * With **NTLM** as the Auth Scheme, Enter the domain name. This is the Active Directory domain name where the user account in the credentials is registered.
   * Enter the username for the user account on the remote server in the **Username** field. For example: *Administrator*
   * Next, select **Create or Select a Secret** and click **New Secret Text**.
   * Enter the Secret Name **winrm\_passwd** and enter the user password in the **Secret Value** field and click **Save**.
   * Finally, click **Save and Continue** and verify the connection to the remote Windows server.

### Connectors for WinRM

<details>

<summary>What are connectors?</summary>

Connectors in Harness enable integration with 3rd party tools, providing authentication and operations during pipeline runtime. For instance, a GitHub connector facilitates authentication and fetching files from a GitHub repository within pipeline stages. For more information, go to [Connectors](https://developer.harness.io/harness-platform/use-harness-platform/connectors).

</details>

1. Create a **Physical Data Center connector**.
   * Copy the contents of [pdc-connector.yml](https://github.com/harness-community/harnesscd-example-apps/blob/master/vm-pdc/winrm/pdc-connector.yml).
   * In Harness, in **Project Setup**, select **Connectors**.
   * Select **Create via YAML Builder** and paste the copied YAML.
   * In the YAML, replace **HOST\_IP\_OR\_FQDN:PORT** with the Host IP/FQDN along with the PORT number to **5985** and **DELEGATE\_NAME** with the installed delegate name. To obtain the delegate name, navigate to **Default Project** > **Project Setup** > **Delegates**.
   * Select **Save Changes** and verify that the new connector named **harness\_pdc** is successfully created.
   * Finally, select **Test** under **CONNECTIVITY STATUS** to ensure the connection is successful.
2. Create an **Artifactory connector**. This tutorial uses a publicly available ToDo List app artifact, todolist.war, available in a public Harness Artifactory repo.
   * Copy the contents of [artifactory-connector.yml](https://github.com/harness-community/harnesscd-example-apps/blob/master/vm-pdc/winrm/artifactory-connector.yml).
   * In Harness, in **Project Setup**, select **Connectors**.
   * Select **Create via YAML Builder** and paste the copied YAML.
   * Select **Save Changes** and verify that the new connector named **harness\_artifactrepo** is successfully created.
   * Finally, select **Test** under **CONNECTIVITY STATUS** to ensure the connection is successful.

### Environment for WinRM

<details>

<summary>What are Harness environments?</summary>

Environments define the deployment location, categorized as **Production** or **Pre-Production**. Each environment includes infrastructure definitions for VMs, Kubernetes clusters, or other target infrastructures. For more information, go to [Environments overview](/continuous-delivery/use-continuous-delivery/cd-building-blocks/environments/environment-overview.md).

</details>

1. In **Default Project**, select **Environments**.
   * Select **New Environment** and toggle to **YAML** to use the YAML editor.
   * Copy the contents of [environment.yml](https://github.com/harness-community/harnesscd-example-apps/blob/master/vm-pdc/winrm/environment.yml) and paste it into the YAML editor and select **Save**.
   * In **Infrastructure Definitions**, select **Infrastructure Definition** and select **Edit YAML**.
   * Copy the contents of [infrastructure-definition.yml](https://github.com/harness-community/harnesscd-example-apps/blob/master/vm-pdc/winrm/infrastructure-definition.yml) and paste it into the YAML editor.
   * Select **Save** and verify that the environment and infrastructure definition is created successfully.

### Services for WinRM

<details>

<summary>What are Harness services?</summary>

In Harness, services represent what you deploy to environments. You use services to configure variables, manifests, and artifacts. The **Services** dashboard provides service statistics like deployment frequency and failure rate. For more information, go to [Services overview](/continuous-delivery/use-continuous-delivery/cd-building-blocks/services/services-overview.md).

</details>

1. In **Default Project**, select **Services**.
   * Select **New Service**.
   * Name the service `harness_winrm`.
   * Select **Save**, and then in the **Configuration** tab, toggle to **YAML** to use the YAML editor.
   * Select **Edit YAML** and copy the contents of [service.yml](https://github.com/harness-community/harnesscd-example-apps/blob/master/vm-pdc/winrm/service.yml) and paste it into the YAML editor.
   * Select **Save** and verify that the Service **harness\_winrm** is successfully created.

### Pipeline for WinRM

<details>

<summary>What are Harness pipelines?</summary>

A pipeline is a comprehensive process encompassing integration, delivery, operations, testing, deployment, and monitoring. It can utilize CI for code building and testing, followed by CD for artifact deployment in production. A CD Pipeline is a series of stages where each stage deploys a service to an environment. For more information, go to [CD pipeline basics](/continuous-delivery/new-to-continuous-delivery/overview.md#pipeline).

</details>

1. In **Default Project**, select **Pipelines**.
   * Select **New Pipeline**.
   * Enter the name `harness_winrm_pipeline`.
   * Select **Inline** to store the pipeline in Harness.
   * Select **Start** and, in the Pipeline Studio, toggle to **YAML** to use the YAML editor.
   * Select **Edit YAML** to enable edit mode, and choose any of the following execution strategies. Paste the respective YAML based on your selection.

{% tabs %}
{% tab title="Canary" %}

<details>

<summary>What are Canary deployments?</summary>

A canary deployment updates nodes in a single environment gradually, allowing you to use gates between increments. Canary deployments allow incremental updates and ensure a controlled rollout process. Go to [When to use Canary deployments](/continuous-delivery/use-continuous-delivery/manage-deployments/deployment-concepts.md#when-to-use-canary-deployments).

</details>

* Copy the contents of [pipeline-canary.yml](https://github.com/harness-community/harnesscd-example-apps/blob/master/vm-pdc/winrm/pipeline-canary.yml) and paste it into the YAML editor.
* Select **Save**.
* You can switch to the **Visual** editor and confirm the pipeline, stage, and execution steps are as shown below.

![Canary](https://3694223630-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fy1JhZ4oKIppwY7d5AhPj%2Fuploads%2Fgit-blob-c3e8daaf7bdba6b4a4fe4a087e6627ab9b1eee65%2Fwinrm-canary.png?alt=media)
{% endtab %}

{% tab title="Rolling" %}

<details>

<summary>What are Rolling deployments?</summary>

Rolling deployments incrementally add nodes in a single environment with a new service version, either one-by-one or in batches defined by a window size. Rolling deployments allow a controlled and gradual update process for the new service version. Go to [When to use rolling deployments](/continuous-delivery/use-continuous-delivery/manage-deployments/deployment-concepts.md#when-to-use-rolling-deployments).

</details>

* Copy the contents of [pipeline-rolling.yml](https://github.com/harness-community/harnesscd-example-apps/blob/master/vm-pdc/winrm/pipeline-rolling.yml) and paste it into the YAML editor.
* Select **Save**.
* You can switch to the **Visual** editor and confirm the pipeline, stage, and execution steps are as shown below.

![Rolling](https://3694223630-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fy1JhZ4oKIppwY7d5AhPj%2Fuploads%2Fgit-blob-21de32dd22d56d79bc1ccbf6bc6dfa04733b52a4%2Fwinrm-rolling.png?alt=media)
{% endtab %}

{% tab title="Basic" %}

<details>

<summary>What are Basic deployments?</summary>

With basic deployments, all nodes (pods, instances, etc) within a single environment are updated at the same time with a single new service/artifact version. Go to [When to use basic deployments](/continuous-delivery/use-continuous-delivery/manage-deployments/deployment-concepts.md#when-to-use-basic-deployments).

</details>

* Copy the contents of [pipeline-basic.yml](https://github.com/harness-community/harnesscd-example-apps/blob/master/vm-pdc/winrm/pipeline-basic.yml) and paste it into the YAML editor.
* Select **Save**.
* You can switch to the **Visual** editor and confirm the pipeline, stage, and execution steps are as shown below.

![Basic](https://3694223630-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fy1JhZ4oKIppwY7d5AhPj%2Fuploads%2Fgit-blob-382d9aa388cd157de141d1f62cc45af7559b2eec%2Fwinrm-basic.png?alt=media)
{% endtab %}
{% endtabs %}

1. It is time to execute the pipeline. Select **Run**, and then select **Run Pipeline** to initiate the deployment.

   * Observe the execution logs as Harness copies the artifact from source to the remote server.
   * After a successful execution, you can check the artifact in your remote server using the following command:

   ```bash
   Get-ChildItem harness_winrm/harnessdevenv
   ```

### Deployment complete for WinRM

You learned how to use Harness CD to copy an artifact to your remote servers via WinRM.
{% endtab %}
{% endtabs %}

***

## Next steps

* Go to [Continuous Delivery key concepts](/continuous-delivery/new-to-continuous-delivery/overview.md) to review CD pipeline fundamentals.
* Go to [SSH deployments overview](/continuous-delivery/use-continuous-delivery/deploy-services-on-different-platforms/traditional/ssh-ng.md) to configure more advanced SSH deployment options.
* Go to [WinRM deployments overview](/continuous-delivery/use-continuous-delivery/deploy-services-on-different-platforms/traditional/win-rm-tutorial.md) to configure WinRM-based deployments.

{% @harness-feedback/feedback %}
