Windows 版の Docker Executor サポートの追加

GitLabはWindowsの特定のバージョンをサポートしています。

Dockerエクゼキューターに新しいWindowsバージョンのサポートを追加するには、同じWindowsバージョンのヘルパーイメージをリリースする必要があります。その後、WindowsホストOS上でヘルパーイメージを実行することができます。

WindowsではホストOSとコンテナOSのバージョンが一致する必要があるため、そのバージョンのヘルパーイメージをビルドするには、そのWindowsバージョンにインストールされたGitLab Runnerが必要です。

インフラストラクチャー

ユーザーのジョブで使用するために、ヘルパーイメージを構築する必要があります。

インフラストラクチャが使用するベースイメージを作成します

Windows ではホスト OS のバージョンとコンテナ OS のバージョンを一致させる必要があるため、Windows Server Core 2004 イメージを構築する場合はgitlab-runnerWindows Server Core 2004 にインストールする必要があります。

そのためには、windows-containersリポジトリを更新してベースイメージをビルドする必要があります。このベースイメージは、オートスケーラがCI に使用します。新しいベースイメージは GitLab Runner ヘルパーイメージをビルドするために使われます。

たとえば、13.7 マイルストーンでWindows Server Core 2004 のサポートを追加したい場合、次のようなマージリクエストが考えられます。GCPから提供されるベースイメージによっては、ビルドプロセスの一部としてDockerをインストールしなければならないかもしれません。このMRでは、以下のファイルを更新します:

  1. .gitlab-ci.yml
  2. .gitlab/ci/build.gitlab-ci.yml

生成されたイメージのテスト

dev ステップで生成されたイメージをテストすることをお勧めします。dev xxx xxx はWindowsサーバーのバージョンを表しています。

イメージをテストするには、以下の手順に従います:

  1. GitLab Runner project に新しい Windows サーバー・バージョンのサポートを追加し、gitlab-runner-helper.x86_64-windows.exe バイナリを生成します。
  2. dev のステップで生成したディスク・イメージを使ってVMを作成します。windows server ltsc2022 のサポートを追加する際、ディスクイメージ名はrunners-windows-21h1-core-containers-dev-40-mr
  3. このVMからgitlab-runner-helper Dockerイメージを生成します。そのためには、VM 上でgitlab-runner-helper.x86_64-windows.exe のバイナリをダウンロードする必要があります。Invoke-WebRequest PowerShell コマンドは使用できない可能性があるため、代わりにStart-BitsTransfer コマンドを使用してください。
  4. サポートする新しいGCP Windowsサーバ・イメージを使用して、別のVMを作成します。
  5. 以前更新したGitLab-Runner プロジェクト用に生成されたgitlab-runner 実行ファイルをインストールし、プロジェクトに登録します。
  6. ジョブの起動に成功します。

この手順の例をこのコメントにまとめました。

画像の公開

前のステップで作成したマージリクエストをマージした後、本番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に次のような名前を付けます:

  1. windows-2004-private-runner-manager-1
  2. windows-2004-private-runner-manager-2

登録が完了したら、config.toml ファイルにあるランナートークンを安全に保存してください。

最後に、新しいRunner Managerをセキュリティフォークプロジェクトと ‘liveness’テストサポートプロジェクトに割り当てる必要があります。それぞれの新しいRunner Managerに対して、次のようにします:

  1. RunnerプロジェクトのCI/CD設定ページのRunnersセクションに行きます;
  2. プロパティを編集し、Lock to current projects のチェックを外して、新しいRunnerのロックを解除します;
  3. セキュリティフォークプロジェクトの場合:
    1. プロジェクトの CI/CD 設定ページの Runner セクションに移動してください;
    2. Other available runners セクションまでスクロールダウンし、このプロジェクトのランナーを有効にします;
  4. liveness’テストサポートプロジェクト
    1. プロジェクトの CI/CD 設定ページの Runner セクションに移動してください;
    2. Other available runners セクションまでスクロールダウンし、このプロジェクトのランナーを有効にします;
  5. RunnerプロジェクトのCI/CD設定ページでRunnerを再びロックします。

インストール

autoscalerの新しいインスタンスをインストールして、その Windows バージョンの特定のconfig.toml を持つようにします。新しいWindowsバージョンを含めるために、Ansibleリポジトリを更新する必要があります。

例えば、13.7マイルストーンでWindows Server Core 2004 のサポートを追加したい場合、以下のマージリクエストを参照して、以下のファイルを更新します:

  1. ansible/roles/runner/tasks/main.yml
  2. ansible/roles/runner/tasks/autoscaler.yml
  3. ansible/group_vars/gcp_role_runner_manager.yml
  4. ansible/host_vars/windows-shared-runners-manager-1.yml
  5. 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/livenessGitLab Runner の CI プロセスの一部として使用されます。新しい Windows バージョンに基づいたイメージがパブリッシュされていることを確認してください。

例えば、13.7マイルストーンでWindows Server Core 2004 のサポートを追加したい場合、以下のマージリクエストを参照して、以下のファイルを更新します:

  1. .gitlab-ci.yml
  2. Makefile

特定の Windows バージョンをサポートするために GitLab Runner を更新します。

ユーザーがDocker Executorを使えるようにヘルパーイメージを提供する必要があるため、コードベース内で特定のチェックを行い、新しいWindowsバージョンを許可する必要があります。

以下を更新する必要があります:

  1. サポートバージョンのリストと、それにまつわるテスト。
  2. ベースイメージのリストと、それにまつわるテスト。
  3. GitLab CI を更新して、デフォルトブランチでテストを実行するようにします。
  4. release ステージを更新します。

例えば、13.7マイルストーンでWindows Server Core 2004 のサポートを追加したい場合、以下のマージリクエストを参照して、以下のファイルを更新します:

  1. helpers/container/helperimage/windows_info.go
  2. helpers/container/helperimage/windows_info_test.go
  3. helpers/container/windows/version.go
  4. helpers/container/windows/version_test.go
  5. .gitlab/ci/test.gitlab-ci.yml
  6. .gitlab/ci/coverage.gitlab-ci.yml
  7. .gitlab/ci/_common.gitlab-ci.yml
  8. .gitlab/ci/release.gitlab-ci.yml
  9. ci/.test-failures.servercore2004.txt
  10. docs/executors/docker.md