NAV

Language Guide: Elixir

Overview

This guide will help you get started with an Elixir web application using Phoenix on CircleCI. If you’re in a rush, just copy the sample configuration below into a .circleci/config.yml in your project’s root directory and start building.

Otherwise, we recommend reading our walkthrough for a detailed explanation of our configuration.

Sample Configuration

version: 2
jobs:
  build:
    working_directory: ~/cci-demo-phoenix
    docker:
      - image: trenpixster/elixir:1.3.2
      - image: postgres:9.4.1
        environment:
          POSTGRES_USER: ubuntu
    steps:
      - checkout
      - run: mix deps.get
      - run: mix ecto.create
      - run: mix test

Get the Code

The configuration above is from a demo Elixir app, which you can access at https://github.com/CircleCI-Public/circleci-demo-elixir-phoenix.

If you want to step through it yourself, you can fork the project on GitHub and download it to your machine. Go to the Add Projects page in CircleCI and click the Build Project button next to your project. Finally, delete everything in .circleci/config.yml.

Now we’re ready to build a config.yml from scratch.

Config Walkthrough

We always start with the version.

version: 2

Next, we have a jobs key. Each job represents a phase in your Build-Test-Deploy process. Our sample app only needs a build job, so everything else is going to live under that key.

In each job, we specify a working_directory. In this sample config, we’ll name it after the project in our home directory.

version: 2
jobs:
  build:
    working_directory: ~/cci-demo-phoenix

This path will be used as the default working directory for the rest of the job unless otherwise specified.

Directly beneath working_directory, we can specify container images for the build under a docker key.

version: 2
...
    docker:
      - image: trenpixster/elixir:1.3.2
      - image: postgres:9.4.1
        environment:
          POSTGRES_USER: ubuntu

We use 2 Docker images here: trenpixster/elixir:1.3.2 as the primary build image and postgres:9.4.1 as the database image.

Now we’ll add several steps within the build job.

We’ll do 4 things: checkout the codebase, install missing dependencies, create the storage for the repo, and finally run the tests:

...
    steps:
      - checkout
      - run: mix deps.get
      - run: mix ecto.create
      - run: mix test

Nice! You just set up CircleCI for a Phoenix app.

If you have any questions, head over to our community forum for support from us and other users.