DevOpsSuite >

目次

インストール

by DockerCompose

  • info.pngDocker Hubのscrewdrivercd/screwdriverに詳しい説明がありますので、あらかじめご参照ください。
    • Screwdriverを動作させるには、screwdrivercd/screwdriver(APIサービス)、screwdrivercd/ui、screwdrivercd/storeの3つのイメージが必要となります。
    • 簡単にDockerCompose設定ファイルを生成させる方法として、以下のコマンドの実行が案内されています。URIはホストのIPアドレスでセットアップされます。
      $ python <(curl https://raw.githubusercontent.com/screwdriver-cd/screwdriver/master/in-a-box.py)
  • 以下のセットアップでは、筆者の作成したcake.pngscrewdriverクックブックを使用しています。
    • ロールは以下のものを用意しています。
      No.ロール説明
      1roles/screwdriver-on-docker.rbDBはビルトインのsqlite、Storeのバックエンドはon memory(揮発します)になります。
      計3つのコンテナ(api, store, ui)が起動します。
      2roles/screwdriver-all-on-docker.rbDBはMySQL、StoreのバックエンドはS3互換のMinio(不揮発)になります。
      計5つのコンテナ(api, store, ui, db, screwdriver.s3)が起動します。
    • デフォルトのサービスポートは以下の通りです。
      No.サービスホストポートコンテナポート主なサービスURL
      1UI900080http://#{node['fqdn']}:9000/
      2API900180http://#{node['fqdn']}:9001/v4/documentation
      3Store900280http://#{node['fqdn']}:9002/v4/documentation
      4MySQL-3306
      5Minio90109000http://#{node['fqdn']}:9010/minio
  1. 最も簡単なセットアップは、以下のように chef-client コマンドのローカルモードを利用した方法です。Dockerエンジンがセットアップされた後、Docker Composeがインストールされ、Screwdriverサービス用の docker-compose.yml ファイルが生成されます。
    1. chef-clientをインストールし、クックブックのソースを取得します。
      Ubuntu:$ sudo apt-get install ca-certificates curl git
      CentOS:$ sudo yum     install ca-certificates curl git
      $ curl -L https://omnitruck.chef.io/install.sh | sudo bash -s -- -v 13
      $ git clone git://git.osdn.net/gitroot/metasearch/grid-chef-repo.git
      $ cd grid-chef-repo/
    2. SCM*1のOAuth設定が必須ですので、あらかじめ目的のSCMのOAuth用IDとシークレットを取得*2の上、roles/screwdriver-on-docker-override.rb または roles/screwdriver-all-on-docker-override.rb をカスタマイズするか、設定ファイル生成後に /opt/docker-compose/app/screwdriver/config/api-local.yaml をカスタマイズします。
      1. apiサービスにおけるSCM関連の設定詳細については、Managing the APIをご参照ください。以下は、GitHub?の例です。
        1. override_attributes(
        2.   'screwdriver' => {
        3.     'api' => {
        4.       'scms' => {
        5.         'github.com' => {
        6.           'plugin' => 'github',
        7.           'config' => {
        8.             # OAuth Callback URL: "http://#{node['fqdn']}:9001/v4/auth/login"
        9.             # The client id used for OAuth with github.
        10.             # GitHub OAuth (https://developer.github.com/v3/oauth/)
        11.             'oauthClientId' => 'YOU-PROBABLY-WANT-SOMETHING-HERE',
        12.             # The client secret used for OAuth with github
        13.             'oauthClientSecret' => 'AGAIN-SOMETHING-HERE-IS-USEFUL',
        14.             # Secret to add to GitHub webhooks so that we can validate them
        15.             'secret' => 'SUPER-SECRET-SIGNING-THING',
        16.             'gheHost' => 'github.screwdriver.cd',  # [Optional] GitHub enterprise host
        17.             'username' => 'sd-buildbot',  # [Optional] Username for code checkout
        18.             'email' => 'dev-null@screwdriver.cd',  # [Optional] Email for code checkout
        19.             # [Optional] Set to true to support private repo; will need read and write
        20.             # access to public and private repos
        21.             # (https://developer.github.com/v3/oauth/#scopes)
        22.             'privateRepo' => false,
        23.           },
        24.         },
        25.       },
        26.     },
        27.     # ...
        28.   }
        29. )
      2. さらに注意点としては、SCM側に設定するコールバック(リダイレクト)URLについては以下のように正確に設定するのがよいでしょう。なぜならば、GitHub?のURLチェックは比較的緩やかですが、GitLabの場合にはより厳格にチェックされますので。
        http://#{node['fqdn']}:9001/v4/auth/login
      3. DEPRECATED: なお、個別環境変数(SCM_*)による設定は複数SCM対応のため現在では利用できない設定となっています。また、GitLabプラグインはユーザ提供プラグインのため、サポートされない旨が明記されています。
    3. このクックブックはデフォルトでDockerエンジンやDocker Composeのセットアップも行い、不用意に更新されないようにそのインストールバージョンを固定します。lightbulb.pngもし、それらがすでにインストール済みでこのクックブックでセットアップされたくない場合には、以下の skip_setup 属性を true にすることによりスキップすることができます。
      1. # ...
      2. override_attributes(
      3.   'docker-grid' => {
      4.     'engine' => {
      5.       #'skip_setup' => true,  # default: false
      6.       #'version_on_centos' => '17.12.1.ce-1',  # '18.06.0.ce-3', '18.03.1.ce-1'
      7.       #'version_on_ubuntu' => '17.12.1~ce-0',  # '18.06.0~ce~3-0', '18.03.1~ce-0'
      8.       #'storage-driver_on_centos' => 'overlay',   # defacto: 'devicemapper'
      9.       #'storage-driver_on_ubuntu' => 'overlay2',  # defacto: 'aufs'
      10.       'daemon_extra_options' => [
      11.         '-H fd://',
      12.         '--bip=192.168.100.1/24 --fixed-cidr=192.168.100.0/24',
      13.       ].join(' '),
      14.     },
      15.     'compose' => {
      16.       #'skip_setup' => true,  # default: false
      17.       'release_base_url' => 'https://github.com/docker/compose/releases/download/1.21.2',
      18.     },
      19.   },
      20.   'screwdriver' => {
      21.     'docker-compose' => {
      22.       'network_mode_bridge' => false,
      23.       # ...
      24.     },
      25.     # ...
      26.   },
      27. )
  2. Screwdriverサービス用の docker-compose.yml ファイルを生成させます。OAuth以外のDBやオブジェクトストレージの秘密情報は特に明示的に設定されない場合自動で生成されます。note.png初回の dry-run(-W)はdockerprojectのリポジトリが未設定のためDockerのパッケージインストールに失敗する場合があります。そのような場合には一度反映させ、dry-run は更新時にご利用ください。
    $ sudo chef-client -z -c $PWD/solo.rb -j $PWD/nodes/local-screwdriver-on-docker.json -W
    $ sudo chef-client -z -c $PWD/solo.rb -j $PWD/nodes/local-screwdriver-on-docker.json
    
    # または
    $ sudo chef-client -z -c $PWD/solo.rb -j $PWD/nodes/local-screwdriver-all-on-docker.json -W
    $ sudo chef-client -z -c $PWD/solo.rb -j $PWD/nodes/local-screwdriver-all-on-docker.json
  3. 各サービスを起動させる前に、launcher イメージをあらかじめpullしておくとよいでしょう。そうでない場合、イメージがないというエラーが発生する場合があります。
    $ sudo docker pull screwdrivercd/launcher:stable
  4. docker-composeコマンドでサービスを起動させます。
    • screwdriver-on-docker ロールの場合
      $ sudo docker-compose up -d
    • screwdriver-all-on-docker ロールの場合
      1. 初回のみまずDBサービスを起動させ、初期化の完了を確認します。
        $ cd /opt/docker-compose/app/screwdriver
        $ sudo docker-compose up -d db
        $ sudo docker-compose logs -f db
      2. なお、データベースには以下の要領でコマンドラインからアクセスできます。パスワードは、.env ファイルを参照してください。
        $ sudo docker-compose exec db bash
        root@508690b9dbc8:/# mysql -u sd-admin -p -D screwdriver 
        Enter password:
      3. 次に(こちらも初回のみ)Minioサービスを起動させ、WebUI(http://#{node['fqdn']}:9010/minio)またはCLIで screwdriver バケットを作成しておきます。アクセスキーとシークレットキーについては、.env ファイルを参照してください。
        $ sudo docker-compose up -d screwdriver.s3
      4. 残りのサービスを起動させ、APIおよびStoreサービスの動作に問題がないかログを確認します。2回目以降の起動は通常の起動方法(すべてのサービスを起動)で問題ありません。
        $ sudo docker-compose up -d
        $ sudo docker-compose logs api
        $ sudo docker-compose logs store

APIのバックエンドにMySQLを使用する場合

  1. docker-compose.yml(抜粋): 以下のような設定ファイルを用意します。
    1. ---
    2. version: '2'
    3. services:
    4.   api:
    5.     image: screwdrivercd/screwdriver:latest
    6.     ports:
    7.     - 9001:80
    8.     volumes:
    9.     - "/var/run/docker.sock:/var/run/docker.sock:rw"
    10.     - "/opt/docker-compose/app/screwdriver/config/api-local.yaml:/config/local.yaml:ro"
    11.     environment:
    12.       PORT: '80'
    13.       URI: http://screwdriver.io.example.com:9001
    14.       SECRET_WHITELIST: "[]"
    15.       SECRET_ADMINS: "[]"
    16.       DATASTORE_PLUGIN: sequelize
    17.       DATASTORE_SEQUELIZE_DATABASE: screwdriver
    18.       DATASTORE_SEQUELIZE_DIALECT: mysql
    19.       DATASTORE_SEQUELIZE_USERNAME: "sd-admin"
    20.       DATASTORE_SEQUELIZE_PASSWORD: "****************"
    21.       DATASTORE_SEQUELIZE_HOST: db
    22.       ECOSYSTEM_STORE: http://screwdriver.io.example.com:9002
    23.       ECOSYSTEM_UI: http://screwdriver.io.example.com:9000
    24.     links:
    25.     - db
    26.   # ...
    27.   db:
    28.     image: mysql:5
    29.     volumes:
    30.     - "/opt/docker-compose/app/screwdriver/data/mysql:/var/lib/mysql:rw"
    31.     environment:
    32.       MYSQL_DATABASE: screwdriver
    33.       MYSQL_USER: "sd-admin"
    34.       MYSQL_PASSWORD: "****************"
    35.       MYSQL_ROOT_PASSWORD: "****************"
  2. まずDBサービスを起動させ、初期化の完了を確認します。
    $ cd /opt/docker-compose/app/screwdriver
    $ sudo docker-compose up -d db
    $ sudo docker-compose logs -f db
  3. 残りのサービスを起動させ、APIサービスの動作に問題がないかログを確認します。
    $ sudo docker-compose up -d
    $ sudo docker-compose logs api

APIのバックエンドにPostgreSQLを使用する場合

  1. docker-compose.yml(抜粋): 以下のような設定ファイルを用意します。
    1. ---
    2. version: '2'
    3. services:
    4.   api:
    5.     image: screwdrivercd/screwdriver:latest
    6.     ports:
    7.     - 9001:80
    8.     volumes:
    9.     - "/var/run/docker.sock:/var/run/docker.sock:rw"
    10.     - "/opt/docker-compose/app/screwdriver/config/api-local.yaml:/config/local.yaml:ro"
    11.     environment:
    12.       PORT: '80'
    13.       URI: http://screwdriver.io.example.com:9001
    14.       SECRET_WHITELIST: "[]"
    15.       SECRET_ADMINS: "[]"
    16.       DATASTORE_PLUGIN: sequelize
    17.       DATASTORE_SEQUELIZE_DATABASE: screwdriver
    18.       DATASTORE_SEQUELIZE_DIALECT: postgres
    19.       DATASTORE_SEQUELIZE_USERNAME: "sd-admin"
    20.       DATASTORE_SEQUELIZE_PASSWORD: "****************"
    21.       DATASTORE_SEQUELIZE_HOST: db
    22.       ECOSYSTEM_STORE: http://screwdriver.io.example.com:9002
    23.       ECOSYSTEM_UI: http://screwdriver.io.example.com:9000
    24.     links:
    25.     - db
    26.   # ...
    27.   db:
    28.     image: postgres:9
    29.     volumes:
    30.     - "/opt/docker-compose/app/screwdriver/data//postgres:/database:rw"
    31.     environment:
    32.       POSTGRES_DB: screwdriver
    33.       POSTGRES_USER: "sd-admin"
    34.       POSTGRES_PASSWORD: "****************"
    35.       PGDATA: /database
  2. まずDBサービスを起動させ、初期化の完了を確認します。
    $ cd /opt/docker-compose/app/screwdriver
    $ sudo docker-compose up -d db
    $ sudo docker-compose logs -f db
  3. 残りのサービスを起動させ、APIサービスの動作に問題がないかログを確認します。
    $ sudo docker-compose up -d
    $ sudo docker-compose logs api

StoreのバックエンドにS3互換のMinio?を使用する場合

  • 設定のポイントは以下の2点です。
    1. エンドポイントURLについて、Minioはパス形式(たとえば、http://minio.example.com/<bucket>)のみをサポートしていますがScrewdriver(が利用しているcatbox-s3)は仮想ホスティング形式(たとえば、http://<bucket>.minio.example.com)のみをサポートしていますのでURLの調整が必要になります。
      • lightbulb.pngなお、catbox-s3 は aws-sdk パッケージを使用していますので、s3ForcePathStyle? オプションに true を指定すればパス形式が扱えますが、そのオプションを設定する口が catbox-s3 には用意されていません。info.png【追記】このオプションに対応するPR(#29)がマージされましたので、現在(screwdrivercd/store:v2.2.6以降)では S3_FORCE_PATH_STYLE 環境変数が設定可能です。
        1. const s3 = new aws.S3({
        2.   endpoint: 'http://minio.example.com:9000',
        3.   s3ForcePathStyle: true
        4. });
    2. Minioは、S3v4署名形式をサポートしています。
  1. docker-compose.yml(抜粋): 以下のような設定ファイルを用意します。
    1. ---
    2. version: '2'
    3. services:
    4. # ...
    5.   store:
    6.     image: screwdrivercd/store:latest
    7.     ports:
    8.     - 9002:80
    9.     environment:
    10.       PORT: '80'
    11.       URI: http://screwdriver.io.example.com:9002
    12.       ECOSYSTEM_UI: http://screwdriver.io.example.com:9000
    13.       STRATEGY: s3
    14.       # 当然ながら、Minioで設定したものと同じものを設定します
    15.       S3_ACCESS_KEY_ID: "********************"
    16.       S3_ACCESS_KEY_SECRET: "****************************************"
    17.       S3_REGION: 'us-east-1'
    18.       # 以下の設定により、実際のエンドポイントは http://screwdriver.s3:9000/screwdriver と構築されます
    19.       S3_BUCKET: screwdriver
    20.       S3_ENDPOINT: http://s3:9000/screwdriver
    21.       # パス形式を強制する場合、screwdrivercd/store:v2.2.6以降
    22.       #S3_FORCE_PATH_STYLE: 'true'
    23.       #S3_ENDPOINT: http://screwdriver.s3:9000
    24.       # 署名バージョンを v4 に
    25.       S3_SIG_VER: 'v4'
    26.     volumes:
    27.     - "/opt/docker-compose/app/screwdriver/config/store-local.yaml:/config/local.yaml:ro"
    28.     links:
    29.     - screwdriver.s3
    30.   # MinioサービスのホストはこのDNS名で解決されます
    31.   screwdriver.s3:
    32.     image: minio/minio
    33.     ports:
    34.     - 9010:9000  # 9000番ポートはScrewdriverで使用済ですのでずらします
    35.     command: "server /export"
    36.     volumes:
    37.     - "/opt/docker-compose/app/screwdriver/data/minio:/export:rw"
    38.     environment:
    39.       MINIO_ACCESS_KEY: "********************"
    40.       MINIO_SECRET_KEY: "****************************************"
  2. config/store-local.yaml(抜粋): 同様の設定を local.yaml で行う場合には以下のようにします(note.png署名バージョンは環境変数では設定できないようです。まだドキュメント化されていませんが、環境変数 S3_SIG_VER で設定できるようです*3)。この設定ファイルは、storeサービスの /config/local.yaml にマウントされ有効になります。
    1. ---
    2. # ...
    3. strategy:
    4.   plugin: s3
    5.   s3:
    6.     accessKeyId: "********************"
    7.     secretAccessKey: "****************************************"
    8.     region: 'us-east-1'
    9.     bucket: screwdriver
    10.     endpoint: http://s3:9000/screwdriver
    11.     # パス形式を強制する場合、screwdrivercd/store:v2.2.6以降
    12.     #forcePathStyle: 'true'
    13.     #endpoint: http://screwdriver.s3:9000
    14.     signatureVersion: v4
  3. まずMinioサービスを起動させ、WebUI(http://screwdriver.io.example.com:9010/minio)またはCLIで screwdriver バケットを作成しておきます。
    $ cd /opt/docker-compose/app/screwdriver
    $ sudo docker-compose up -d screwdriver.s3
  4. 残りのサービスを起動させ、Storeの動作に問題がないかログを確認します。
    $ sudo docker-compose up -d
    $ sudo docker-compose logs store

キューのバックエンドにRedis?を使用する場合

Coming Soon.

既知の制限

  1. Ability to use multiple scms #365: 複数のSCMには対応していない。グループやチームといった単位の管理機能がありませんので、マルチテナント利用もできません。現在は複数のSCMに対応していますが、そのため設定フォーマットが後方互換性を維持できなくなっていますので注意が必要です。
  2. Add TLS support to UI docker container #377: UIのDockerイメージはTLSを未サポート
  3. SSO Error "unable to verify the first certificate" #592: 自己署名証明書や内部CA発行証明書に対応できない。

独自CA発行TLS証明書の利用における障害

  1. 各サーバにルートCA証明書を導入する必要がありますが、コンテナイメージへの導入は煩雑なものになります。
    • Node.jsで実装されているサーバについては、環境変数 NODE_TLS_REJECT_UNAUTHORIZED0 を設定することにより証明書チェックをバイパスできますが、当然ながら推奨される設定ではありません。
  2. またビルドコンテナ内からもAPIサーバ等への通信が発生するため、ビルドコンテナにCA証明書を導入する必要もあります。これはさらに困難なものとなるでしょう。

既知の問題

  1. screwdrivercd/screwdriver(Image ID: 7b77035fd90c)
    1. GitHub?連携
      1. パイプライン作成はできましたが、Startさせてもウェイト状態(時計マーク)のままです。DNSやTLS関連設定が影響している可能性があります。
    2. GitLab(CE)連携(note.png正式にサポートされていません
      1. ログインは問題ないようですが、(リポジトリの管理者権限がないというエラーで)パイプラインの作成ができないようです。ドキュメントにもGitLabサポートの記述はありませんのでまだ動作しないのかもしれません。

旧設定覚え書き

個別環境変数によるSCM設定

  • DEPRECATED: 以下は環境変数によるGitLab設定の例ですが、複数SCM対応のため現在では利用できない設定となっています。また、GitLabプラグインはユーザ提供プラグインのため、サポートされない旨が明記されています。
    No.環境変数値の例備考
    1SCM_PLUGIN'gitlab'
    2SCM_USERNAME'sd-buildbot'
    3SCM_EMAIL'sd-buildbot@mail.example.com'
    4SECRET_OAUTH_CLIENT_ID'************ ...'SCMで取得したID
    5SECRET_OAUTH_CLIENT_SECRET'************ ...'SCMで取得したシークレット
    6SCM_GITLAB_HOST'gitlab.io.example.com'gitlab.com ではなくオンプレミスの場合に必要
    7SCM_GITLAB_PROTOCOL'https'当然ながらhttpsが推奨
    8NODE_TLS_REJECT_UNAUTHORIZED'0'非推奨だが、オンプレミスで内部CA発行の証明書や自己署名証明書を使用している場合の回避策

関連コンポーネント

参考リソース


*1 github、gitlab、bitbucketのいずれか
*2 GitHub?の場合には https://github.com/settings/developers に、BitBucket?の場合には https://bitbucket.org/account/user/<name>/api にそれぞれアクセスして取得します。
*3 https://github.com/screwdriver-cd/store/commit/ca368df2a25f96bc7dd74227604b8b1c2c6d3039

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-08-20 (月) 16:23:30 (111d)