言語ガイド: Scala

以下のセクションに沿って、Scala アプリケーションの .circleci/config.yml の作成方法について説明します。

概要

このドキュメントは、プロジェクトの AWS 権限に、S3 バケットの読み取りと書き込みが許可される有効な AWS キーが構成されていることを前提としています。 このドキュメントの例では、指定された S3 バケットにビルド パッケージがアップロードされます。

Scala サンプル プロジェクトのソース コード

このサンプル アプリケーションのソース コードは、samplescala の GitHub パブリック リポジトリにあります。

前提条件

CircleCI 2.0 では、リポジトリの root に新しいディレクトリを作成し、そのディレクトリ内に YAML ファイルを作成する必要があります。 これらの新しいアセットの名前は、ディレクトリが .circleci/、ファイルが config.yml と、命名スキーマに従って指定する必要があります。

mkdir .circleci/
touch .circleci/config.yml

最初のコマンドは .circleci という名前のディレクトリを作成し、次のコマンドは .circleci ディレクトリの中に config.yml という名前の新しいファイルを作成します。 繰り返しますが、.circleci というディレクトリ名と config.yml というファイル名を使用する必要があります。 バージョン 2.0 の前提条件については、こちらのドキュメントを参照してください。

Scala の config.yml ファイル

最初に、新しく作成した config.yml を任意のテキスト エディタで開き、以下の CircleCI 2.0 スキーマをファイルに貼り付けます。 以下に、2.0 構成の全文を示します。

version: 2
jobs:
  build:
    working_directory: ~/samplescala
    docker:
      - image: openjdk:8
        auth:
          username: mydockerhub-user
          password: $DOCKERHUB_PASSWORD  # context / project UI env-var reference
    environment:
      SBT_VERSION: 1.0.4
    steps:
      - run: echo 'export ARTIFACT_BUILD=$CIRCLE_PROJECT_REPONAME-$CIRCLE_BUILD_NUM.zip' >> $BASH_ENV
      - run:
          name: sbt バイナリの取得
          command: |
                    apt update && apt install -y curl
                    curl -L -o sbt-$SBT_VERSION.deb https://dl.bintray.com/sbt/debian/sbt-$SBT_VERSION.deb
                    dpkg -i sbt-$SBT_VERSION.deb
                    rm sbt-$SBT_VERSION.deb
                    apt-get update
                    apt-get install -y sbt python-pip git
                    pip install awscli
                    apt-get clean && apt-get autoclean
      - checkout
      - restore_cache:
          # 依存関係キャッシュについては https://circleci.com/ja/docs/2.0/caching/ をお読みください
          key: sbt-cache
      - run:
          name: samplescala dist パッケージのコンパイル
          command: cat /dev/null | sbt clean update dist
      - store_artifacts: # アーティファクト (https://circleci.com/ja/docs/2.0/artifacts/) に表示するため
          path: target/universal/samplescala.zip
          destination: samplescala
      - save_cache:
          key: sbt-cache
          paths:
            - "~/.ivy2/cache"
            - "~/.sbt"
            - "~/.m2"
      - deploy:
          command: |
              mv target/universal/samplescala.zip $CIRCLE_ARTIFACTS/$ARTIFACT_BUILD
              aws s3 cp $CIRCLE_ARTIFACTS/$ARTIFACT_BUILD s3://samplescala.blogs/builds/ --metadata {\"git_sha1\":\"$CIRCLE_SHA1\"}

スキーマの詳細説明

config.yml は必ず version キーから始めます。 このキーは、互換性を損なう変更に関する警告を表示するために使用します。

version: 2

スキーマの次のキーは jobs キーと build キーです。 これらのキーは必須で、実行時のデフォルトのエントリポイントを表します。 スキーマの残りの部分は build セクションに置かれ、ここでさまざまなコマンドが実行されます。 以下の説明を参照してください。

version: 2
jobs:
  build:
    working_directory: ~/samplescala
    docker:
      - image: openjdk:8
        auth:
          username: mydockerhub-user
          password: $DOCKERHUB_PASSWORD  # context / project UI env-var reference
    environment:
      SBT_VERSION: 1.0.4

docker/image キーは、ビルドに使用する Docker イメージを表します。 この例では、Docker Hub にある公式の openjdk:8 イメージを使用します。 これには、この Scala プロジェクトに必要なネイティブ Java コンパイラが含まれます。

environment/SBT_VERSION は、以降のコマンドでダウンロードする sbt のバージョンを指定する環境変数です。これは Scala アプリケーションのコンパイルに必要です。

version: 2
jobs:
  build:
    working_directory: ~/samplescala
    docker:
      - image: openjdk:8
        auth:
          username: mydockerhub-user
          password: $DOCKERHUB_PASSWORD  # context / project UI env-var reference
    environment:
      SBT_VERSION: 1.0.4
    steps:
      - run: echo 'export ARTIFACT_BUILD=$CIRCLE_PROJECT_REPONAME-$CIRCLE_BUILD_NUM.zip' >> $BASH_ENV
      - run:
          name: sbt バイナリの取得
          command: |
            apt update && apt install -y curl
            curl -L -o sbt-$SBT_VERSION.deb https://dl.bintray.com/sbt/debian/sbt-$SBT_VERSION.deb
            dpkg -i sbt-$SBT_VERSION.deb
            rm sbt-$SBT_VERSION.deb
            apt-get update
            apt-get install -y sbt python-pip git
            pip install awscli
            apt-get clean && apt-get autoclean

steps/run キーは、実行するアクションのタイプを指定します。 run キーは、実行するアクションを表します。

      - run: echo 'export ARTIFACT_BUILD=$CIRCLE_PROJECT_REPONAME-$CIRCLE_BUILD_NUM.zip' >> $BASH_ENV

この echo コマンドは、$ARTIFACT_BUILD 環境変数を定義し、これをビルド ファイル名に設定します。

次の run コマンドは、openjdk コンテナ内の複数のコマンドを実行します。 複数のコマンドを実行するため、複数行で run コマンドを定義します。 以下のようにパイプ | 文字で指定されます。 複数行オプションを使用する場合は、1 つの行が 1 つのコマンドを表します。

      - run:
          command: |
            apt update && apt install -y curl
            curl -L -o sbt-$SBT_VERSION.deb https://dl.bintray.com/sbt/debian/sbt-$SBT_VERSION.deb
            dpkg -i sbt-$SBT_VERSION.deb
            rm sbt-$SBT_VERSION.deb
            apt-get update
            apt-get install -y sbt python-pip git
            pip install awscli
            apt-get clean && apt-get autoclean

この 2.0 バージョンの samplescala スキーマでは、必要な依存関係をダウンロードしてコンテナにインストールする必要があります。 この複数行コマンドの例について以下に説明します。

  • コンテナ OS を更新し、curl をインストールします。
  • $SBT_VERSION 変数で指定されたバージョンの Simple Build Tool (sbt) コンパイラをダウンロードします。
  • sbt コンパイラ パッケージをインストールします。
  • インストール後に sbt.deb ファイルを削除します。
  • OS パッケージ リストを更新します。
  • python-pip と git クライアントをインストールします。
  • awscli パッケージをインストールします。 これは、S3 へのアップロードに必要な AWS コマンドライン インターフェースです。
  • 不要なインストール パッケージをすべて削除して、コンテナのサイズを最小化します。

以下のキーは、複数行コマンドの実行後に実行されるアクションを表します。

    steps:
      - checkout
      - restore_cache:
          key: sbt-cache
      - run:
          name: samplescala dist パッケージのコンパイル
          command: cat /dev/null | sbt clean update dist
      - store_artifacts:
          path: target/universal/samplescala.zip
          destination: samplescala
      - save_cache:
          key: sbt-cache
          paths:
            - "~/.ivy2/cache"
            - "~/.sbt"
            - "~/.m2"

上記の例について以下に説明します。

  • checkout: 基本的に、git は GitHub から取得したプロジェクト リポジトリをコンテナにクローンします。
  • restore_cache キー: 復元するキャッシュ ファイルの名前を指定します。 キー名は、このスキーマの後方にある save_cache キーで指定されます。 指定されたキーが見つからない場合は、何も復元されず、処理が続行されます。
  • run コマンドの cat /dev/null | sbt clean update dist: パッケージの .zip ファイルを生成する sbt コンパイル コマンドを実行します。

Note: cat /dev/null is normally used to prevent a command from hanging if it prompts for interactive input and does not detect whether it is running with an interactive TTY. sbt will prompt on failures by default.

2.0 スキーマの最後の部分は deploy コマンド キーです。 これは、コンパイルされた samplescala.zip を $CIRCLE_ARTIFACTS/ ディレクトリに移動し、その名前を変更します。 その後、指定された AWS S3 バケットにファイルがアップロードされます。

steps:
  - deploy:
      command: |
        mv target/universal/samplescala.zip $CIRCLE_ARTIFACTS/$ARTIFACT_BUILD
        aws s3 cp $CIRCLE_ARTIFACTS/$ARTIFACT_BUILD s3://samplescala.blogs/builds/ --metadata {\"git_sha1\":\"$CIRCLE_SHA1\"}

この deploy コマンドも複数行実行コマンドです。

関連項目



ドキュメントの改善にご協力ください

このガイドは、CircleCI の他のドキュメントと同様にオープンソースで、GitHub で使用できます。 ご協力いただき、ありがとうございます。


クリエイティブ・コモンズ・ライセンス
CircleCICircleCI ドキュメントは、クリエイティブ・コモンズの表示--非営利-継承 4.0 国際ライセンス に基づいてライセンス供与されています。