# Python

Learn how to build and deploy Python application and run DB migrations.

<Hint type="info">

<actionsBox name="Python" slug="python" />

</Hint>

With Buddy, you can create a pipeline that builds, tests, and deploys Python applications on a push to Git. The configuration is super simple and takes 10 to 15 minutes.

![Python pipeline example](/docs/quickstart/python/python-1.png 640x356)

Configuration is very easy and takes only a couple of minutes.

## 1. Create a new project

Go to **Projects** and click **Create new project**. Select your Git hosting provider (Buddy, GitHub, Bitbucket, GitLab, or Private Server) and enter your project name.

![Create new project](/docs/_global/create-new-project.png 640x366)

## 2. Add a new pipeline

Navigate to **Pipelines** and click **New pipeline**. In the form, configure the following:

- **Name** - Enter a descriptive name for your pipeline (e.g., "Deploy to production")
- **ID** - Optional identifier for the pipeline
- **CPU** - Select architecture: **x64** or **ARM64**
- **Resources per pipeline run** - Choose resource allocation (default: Workspace default)
- **[Definition Location](/docs/pipelines/introduction/advanced-settings.md#definition-location)** - Optionally check "Store configuration in a Git repository" to use YAML files

Click **Add pipeline** to create it.

![Add new pipeline](/docs/_global/add-new-pipeline.png 640x497)

## 3. Configure workflow: contexts and triggers

After creating the pipeline, go to the **Workflow** tab to configure:

![Configure Workflow](/docs/_global/configure-workflow.png 640x387)

* **Contexts** - Click `+` to add Git branch/tag context or Environment. See [Contexts](/docs/pipelines/introduction/contexts.md).

* **Triggers** - Click `+` to add Git events, Schedule, or Webhook. See [Workflow Configuration](/docs/pipelines/introduction/creating-pipeline/workflow-configuration.md).


## 4. Add actions

Buddy lets you choose from dozens of predefined actions. In this example, we'll add 4 actions that will perform the following tasks:

* Build and test your Python application
* Upload application to server
* Run db migrations & restart application
* Send notification to Slack

### 4.1 Build and test your Python app

<Hint type="success">

Build actions in Buddy are run in isolated containers run from official Docker images. When the pipeline is run, Buddy pulls the container, runs build commands, and uploads the results to the pipeline filesystem.

</Hint>

Look up and click **Python** on the action list to add it to the pipeline: 

![Action list](/docs/quickstart/python/python-2.png 640x535)

The <u>Run</u> tab lets you determine the commands to execute. The default commands are:

```bash
pip install -r requirements.txt
nosetests
```
![Default Python build commands](/docs/quickstart/python/python-3.png 640x367)

#### 4.1.2 Python version

You can change the version of Python and install missing packages & tools in the runtime environment tab:

![Python action image](/docs/quickstart/python/python-4.png 640x489)

<Hint type="tip">

If your tests require a database to run, you can [attach it in the Services](/docs/actions/services-and-databases/predefined.md) tab:

![Services tab](/docs/quickstart/python/python-5.png 640x308)

</Hint>

### 4.2 Deploy application to server

The compiled application needs to be uploaded to the server. Head to the **Deploy** tab and select your upload action (Transfer in our case, where you can choose SFTP Target):

![File transfer actions](/docs/_global/transfer-actions-sftp.png 640x147)

When adding the action you can choose what and where should be uploaded:

![SFTP action configuration](/docs/_global/sftp-target-tab.png 640x603)

<Hint type="info">

[Targets](/docs/targets/introduction.md) allow to save pre-configured transfer server settings to be used across multiple actions.

</Hint>

### 4.3 Run db migrations & restart application

Once the app is deployed, you can run additional commands on your server with the **SSH** action:

![SSH action selection](/docs/_global/add-ssh-action.png 640x221)

Enter the commands to execute in <u>Run CMDs</u> and configure authentication details in the <u>Target</u> tab:

![Application restart command](/docs/_global/ssh-restart-app.png 640x368)

### 4.4 Send notification to Slack

You can configure Buddy to send your team a message after the deployment. In this example we'll use **Slack**:

![Notification actions](/docs/_global/add-slack-notification.png 640x183)

<Hint type="info">

If you add this action in the <u>On Failure</u> tab, Buddy will only send the message if something goes wrong with your build or deployment.

![On failure notification](/docs/_global/slack-on-failure.png 640x208)

</Hint>

## 5. Summary

**Congratulations!** You have just automated your entire delivery process. Make a push to the selected branch and watch Buddy fetch, build, and deploy your project. With Continuous Delivery applied, you can now focus on what's really important: developing awesome apps! 🔥

<Hint type="success">

Bear in mind that this article is only a brief example of what Buddy can do. You can create additional pipelines for staging and production environments, integrate with your favorite services \(AWS, Google, Azure\), trigger tests on pull requests, build Docker images, and push them to the registry—the possibilities are unlimited.

</Hint>

<Hint type="tip">

If you want us to create a delivery pipeline for your project, drop a line to [support@buddy.works](mailto:support@buddy.works) – we'll be happy to help!

</Hint>


---
Original source: https://buddy.works/docs/basics/workflows/python