Search Results for ""

言語ガイド: 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
    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
    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
    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 コンパイル コマンドを実行します。
  • store_artifacts パス: イメージの ARTIFACT ゾーンにコピーするソース ファイルのパスを指定します。
  • save_cache パス: 将来のビルドで使用するために、指定されたディレクトリを保存します (restore_cache キーで指定された場合)。

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 コマンドも複数行実行コマンドです。

関連項目