# Elixir

Learn how to build and deploy Elixir application using Buddy.

<Hint type="info">

<actionsBox name="Elixir" slug="elixir" />

</Hint>

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

![Example Elixir pipeline](/docs/quickstart/elixir/elixir-1.png 640x399)

## 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 Elixir application
* Upload code to server together with compiled assets \(FTP/SFTP/Rsync & more\)
* Run db migrations & restart server
* Send notification to Slack

### 4.1 Build your Elixir application

<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 **Elixir** on the action list to add it to the pipeline: 

![Action list](/docs/quickstart/elixir/elixir-2.png 640x537)

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

```bash
mix deps.get
mix test
```
![Elixir action commands console](/docs/quickstart/elixir/elixir-3.png 640x368)

#### 4.1.2 Elixir version

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

![Elixir action image](/docs/quickstart/elixir/elixir-4.png 640x488)

<Hint type="tip">

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

![Services tab](/docs/quickstart/elixir/elixir-5.png 640x369)

</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 server

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:

![SSH configuration](/docs/quickstart/elixir/elixir-6.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/elixir