Omnibus GitLab リリースプロセス
私たちの主な目標は、オムニバスパッケージに含まれるGitLabのバージョンを明確にすることです。
公式Omnibus GitLabパッケージの構築方法
公式パッケージのビルドはGitLab Inc.によって完全に自動化されています。
ビルドには2つのタイプがあります:
- https://packages.gitlab.com へのリリース用パッケージ。
- S3バケットで利用可能なブランチからビルドされたテストパッケージ。
どちらのタイプも同じインフラストラクチャ上に構築されます。
インフラストラクチャー
各パッケージは、対象となるプラットフォーム上でビルドされます (CentOS 6 パッケージは CentOS6 サーバ上でビルドされ、Debian 8 パッケージは Debian 8 サーバ上でビルドされます)。ビルドサーバの数は様々ですが、プラットフォームごとに少なくとも1つのビルドサーバがあります。
Omnibus GitLab プロジェクトは GitLab CI を完全に利用しています。つまり、Omnibus GitLabリポジトリにプッシュするたびにGitLab CIでビルドが開始され、パッケージが作成されます。
OmnibusのGitLabパッケージを使ってGitLab.comをデプロイしているため、GitLab.comに問題が発生した場合やパッケージのセキュリティリリースに備えて、パッケージをビルドするための別のリモートが必要です。
このリモートはhttps://dev.gitlab.org/ にあります。https://dev.gitlab.org/ 上の Omnibus GitLab プロジェクトと他の公開リモートの唯一の違いは、プロジェクトがアクティブな GitLab CI を持っていて、ビルドサーバ上で実行されるプロジェクトに割り当てられた特定の Runner を持っていることです。これは全てのGitLabコンポーネントについても同様です。例えば、GitLab Shellはhttps://dev.gitlab.org/ 、GitLab.comと全く同じです。
全てのビルドサーバーはGitLab Runnerを実行し、全てのランナーはhttps://dev.gitlab.org/ 上のプロジェクトに接続するためにデプロイキーを使用します。ビルドサーバはhttps://packages.gitlab.com にある公式パッケージリポジトリと、テストパッケージを保存する特別な Amazon S3 バケットにもアクセスできます。
ビルドプロセス
GitLab Incはrelease-toolsプロジェクトを使ってリリースごとのリリース作業を自動化しています。リリースマネージャがリリースプロセスを開始すると、Omnibus GitLabにとって重要なことがいくつか行われます:
- プロジェクトのすべてのリモートが同期されます。
- コンポーネントのバージョンはGitLab CE/EE リポジトリ(例:
VERSION
,GITLAB_SHELL_VERSION
)から読み込まれ、Omnibus GitLab リポジトリに書き込まれます。 - 特定のGitタグが作成され、Omnibus GitLabリポジトリに同期されます。
https://dev.gitlab.org/ 上の Omnibus GitLab リポジトリが更新されると、GitLab CI ビルドがトリガーされます。
具体的な手順は、Omnibus GitLabリポジトリの.gitlab-ci.yml
。ビルドはすべてのプラットフォームで同時に実行されます。
ビルド中、Omnibus GitLabは外部のライブラリをソースからプルし、GitLab、GitLab Shell、GitLab WorkhorseなどのGitLabコンポーネントはhttps://dev.gitlab.org/ 。
ビルドが完了し、.debまたは.rpmパッケージがビルドされると、ビルドの種類に応じてパッケージはhttps://packages.gitlab.com 、または一時的な(30日以上前のファイルはパージされる)S3バケットにプッシュされます。
コンポーネントのバージョンを手動で指定する場合
開発者マシンで
- パッケージ化するGitLabのタグを選んでください(例:
v6.6.0
)。 - Omnibus GitLab リポジトリにリリースブランチを作成します (例:
6-6-stable
)。 -
パッチリリースなどですでにリリースブランチが存在する場合は、最新の変更をローカルマシンにプルしてください:
git pull https://gitlab.com/gitlab-org/omnibus-gitlab.git 6-6-stable # existing release branch
-
ファイルのリビジョンを
config/software/
に設定するには、support/set-revisions
を使用します。タグ名を受け取り、Git SHA1 を検索して、ダウンロード・ソースをhttps://dev.gitlab.org/ に設定します。EE リリースにはset-revisions --ee
を使用します:# usage: set-revisions [--ee] GITLAB_RAILS_REF GITLAB_SHELL_REF GITALY_REF GITLAB_ELASTICSEARCH_INDEXER_REF # For GitLab CE: support/set-revisions v1.2.3 v1.2.3 1.2.3 1.2.3 1.2.3 # For GitLab EE: support/set-revisions --ee v1.2.3-ee v1.2.3 1.2.3 1.2.3 1.2.3
-
新しいバージョンをリリース・ブランチにコミットします:
git add VERSION GITLAB_SHELL_VERSION GITALY_SERVER_VERSION git commit
-
GitLab タグに対応する注釈付きタグを Omnibus GitLab に作成します。オムニバスのタグは以下のようになります:
MAJOR.MINOR.PATCH+OTHER.OMNIBUS_RELEASE
MAJOR.MINOR.PATCH
は GitLab のバージョン、OTHER
はce
、ee
、rc1
(またはrc1.ee
)のようなもの、OMNIBUS_RELEASE
は(0 から始まる)数字です:git tag -a 6.6.0+ce.0 -m 'Pin GitLab to v6.6.0'
ハイフン-
は、Omnibus GitLabタグのどこにも使わないでください。アップストリームタグをオムニバスタグに変換する例:
アップストリームタグ オムニバスタグ配列 v7.10.4
7.10.4+ce.0
,7.10.4+ce.1
、...
v7.10.4-ee
7.10.4+ee.0
,7.10.4+ee.1
、...
v7.11.0.rc1-ee
7.11.0+rc1.ee.0
,7.11.0+rc1.ee.1
、...
-
ブランチとタグをhttps://gitlab.com とhttps://dev.gitlab.org/ の両方にプッシュします:
git push git@gitlab.com:gitlab-org/omnibus-gitlab.git 6-6-stable 6.6.0+ce.0 git push git@dev.gitlab.org:gitlab/omnibus-gitlab.git 6-6-stable 6.6.0+ce.0
注釈付きタグをhttps://dev.gitlab.org/ にプッシュすると、パッケージがリリースされます。
パッケージの公開
https://dev.gitlab.org/gitlab/omnibus-gitlab/buildsでパッケージビルドの進捗を追跡できます。パッケージはビルドに成功すると自動的にpackagecloudリポジトリにプッシュされます。
クラウドイメージの更新
クラウドイメージのリリースプロセスはhttps://about.gitlab.com/handbook/alliances/cloud-images/に記載されています。
新しいイメージは以下のタイミングでリリースされます:
- GitLabの新しい月次リリースがあるとき。
- パッチリリースでセキュリティ脆弱性が修正されました。
- 画像に影響する重大なイシューを修正するパッチがあります。
新しいイメージは、パッケージリリースから3営業日以内にリリースされるべきです。
イメージ固有のリリース文書:
- (Deprecated)OpenShift.