ローカルで実行

Screwdriver-in-a-box ツールを使用することで、Screwdriver をローカルで実行することができます。

SD-in-a-Box

このツールにより Screwdriver のすべてのインスタンス(UI、API、ログストア)がローカルで起動し、試すことができます。

SD-in-a-box のドキュメントに従って実行してください。

SD-in-a-box

SD-in-a-Boxの設定

SD-in-a-boxはScrewdriverクラスタを各開発環境で簡単に稼働させるためツールで、これを利用することでScrewdriverの機能を直接体験することができます。

カスタムDockerイメージ

Dockerを利用しているため、どのイメージを利用するか指定できます。SD-in-a-Box(とScrewdriver全体)としては下記のDockerイメージを使用します。

下記はdocker-compose.ymlファイルのスニペットです。

version: '2'
services:
  api:
    image: screwdrivercd/screwdriver:stable
    . . .
  ui:
    image: screwdrivercd/ui:stable
    . . .
  store:
    image: screwdrivercd/store:stable
    . . .

これらを使用する代わりにローカルのDockerイメージを利用することもできます。

SD-in-a-Boxを起動するには、以下のコマンドを実行してください。

$ docker-compose -p screwdriver up

Volume-Mounted Source Code

ローカルコピーとして、コンポーネントを選択し、変更することができます。 もしあなたがサービスの更新のための開発中で、クラスタ全体にどのような影響が出るかを確認したい場合、この方法は大変効果的です

変更したいコンポーネントに合わせてdocker-compose.yamlを修正します。 例えば、以下のローカルのソース修正で、APIを変更することができます。

services:
  api:
    # this "build" stanza replaces the default "image" setting
    build:
      context: ./relative/path/to/api_source
      dockerfile: Dockerfile.local
  ui:
    . . .
  store:
    . . .

修正を反映させるために、docker-composeをリビルドする必要があります。

$ docker-compose build --no-cache

ローカルクラスタを再起動することで、行った修正が適用されます。

$ docker-compose -p screwdriver down
$ docker-compose -p screwdriver up

警告

この方法はサービス全体の変更には効果的ですが、いくつかの制限があります。

Local Development Instances

もしあなたが特定のScrewdriverのコンポーネントを修正しようとしているなら、あなたの開発環境でコンポーネントを変更することができます。これはプルリクエストを送る前に、修正が他のScrewdriverのコンポーネントにどのような影響を与えるか調べるのに良い方法になるでしょう。

General configuration

docker-compose.ymlに記述されているコンポーネントは全てIPアドレスが設定されています(localhostではなく)。 以下の機能はIPアドレスの代わりにlocalhostを使用すると停止してしまいます。

UIの設定

UIのローカル開発インスタンスを使うように設定することが可能です。

開発モードでは、デフォルトでは UI は自身の 4200 のポートで起動し、API はローカルの 8080 で起動するようになっています。 開発モードで、デフォルトで UI はポートを4200に、API はポートを8080に設定されています。UI の config/environment.js をローカルの Screwdriver のクラスタ、特に API を指すように変更する必要があるかもしれません。これは、docker-compose.yml の services -> api -> environment -> URIECOSYSTEM_STORE の値に一致するようにSDAPI_HOSTNAMESDSTORE_HOSTNAME の値を変更することでできます。

以下のスニペットはconfig/environment.jsで変更すべき部分のハイライトです。

 ...
 APP: {
       // インスタンス作成時にここでフラグやオプションを渡すことも出来ます。
       SDAPI_HOSTNAME: 'http://172.142.26.99:9001',
       SDAPI_NAMESPACE: 'v4',
       SDSTORE_HOSTNAME: 'http://172.142.26.99:9002',
       ...
      },

以下のスニペットはdocker-compose.ymlで変更すべき部分のハイライトです。ローカルのUIインスタンスを使用するために、SD-in-a-boxクラスタに合わせる必要があります。service 以下にある ui を削除する必要もあります。

version: '2'
services:
    api:
        image: screwdrivercd/screwdriver:stable
        ports:
            - 9001:80
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock:rw
            - ./data/:/tmp/sd-data/:rw
        environment:
            PORT: 80
            URI: http://172.142.26.99:9001 # API
            ECOSYSTEM_UI: http://localhost:4200 # need to change to this value here
            ECOSYSTEM_STORE: http://172.142.26.99:9002 # Store
    . . .
    store:
        image: screwdrivercd/store:stable
        ports:
            - 9002:80
        environment:
            ECOSYSTEM_UI: http://localhost:4200
            URI: http://172.142.26.99:9002

URI の値にIPアドレスを設定している場合、localhostECOSYSTEM_UIの値に設定することはできません。ログイン後に有効でないトークンを受け取ってしまいます。

このように変更したら、UI を http://localhost:4200 で実行するために、UI の README.md にある通りに実行します。

新しい変更を加えたら、SD-in-a-box を再実行します。

$ docker-compose -p screwdriver up
$ docker-compose build --no-cache
$ docker-compose -p screwdriver up

注意: Chrome を使用するとログインに問題が発生します。別のブラウザを使用してください。

APIの設定

APIのローカル開発インスタンスを使うように設定することが可能です。

関連する環境変数を設定することで高度な設定が可能です。詳しくはthe API documentationをご覧ください。

Storeの設定

ストアのローカル開発インスタンスを使うように設定することが可能です。

デフォルトではストアのポートは80に設定されています。この値を自由に変更することができます。このガイドでは8888に変更しています。

以下のスニペットはdocker-compose.ymlで変更すべき部分のハイライトです。ローカルのストアインスタンスを使用するためにSD-in-a-boxクラスタに合わせる必要があります。

version: '2'
services:
  store:
    . . .
    ports:
      - 8888:80    # Port 8888 is arbitrary. You can choose another if you prefer
    environment:
      URI: http://11.22.33.44:9001
      ECOSYSTEM_STORE: http://10.73.202.183:8888    # Tells the API where the store is hosted
    . . .