# Part 3: Pipeline

## What Will You Do
In this section you will

- Create a GitOps pipeline
- Add multiple stages to the pipeline
- Create a trigger to initiate the pipeline
- Setup a webhook in Github for the pipeline trigger
- Activate the pipeline

---

## Step 1: Create Pipeline
The GitOps pipeline will be used to deploy/update workloads from the Git repository each time an update is made and committed to the repo.

- In your project, navigate to **GitOps -> Pipelines**
- Click **New Pipeline**
- Enter **gitops-workloads** for the name
- Click **Create**

---

## Step 2: Add Pipeline Stages
A pipeline can have multiple stages, with completely different actions to model your desired workflows. In this exercise, you will create a three stage pipeline that will first seek user approval, then deploy/update the YAML workload and finally deploy/update the Helm workload.

- Under the "Stages" tab, Click **Add New Stage**
- Enter **approval** for the name
- Select **Approval** for the action
- Click **Add Approver**
- Select your user account
- Click **Save**

Next, you will add a pipeline stage that will deploy/update the YAML workload.

- Under the "Stages" tab, Click **Add New Stage**
- Enter **deploy yaml workload** for the name
- Select **Deploy Workload** for the action
- Select **yaml-gitops-workload** for the workload
- Click **Save**

Next, you will add a pipeline stage that will deploy/update the Helm workload.

- Under the "Stages" tab, Click **Add New Stage**
- Enter **deploy helm workload** for the name
- Select **Deploy Workload** for the action
- Select **helm-gitops-workload** for the workload
- Click **Save**

---

## Step 3: Add Pipeline Trigger
A pipeline can be executed based on an "external trigger". For example, changes to the manifests in your Git repository. In this exercise, you will configure a trigger that will receive a webhook notification when specific files and directories in your Git repository are modified.

- Click on the **Triggers** tab in the pipeline
- Click **Add New Trigger**
- Enter **github-webhook** for the name
- Select **Webhook** for type
- Select **gitops-workload-gs** for the repository
- Select **Github** for repository type
- Enter **master** for revision
- Click **Add Path**
- Enter **gitops-workload/YAML/yaml-workload.yaml**
- Click **Add Path** again
- Enter **gitops-workload/Helm/webserver/**
- Click **Save**

You will now be presented with the webhook configuration details that you need to copy/paste to your GitHub repository. Once you complete this step, the GitOps pipeline will be configured to receive webhook notifications whenever the repository is updated in Git.

---

## Step 4: Setup GitHub Webhook
In this step, we will configure the GitHub repository to send a webhook to the controller when updates are made to the repo.

- Navigate to your GitHub repository -> Settings -> Webhooks
- Click **Add webhook**
- Copy and Paste the "Payload URL" and "Secret" from the previous step
- Click **Add webhook**

---

## Step 5: Activate Pipeline
By default, newly created pipelines start life in a deactivated state. You will activate the pipeline in this step so that it can be used.

- In your project, navigate to **GitOps -> Pipelines**
- Click the **Activate Pipeline** button
- Click **Yes** to confirm activation

---

## Recap
At this point, you have successfully setup a multistage GitOps pipeline that is triggered by commits to a Github repository.
