Elixirパイプラインの例

Updated 2 years ago by Admin

このガイドでは、Elixirプロジェクトの継続的インテグレーションパイプラインの構成について説明します。Droneを初めて使用する場合は、最初にチュートリアルとビルド構成ガイドをお読みください。


ビルドとテスト

mixコマンドを実行するパイプラインを示しています。これらのコマンドは、実行時にDockerHubからダウンロードされたElixir Dockerコンテナ内で実行されます。

kind: pipeline
name: default

steps:
- name: test
image: elixir:1.5
commands:
- mix local.rebar --force
- mix local.hex --force
- mix deps.get
- mix test

パイプラインでは、任意のDockerレジストリから任意のDockerイメージを使用できることに注意してください。公式のElixir画像を使用することも、自分の画像を持参することもできます。


依存関係

パイプラインを複数のステップに分割する場合は、各ステップがプロジェクトの依存関係にアクセスできることを確認する必要があります。依存関係は、共有ワークスペースの外部/root/.mixにダウンロードされます。名前付きボリュームを作成して、このディレクトリをすべてのパイプラインステップと共有します。

kind: pipeline
name: default

steps:
- name: install
image: elixir:1.5
volumes:
- name: mix
path: /root/.mix
commands:
- mix local.rebar --force
- mix local.hex --force
- mix deps.get

- name: test
image: elixir:1.5
volumes:
- name: mix
path: /root/.mix
commands:
- mix test

volumes:
- name: mix
temp: {}


複数のバージョンをテストする

Droneのマルチパイプライン機能を使用して、Elixirの複数のバージョンに対して同時にテストできます。これは、他の継続的インテグレーションシステムに見られるマトリックス機能と同等です。

---
kind: pipeline
name: elixir-1-5

steps:
- name: test
image: elixir:1.5
commands:
- mix local.rebar --force
- mix local.hex --force
- mix deps.get
- mix test

---
kind: pipeline
name: elixir-1-4

steps:
- name: test
image: elixir:1.4
commands:
- mix local.rebar --force
- mix local.hex --force
- mix deps.get
- mix test

...

この構文が冗長すぎる場合は、jsonnetを使用することをお勧めします。 jsonnetに慣れていない場合は、ガイドをお読みください。

local Pipeline(name, image) = {
kind: "pipeline",
name: name,
steps: [
{
name: "test",
image: image,
commands: [
"mix local.rebar --force",
"mix local.hex --force",
"mix deps.get",
"mix test",
]
}
]
};

[
Pipeline("elixir-1-5", "elixir:1.5"),
Pipeline("elixir-1-4", "elixir:1.4"),
]

複数のアーキテクチャをテストする

Droneのマルチパイプライン機能を使用して、複数のアーキテクチャとオペレーティングシステムでコードを同時にテストできます。

---
kind: pipeline
name: test-on-amd64

platform:
arch: amd64

steps:
- name: test
image: elixir
commands:
- mix local.rebar --force
- mix local.hex --force
- mix deps.get
- mix test

---
kind: pipeline
name: test-on-arm64

platform:
arch: arm64

steps:
- name: test
image: elixir
commands:
- mix local.rebar --force
- mix local.hex --force
- mix deps.get
- mix test

...

この構文が冗長すぎる場合は、jsonnetを使用することをお勧めします。 jsonnetに慣れていない場合は、ガイドをお読みください。


How did we do?