どこに貢献するか
Screwdriver はモジュールアーキテクチャを採用しているので、様々な機能がリポジトリに分割されています。
Screwdriver を使用した継続的デリバリーのワークフロー全体を理解するために、 architecture diagram を確認してください。次節以降の説明が、どこにどんなコードがあるのかを特定するのに役立つでしょう。
Screwdriver API
screwdriver リポジトリは screwdriver の核となる API エンドポイントを提供しているリポジトリです。API は hapijs framework をベースにしており、数々のプラグインとして実装されています。
-
Build bookends で、ユーザはビルドの setup や teardown のステップを作成できます。
-
API はユーザに通知も送れます。notifications-base は Screwdriver と email notifications や slack notifications といった通知プラグインの間のやりとりを定義するためのベースとなるクラスです。
-
API はコードカバレッジのレポートやテスト結果をアップロードすることもできます。coverage-bookend で Screwdriver と coverage bookends の間の関係が定義されています。coverage-base は、Screwdriver と coverage-sonar といった coverage bookend プラグインの間のやりとりを定義するためのベースとなるクラスです。
Models
オブジェクトモデルにより、データストア(データベース)へ保存されるデータの定義がされています。これは2つの部分からなります。
- data-schema: Joi で定義されたスキーマ
- models: データスキーマ周りのビジネスロジックを定義
Datastores
API と データストレージの間のインターフェースとして実装されています。nodejs で書かれたいくつかの実装があります。
- datastore-base: datastore の実装のためのインターフェースを定義するベースクラス
- datastore-sequelize: MySQL, PostgreSQL, SQLite3, MS SQL の実装
Source Code Management
SCM の実装は API と SCM の間のインターフェースとして使用されます。nodejs で書かれたいくつかの実装があります。
- scm-base: 共通のインターフェース
- scm-bitbucket: Bitbucket.org の実装
- scm-github: GitHub の実装
- scm-gitlab: GitLab の実装
- sd-repo: scm-githubの
getCheckoutCommand
のRepo workflowを実行するGoベースのツール
scm-router は、指定されたscmにビルドをルーティングする汎用のscmプラグインです。
Notifications
APIは、ユーザーに通知を送ることもできます。
- notifications-base: Screwdriverと通知プラグイン間の動作を定義するベースクラス
- notifications-email: Email通知の実装
- notifications-slack: Slack通知の実装
Parsers
Parsersは、Screwdriverの様々なフローを検証し、解析するのに役立ちます。
- config-parser: ユーザーの
screwdriver.yaml
を検証、解析するnode module - workflow-parser: パイプラインの設定を解析してワークフローグラフに変換するnode module
Templates and Commands
テンプレートは、事前に定義することで screwdriver.yaml
内でジョブの定義を置き換えることの出来るコードスニペットです。テンプレートは、一連の定義されたステップとそれが実行される Docker イメージを含んでいます。
- templates: 全てのビルドテンプレートのリポジトリ
- template-main: ジョブテンプレートの validate や publish のための CLI
- template-validator: API によってジョブテンプレートを validate するのに使われるツール
- tmpl-semantic-release: NPMベースのモジュールのセマンティックリリースを実行するテンプレート
コマンドとは、あらかじめ定義されたコードの断片で、screwdriver.yaml
のステップ定義を置き換えるために使用できます。コマンドにはすでに定義したコマンドを含めることができます。
- command-validator: APIがコマンドを検証するために使用するツール
- cmd-install-node: nvmを使ってnode.jsをインストールする共有コマンド
- cmd-docker-trigger: masterと指定されたタグのDockerビルドをトリガーするための共有コマンド
- junit-reports: Junitレポートを解析するための共有コマンド
Launcher
launcher はステップの実行や、ビルドコンテナ内部の管理を行います。Go で書かれており、ビルドコンテナにバイナリとしてマウントされます。
- sd-cmd: Screwdriver のビルド中に、バージョン管理されたコマンド (バイナリ、docker イメージ、habitat パッケージ)を実行するための単一のインターフェースを提供する Go ベースの CLI。
- sd-packages: skopeo, zstd, その他カスタムバイナリを、Launcher用にビルド, パッケージ化, publishする
- sd-step: ビルド環境によらず、同じパッケージで同じコマンドを使えるようにする Shared Step。
- meta-cli: metadata から情報を読み書きするための Go ベースの CLI。
Queue
queue-service は、Screwdriverがビルドをエンキューして処理するための、可用性の高いRESTベースのキューサービスです。 これは、Resqueを利用して、キューイングメカニズムを提供します。
- buildcluster-queue-worker: Rabbitmqのキューからジョブを取り出すamqpコネクションマネージャの実装
Executors
Executor は、全ての与えられたジョブについてビルドコンテナを管理するのに使用されます。いくつかの executor が実装されていて、共通のインターフェースに従うように設計されています。Executor の実装は node で書かれています。
- executor-base: 共通のインターフェース
- executor-docker: Docker の実装
- executor-j5s: Jenkins の実装
- executor-k8s: Kubernetes の実装
- executor-nomad: Nomad の実装
executor-queue は、Redisのキューを介してビルドをルーティングするための汎用 executor です。 executor router は、ビルドを特定の executor へルートするための汎用 executor です。
Artifacts
Artifact Store (上記のデータストアと混同しないよう注意) はログの出力や、shared step、テンプレート、テストカバレッジやその他ビルド中に生成された artifacts を保存するために使用されます。
- artifact-bookend: artifacts を store へアップロードするブックエンド
- cache-bookend: ビルドキャッシュのアップロードとダウンロードのためのブックエンド
- log service: Launcher からログを読み取り、 store へアップロードする Go のツール
- store-cli: Screwdriverのストアと通信するためのGoベースのCLI
UI
Ember ベースの Screwdriver のユーザインターフェースです。
Guide and Homepage
Guide はドキュメントです!Screwdriver について知りたいことが全てあります。 Homepage は Screwdriver.cd を動かすためのものです。 Community は オープンソースコミュニティの議事録やドキュメントが保管される場所です。
Miscellaneous Tools
Bootstrap SD
Screwdriverを使い始める際に役立つリポジトリです。
- aws-build-cluster: AWS上でScrewdriverがクラスタを構築する際に必要なEKSクラスタとリソースをプロビジョニングするためにクイックスタートツール
- hyperctl-image: hyperctlとk8s-vmのスクリプトを含む最小限のDockerイメージを作成する(screwdriver-chartで使用)
- in-a-box: Screwdriverインスタンス全体(UI, API, ログストア)をローカルに立ち上げるPythonベースの実行ファイル
- screwdriver-chart: Screwdriverエコシステム全体と、nginx ingressコントローラをブートストラップする
- sd-local: 多くの機能を備えた、手元でScrewdriverを動かすことのできるGoベースのツール
- sonar-pipeline: SonarQubeサーバをKubernetesにデプロイするパイプライン
Other
- circuit-fuses: callback インターフェースを使用した node-circuitbreaker を提供するインターフェース
- gitversion: 新しいバージョンでリポジトリの git tags を更新する Go ベースのツール
- keymbinatorial: キーの配列から単一の値を取得してキーの値の一意な組み合わせを生成します
- logger: Screwdriverコンポーネント共通のロギングプロバイダー
- noop-container: ビルドを実行するのに最小構成のDockerコンテナ
- raptor: Screwdriver APIのテストスクリプトの読み込み
- sd-housekeeping: buld pipeline validatorなどのハウスキープに関わるスクリプト
- toolbox: Screwdrive に関連したスクリプトやその他のツールのリポジトリ
新規に Screwdriver のリポジトリを作成する
Screwdriver のリポジトリを新しく作成する際の手助けとなるツールもいくつかあります。
- generator-screwdriver: screwdriver の新しいリポジトリを作成する際の Yeoman generator
- eslint-config-screwdriver: node ベースのコードのための ESLint のルール。bootstrap のプロセスの一部として、どの新しいリポジトリにも含まれてます。
新しいリポジトリを作成したら、他の人が追加したリポジトリがどこに該当するか分かるようにこのページを編集してください。
テストと例
screwdriver-cd-test には多くのサンプルリポジトリ/screwdriver.yaml と Screwdriver.cd の acceptance test があります。