- インフラストラクチャー
- 公開
registry.gitlab.com/gitlab-org/ci-cd/tests/liveness
- 特定の Windows バージョンをサポートするために GitLab Runner を更新します。
Windows 版の Docker Executor サポートの追加
GitLabはWindowsの特定のバージョンをサポートしています。
Dockerエクゼキューターに新しいWindowsバージョンのサポートを追加するには、同じWindowsバージョンのヘルパーイメージをリリースする必要があります。その後、WindowsホストOS上でヘルパーイメージを実行することができます。
WindowsではホストOSとコンテナOSのバージョンが一致する必要があるため、そのバージョンのヘルパーイメージをビルドするには、そのWindowsバージョンにインストールされたGitLab Runnerが必要です。
インフラストラクチャー
ユーザーのジョブで使用するために、ヘルパーイメージを構築する必要があります。
インフラストラクチャが使用するベースイメージを作成します
Windows ではホスト OS のバージョンとコンテナ OS のバージョンを一致させる必要があるため、Windows Server Core 2004
イメージを構築する場合はgitlab-runner
をWindows Server Core 2004
にインストールする必要があります。
そのためには、windows-containersリポジトリを更新してベースイメージをビルドする必要があります。このベースイメージは、オートスケーラがCI に使用します。新しいベースイメージは GitLab Runner ヘルパーイメージをビルドするために使われます。
たとえば、13.7 マイルストーンでWindows Server Core 2004
のサポートを追加したい場合、次のようなマージリクエストが考えられます。GCPから提供されるベースイメージによっては、ビルドプロセスの一部としてDockerをインストールしなければならないかもしれません。このMRでは、以下のファイルを更新します:
.gitlab-ci.yml
.gitlab/ci/build.gitlab-ci.yml
生成されたイメージのテスト
dev
ステップで生成されたイメージをテストすることをお勧めします。dev xxx
xxx
はWindowsサーバーのバージョンを表しています。
イメージをテストするには、以下の手順に従います:
-
GitLab Runner project
に新しい Windows サーバー・バージョンのサポートを追加し、gitlab-runner-helper.x86_64-windows.exe
バイナリを生成します。 -
dev
のステップで生成したディスク・イメージを使ってVMを作成します。windows server ltsc2022
のサポートを追加する際、ディスクイメージ名はrunners-windows-21h1-core-containers-dev-40-mr
- このVMから
gitlab-runner-helper
Dockerイメージを生成します。そのためには、VM 上でgitlab-runner-helper.x86_64-windows.exe
のバイナリをダウンロードする必要があります。Invoke-WebRequest
PowerShell コマンドは使用できない可能性があるため、代わりにStart-BitsTransfer
コマンドを使用してください。 - サポートする新しいGCP Windowsサーバ・イメージを使用して、別のVMを作成します。
- 以前更新した
GitLab-Runner
プロジェクト用に生成されたgitlab-runner
実行ファイルをインストールし、プロジェクトに登録します。 - ジョブの起動に成功します。
この手順の例をこのコメントにまとめました。
画像の公開
前のステップで作成したマージリクエストをマージした後、本番GCPプロジェクトに画像をパブリッシュするために手動でパブリッシュジョブを実行する必要があります。
publish
ジョブから作成されるイメージ名に注意してください。たとえば、このジョブでは runners-windows-2019-core-containers-2020-07-17
という名前のイメージを作成しました。これはインストールに使用されます。
2つの新しいランナーマネージャーを追加します。
GitLab Runner プロジェクトの CI パイプラインで使えるようにするためです。あとはランナーマネージャーを設定するだけです。
登録
gitlab-runner register
、2つの新しいRunnerを登録します。これらはプロジェクト固有のRunnerでなければならないので、プロジェクト設定の登録トークンを使用する必要があります。ランナーの名前は、既存のランナーと同じ命名規則に従ってください。
例えば、Windows Server Core 2004
の場合、Runner Managersに次のような名前を付けます:
windows-2004-private-runner-manager-1
windows-2004-private-runner-manager-2
登録が完了したら、config.toml
ファイルにあるランナートークンを安全に保存してください。
最後に、新しいRunner Managerをセキュリティフォークプロジェクトと ‘liveness’テストサポートプロジェクトに割り当てる必要があります。それぞれの新しいRunner Managerに対して、次のようにします:
- RunnerプロジェクトのCI/CD設定ページのRunnersセクションに行きます;
- プロパティを編集し、
Lock to current projects
のチェックを外して、新しいRunnerのロックを解除します; -
セキュリティフォークプロジェクトの場合:
- プロジェクトの CI/CD 設定ページの Runner セクションに移動してください;
-
Other available runners
セクションまでスクロールダウンし、このプロジェクトのランナーを有効にします;
-
liveness’テストサポートプロジェクト:
- プロジェクトの CI/CD 設定ページの Runner セクションに移動してください;
-
Other available runners
セクションまでスクロールダウンし、このプロジェクトのランナーを有効にします;
- RunnerプロジェクトのCI/CD設定ページでRunnerを再びロックします。
インストール
autoscalerの新しいインスタンスをインストールして、その Windows バージョンの特定のconfig.toml
を持つようにします。新しいWindowsバージョンを含めるために、Ansibleリポジトリを更新する必要があります。
例えば、13.7マイルストーンでWindows Server Core 2004
のサポートを追加したい場合、以下のマージリクエストを参照して、以下のファイルを更新します:
ansible/roles/runner/tasks/main.yml
ansible/roles/runner/tasks/autoscaler.yml
ansible/group_vars/gcp_role_runner_manager.yml
ansible/host_vars/windows-shared-runners-manager-1.yml
ansible/host_vars/windows-shared-runners-manager-2.yml
マージリクエストを開く際には、メンテナーが2つの新しいランナーを登録し、ansible/host_vars
で定義されたキーで CI/CD 変数内部に保存する必要があることを確認してください。
公開registry.gitlab.com/gitlab-org/ci-cd/tests/liveness
イメージregistry.gitlab.com/gitlab-org/ci-cd/tests/liveness
はGitLab Runner の CI プロセスの一部として使用されます。新しい Windows バージョンに基づいたイメージがパブリッシュされていることを確認してください。
例えば、13.7マイルストーンでWindows Server Core 2004
のサポートを追加したい場合、以下のマージリクエストを参照して、以下のファイルを更新します:
.gitlab-ci.yml
Makefile
特定の Windows バージョンをサポートするために GitLab Runner を更新します。
ユーザーがDocker Executorを使えるようにヘルパーイメージを提供する必要があるため、コードベース内で特定のチェックを行い、新しいWindowsバージョンを許可する必要があります。
以下を更新する必要があります:
- サポートバージョンのリストと、それにまつわるテスト。
- ベースイメージのリストと、それにまつわるテスト。
- GitLab CI を更新して、デフォルトブランチでテストを実行するようにします。
-
release
ステージを更新します。
例えば、13.7マイルストーンでWindows Server Core 2004
のサポートを追加したい場合、以下のマージリクエストを参照して、以下のファイルを更新します:
helpers/container/helperimage/windows_info.go
helpers/container/helperimage/windows_info_test.go
helpers/container/windows/version.go
helpers/container/windows/version_test.go
.gitlab/ci/test.gitlab-ci.yml
.gitlab/ci/coverage.gitlab-ci.yml
.gitlab/ci/_common.gitlab-ci.yml
.gitlab/ci/release.gitlab-ci.yml
ci/.test-failures.servercore2004.txt
docs/executors/docker.md