- ブランチとタグの保護
- リポジトリ間のミラーリング
- パイプラインの種類
-
CIジョブ
-
開発者のジョブ
danger-review
rubocop
docs-lint
review-docs-deploy
review-docs-cleanup
<OS_NAME> knapsack
<OS_NAME> specs
update-knapsack
Trigger:ce-package
Trigger:ee-package
fetch-assets
Trigger:package
Trigger:gitlab-docker
Trigger:qa-docker
Trigger:qa-test
Trigger:ha-validate
Trigger:measure-memory
<OS_NAME>-branch
Docker-branch
QA-branch
Docker-branch-measure-memory
-
開発者のジョブ
- リリース・ジョブ
- ハウスキーピングのジョブ
リポジトリ、ブランチ、CIパイプライン
omnibus-gitlab
CIパイプラインは中々複雑で、パイプラインはプロジェクトの全てのミラーに分かれています:
- 通常の機能開発用の開発者リポジトリ。
- リリースのアーティファクトをビルドするためのリリースミラー。
- セキュリティ開発のためのセキュリティミラー。
- 開発者がパッケージのビルドと開発目的のQAを実行するためのQAミラー。
ブランチとタグの保護
保護ブランチ
- 開発者リポジトリ
-
master
メンテナー、デリバリーチーム -
*-stable
デリバリーチーム、リリースマネージャー -
*-stable-ee
デリバリーチーム、リリースマネージャー -
*-auto-deploy-*
: メンテナー,delivery
グループ,managers
グループ
-
- リリースミラー
-
master
メンテナー -
*-stable
メンテナー -
*-stable-ee
メンテナー -
*-auto-deploy-*
メンテナー
-
- セキュリティミラー:
-
master
GitLab Release Tools Bot,GitLab Bot,デリバリーチーム,リリースマネージャー -
*-stable
GitLab Release Tools Bot,GitLab Bot,デリバリーチーム,リリースマネージャー -
*-stable-ee
GitLab Release Tools Bot,GitLab Bot,デリバリーチーム,リリースマネージャー -
*-auto-deploy-*
GitLab Release Tools Bot,GitLab Bot,デリバリーチーム,リリースマネージャー
-
- QAミラー:
-
master
開発者(マージのみ)、メンテナー
-
master
ブランチにアクセスできます。これは、ブランチに対してトリガーパイプラインを実行するために必要だからです。 この状況を変更するためのイシューがmaster
オープンmaster
されています。保護されたタグ
- 開発者リポジトリ:
-
*
メンテナー、デリバリーチーム、リリースマネージャー
-
- リリースミラー
-
*
メンテナー
-
-
セキュリティミラー:なし
- QAミラー:なし
リポジトリ間のミラーリング
ほとんどの開発はDevelopmentリポジトリで行われ、セキュリティ関連の変更はSecurity ミラーに送られます。 これらの変更は、Release ミラーとQA ミラーにミラーされます。 次の図は、それぞれのリポジトリ間でミラーされる内容を示しています。
パイプラインの種類
ブランチパイプライン
omnibus-gitlab
そのため、ブランチプッシュによるパイプラインがこのプロジェクトでよく使われるパイプラインです。 これらのパイプラインは、開発者リポジトリ、セキュリティミラー、リリースミラーで使われます。
タグパイプライン
Release ミラーへのタグプッシュは、リリースジョブによるパイプラインを開始します。Development リポジトリと Securityミラーへのタグプッシュは、(package-and-qa パイプラインを開始するオプションがないことを除いて) 通常のブランチプッシュと同じように振る舞い、基本的な文体チェックとユニットテストを実行します。
予定パイプライン
開発者リポジトリには、2つのスケジュールされたパイプラインがあります。
-
Dependencies Update
-dependency_update
ジョブを使用して古い依存関係をチェックするパイプライン。 -
Generate license pages
-ライセンスコレクションのウェブページにS3バケットからのライセンス情報を入力するパイプラインです。
リリースミラーでは、2つのパイプラインが予定されています。
-
CE nightly
- GitLab CE用のナイトリーパッケージとDockerイメージをビルドするパイプライン -
EE nightly
- GitLab EE用のナイトリーパッケージとDockerイメージをビルドするパイプライン
その他のミラーにはパイプラインの予定はありません。
パイプラインの自動デプロイ
GitLab はリリースプロセスでAuto deployブランチとタグを使います。これらのブランチは<MAJOR>-<MINOR>-auto-deploy-<TIMESTAMP>
という名前で、タグは<MAJOR>.<MINOR>.<TIMESTAMP>+<gitlab sha>.<omnibus-gitlab sha>
というフォーマットです。
変更をGitLab環境にデプロイするために必要な特定のジョブだけが、このパイプラインの一部となります。
トリガーパイプライン
私たちは、QAミラーで“package-and-qa “パイプラインを実行するためにトリガーパイプラインを使用しています。 これらは、開発者リポジトリまたはGitLabプロジェクトのパイプラインからトリガーすることができます。
このパイプラインは、これらのアーティファクトに対して自動的にQAを実行することに加えて、開発者にパッケージとイメージを与えて変更をテストすることを意図しています。 また、これらのアーティファクトを使ってスピンアップしたHAインスタンスに対してQAを実行するオプションや、Dockerイメージを使用してGitLabによるリソースの使用量を測定するためのメモリ測定ジョブを実行するオプションも提供します。
CIジョブ
開発者のジョブ
danger-review
このジョブはマージリクエストに対してチェックを実行し、Dangerツールを使用していくつかの基本的な要件を満たしていることを確認します。
このジョブは開発者リポジトリとブランチとタグパイプラインのセキュリティミラーでのみ実行されます。
rubocop
特定のスタイル要件を満たすソースコードファイルをチェックします。
このジョブは開発者リポジトリとブランチとタグパイプラインのセキュリティミラーでのみ実行されます。
docs-lint
特定の文体要件を満たすためにdocsファイルをチェックしてください。
このジョブは開発者リポジトリとブランチとタグパイプラインのセキュリティミラーでのみ実行されます。
review-docs-deploy
gitlab-docs
の docs build をトリガーする手動ジョブ。現在のコミットからの変更点を含む GitLab Docs 用のレビューアプリをデプロイします。
このジョブはブランチパイプライン上の開発者リポジトリでのみ実行されます。
review-docs-cleanup
review-docs-deploy
によって作成された環境を停止する手動ジョブです。 マージリクエストのマージ時に自動的に実行されます。
このジョブはブランチパイプライン上の開発者リポジトリでのみ実行されます。
<OS_NAME> knapsack
私たちはRSpec
とChefspec
を使って Chef レシピとライブラリを網羅するテストを行っています。 これらはknapsackの助けを借りて Parallels されています。
このジョブは、過去のパイプライン実行のナップサック・レポートをキャッシュから取り込み、現在のスペック実行に適した状態にします。
これらのジョブは開発者リポジトリとブランチとタグパイプラインのセキュリティミラーでのみ実行されます。
<OS_NAME> specs
実際に実行されるジョブrspec
knapsack
経由 .parralel
キーワードを使用してカウント6まで並列化されたジョブ。
これらのジョブは開発者リポジトリとブランチとタグパイプラインのセキュリティミラーでのみ実行されます。
update-knapsack
このジョブは、ユニットテストの個々の並列実行からのレポーターを結合し、最終的な JSON レポートを作成します。 このレポートは、MR ウィジェットで仕様のステータスを表示するために使用され、また、次のパイプライン実行で使用するためにキャッシュにアップロードされます。
このジョブは開発者リポジトリとブランチとタグパイプラインのセキュリティミラーでのみ実行されます。
Trigger:ce-package
これは手動ジョブで、このジョブを実行すると、QA ミラーのパイプラインが起動し、開発用のパッケージのビルドと QA を実行します。 これは開発者がテスト用のパッケージや Docker イメージを取得したり、MR の変更に対して完全な QA スイートを実行するために使用できます。
このジョブはブランチパイプライン上の開発者リポジトリとセキュリティミラーでのみ実行されます。
Trigger:ee-package
Trigger:ce-package
と同じですが、EEパッケージを構築します。
このジョブはブランチパイプライン上の開発者リポジトリとセキュリティミラーでのみ実行されます。
fetch-assets
パッケージのビルドには、GitLabまたはGitLab-FOSSパイプラインによってすでにコンパイルされているRailsアセットを利用します。 これらのパイプラインはDockerイメージとしてプッシュしてくるので、ここでそれを取り込み、アセット自体をあらかじめ定義された場所にコピーします。
このジョブはブランチ、タグ、トリガーパイプライン上のリリースミラーと QAミラーでのみ実行されます。
Trigger:package
このジョブはアーティファクトとして利用できるパッケージを1つビルドします。
このジョブはトリガーされたパイプライン上のQA ミラーでのみ実行されます。
Trigger:gitlab-docker
このジョブはTrigger:package
ジョブによってビルドされたパッケージを使用して GitLab Docker イメージをビルドします。
このジョブはトリガーされたパイプライン上のQA ミラーでのみ実行されます。
Trigger:qa-docker
このジョブはRailsコードベースのqaディレクトリからGitLab QA Dockerイメージをビルドします。 このQAイメージはQAの実行に使用されます。
このジョブはトリガーされたパイプライン上のQA ミラーでのみ実行されます。
Trigger:qa-test
このジョブはGitLab QA Mirrorのパイプラインを起動し、Trigger:gitlab-docker
ジョブによって作成されたGitLab Dockerイメージと、Trigger:qa-docker
ジョブによってビルドされたGitLab QA Dockerイメージを渡します。
このジョブはトリガーされたパイプライン上のQA ミラーでのみ実行されます。
Trigger:ha-validate
この手動ジョブは、Trigger:package
ジョブによってビルドされたパッケージへの URL を渡すGitLab Provisionerプロジェクトのパイプラインをトリガーし、そのパッケージを使用して Terraform で HA インスタンスをスピンアップし、それに対して QA を実行します。
このジョブはトリガーされたパイプライン上のQA ミラーでのみ実行されます。
Trigger:measure-memory
この手動ジョブはGitLab Dockerイメージを使ってDockerコンテナを起動し、その中のメモリ使用量を計測し、詳細をアーティファクトとして保存します。
このジョブはトリガーされたパイプライン上のQA ミラーでのみ実行されます。
<OS_NAME>-branch
これらのジョブは、指定されたOS用のパッケージをビルドし、アーティファクトとして利用可能にするだけでなく、結果のパッケージをS3バケットにプッシュします。
このジョブはブランチと夜間パイプラインのReleaseミラーでのみ実行されます。
NOTE
Raspberry Pi のジョブは CE ブランチでのみ実行され、SLES のジョブは EE ブランチでのみ実行されます。
Docker-branch
このジョブは、Ubuntu 16.04ブランチのジョブでビルドしたパッケージを使用してGitLab Dockerイメージをビルドします。 イメージはGitLabコンテナレジストリにプッシュされます。
このジョブはブランチと夜間パイプラインのReleaseミラーでのみ実行されます。
QA-branch
このジョブはRailsコードベースのqaディレクトリからGitLab QA Dockerイメージをビルドします。
このジョブはブランチと夜間パイプラインのReleaseミラーでのみ実行されます。
Docker-branch-measure-memory
この手動ジョブはGitLab Dockerイメージを使ってDockerコンテナを起動し、その中のメモリ使用量を計測し、詳細をアーティファクトとして保存します。
このジョブはブランチと夜間パイプラインのReleaseミラーでのみ実行されます。
リリース・ジョブ
<OS_NAME>
これらのジョブは、指定されたOS用のパッケージをビルドし、アーティファクトとして利用可能にするだけでなく、結果のパッケージをS3バケットにプッシュします。
このジョブはタグパイプラインのリリースミラーでのみ実行されます。
<OS_NAME>-staging
これらのジョブは、前のジョブでビルドされたパッケージをPackagecloudインスタンスの内部ステージングリポジトリにアップロードします。
このジョブはタグパイプラインのリリースミラーでのみ実行されます。
<OS_NAME>-release
これらのジョブは、内部ステージングリポジトリからPackagecloudインスタンスの公開リポジトリにパッケージをプルします。
このジョブはタグパイプラインのリリースミラーでのみ実行されます。
Docker
このジョブは、Ubuntu 16.04ブランチジョブでビルドしたパッケージを使用してGitLab Dockerイメージをビルドします。 イメージはGitLabコンテナレジストリ内部にプッシュされます。
このジョブはタグパイプラインのリリースミラーでのみ実行されます。
Docker-Release
このジョブはGitLab内部のコンテナレジストリからGitLab Dockerイメージを取得し、Dockerhubにプッシュします。
このジョブはタグパイプラインのリリースミラーでのみ実行されます。
Docker-QA
このジョブはRailsコードベースのqaディレクトリからGitLab QA Dockerイメージをビルドし、GitLab内部のコンテナレジストリにプッシュします。
このジョブはリリースミラーとタグパイプラインでのみ実行されます。
QA-Tag
このジョブはGitLab内部のコンテナレジストリからGitLab QA Dockerイメージを取得し、Dockerhubにプッシュします。
このジョブはリリースミラーとタグパイプラインでのみ実行されます。
AWS
このジョブは、Ubuntu 16.04パッケージを使用してライセンスされていないAWS AMIをビルドします。
このジョブはリリースミラーとタグパイプラインでのみ実行されます。
AWS-Ultimate
このジョブはUbuntu 16.04パッケージを使用してUltimateライセンスを組み込んだAWS AMIを構築します。
このジョブはReleaseミラーとEEタグパイプラインでのみ実行されます。
AWS-Premium
このジョブは、Ubuntu 16.04パッケージを使用してPremiumライセンスを組み込んだAWS AMIを構築します。
このジョブはReleaseミラーとEEタグパイプラインでのみ実行されます。
AWS-CE-Release
このジョブは、AWS Marketplace の GitLab Community Edition のリストを現在のバージョンで更新します。
このジョブはリリースミラーとCEタグパイプラインでのみ実行されます。
AWS-Ultimate-Release
このジョブはAWS MarketplaceのGitLab Ultimateのリストを現在のバージョンで更新します。
このジョブはReleaseミラーとEEタグパイプラインでのみ実行されます。
AWS-Premium-Release
このジョブはAWS MarketplaceのGitLab Premiumのリストを現在のバージョンで更新します。
このジョブはReleaseミラーとEEタグパイプラインでのみ実行されます。
create_omnibus_manifest
このジョブはdependency_scanning
ジョブが使用するversion-manifest.json
ファイルを作成します。
このジョブはReleaseミラー上、タグパイプライン、ナイトリーパイプラインでのみ実行されます。
dependency_scanning
このジョブは、パッケージの全コンポーネントに対して依存性スキャンを実行し、既知の脆弱性があるかどうかをチェックします。
このジョブはReleaseミラー上、タグパイプライン、ナイトリーパイプラインでのみ実行されます。
HA-Validate-Tagged
このジョブはGitLabProvisionerプロジェクトのパイプラインをトリガーし、このパイプラインでビルドされたUbuntu 16.04パッケージのURLを渡し、そのパッケージを使用してTerraformでHAインスタンスをスピンアップし、それに対してQAを実行します。
このジョブはタグパイプラインのリリースミラーでのみ実行されます。
Docker-measure-memory
このジョブはGitLab Dockerイメージを使ってDockerコンテナをスピンアップし、その中のメモリ使用量を計測し、詳細をアーティファクトとして保存します。
このジョブはタグパイプラインのリリースミラーでのみ実行されます。
license-upload
このジョブはパッケージからすべての依存関係のライセンス情報をコンパイルし、S3バケットにアップロードします。これはDevelopmentリポジトリでpages
スケジュールジョブによって使用され、License collectionウェブページに入力されます。
ハウスキーピングのジョブ
dependency_update
このジョブはDependencies.ioを利用して、パッケージに含まれる様々なコンポーネントのバージョン更新を自動的にチェックし、更新が見つかった場合はDevelopmentリポジトリに対してマージリクエストを開きます。
このジョブは、DEPS_PIPELINE
変数が存在する場合、スケジュールされたパイプライン上で、開発者リポジトリでのみ実行されます。
dependencies_io_check
このジョブは、dependency_update
ジョブからマージリクエストがなされたときに、(Trigger:ce-package
ジョブに似た)QA ミラーのpackage-and-qa パイプラインを自動的に起動します。
このジョブは、ブランチ名がdeps
で始まる場合、Development リポジトリでのみ実行されます (dependency_update
ジョブがマージリクエストに使うフォーマットです)。
valdiate_packer_changes
このジョブは Packerの設定ファイルが有効かどうかをチェックします。
このジョブは開発者リポジトリとセキュリティミラー上で、Packerの設定ファイルが変更された場合にのみ実行されます。
pages
このジョブはGitLab Pagesに関連し、GitLabの各リリースのパッケージに含まれる様々なコンテナのライセンス情報を含む静的なウェブサイトを生成します。
このジョブはDevelopmentリポジトリと、DEPS_PIPELINE
変数を持たないスケジュールされたパイプラインでのみ実行されます(dependency_update
実行と区別するため)。