GitLab Pagesの開発に貢献しましょう。

GitLab Pagesの設定方法を学ぶことで、機能の開発に貢献することができます。

GitLab Pages のホスト名の設定

GitLab Pagesはホスト名かドメインが必要です。異なるGitLab Pagesサイトはそれぞれサブドメインを通してアクセスされるからです。GitLab Pagesのホスト名を設定することができます:

ワイルドカードを使わない場合、hostsファイルを編集します。

/etc/hosts はワイルドカードのホスト名をサポートしていないので、GitLab Pages 用のエントリーを一つ、そして各ページサイト用のエントリーを一つ設定する必要があります:

127.0.0.1 gdk.test           # If you're using GDK
127.0.0.1 pages.gdk.test     # Pages host
# Any namespace/group/user needs to be added
# as a subdomain to the pages host. This is because
# /etc/hosts doesn't accept wildcards
127.0.0.1 root.pages.gdk.test # for the root pages

DNS ワイルドカードを使う場合

/etc/hosts を編集する代わりに DNS ワイルドカードを使いたい場合は、次の方法があります:

GDK を使わない GitLab Pages の設定

GitLab Pages サイトのルートにgitlab-pages.conf を作成します:

# Default port is 3010, but you can use any other
listen-http=:3010

# Your local GitLab Pages domain
pages-domain=pages.gdk.test

# Directory where the pages are stored
pages-root=shared/pages

# Show more information in the logs
log-verbose=true

より多くのオプションを見るには、internal/config/flags.go をチェックするか、gitlab-pages --help を実行します。

GitLab Pages の手動実行

コードを変更する場合は、make を実行してアプリをビルドする必要があります。アプリを起動する前に必ず実行するのがベストです。ビルドはすぐに終わりますので、心配はいりません!

make && ./gitlab-pages -config=gitlab-pages.conf

GDKを使ったGitLab Pagesの設定

以下の手順では、$GDK_ROOT は GDK をクローンしたディレクトリです。

  1. GDKのホスト名を設定します。
  2. gdk.ymlGitLab Pages のホスト名を追加します:

    gitlab_pages:
      enabled: true         # enable GitLab Pages to be managed by gdk
      port: 3010            # default port is 3010
      host: pages.gdk.test  # the GitLab Pages domain
      auto_update: true     # if gdk must update GitLab Pages git
      verbose: true         # show more information in the logs
    

GDKでGitLab Pagesを動かす

これらの設定が終わったら、GDK は GitLab Pages プロセスを管理し、次のようなコマンドでアクセスできるようにします:

  • Start:gdk start gitlab-pages
  • 停止gdk stop gitlab-pages
  • 再起動gdk restart gitlab-pages
  • テールログgdk tail gitlab-pages

GitLab Pages の手動実行

GDKのプロセス管理とは無関係にアプリをビルドして起動することもできます。

コードを変更する場合は、make を実行してアプリをビルドする必要があります。アプリを起動する前に必ず実行するのがベストです。ビルドはすぐに終わりますので、心配はいりません!

make && ./gitlab-pages -config=gitlab-pages.conf

FIPSモードでのGitLab Pagesのビルド

FIPS_MODE=1 make && ./gitlab-pages -config=gitlab-pages.conf

GitLab Pagesサイトの作成

GitLab Pages サイトをローカルに構築するには、 gitlab-runner を設定する必要があります。

詳しくはユーザーマニュアルを参照してください。

アクセスコントロールの有効化

GitLab Pagesは非公開サイトをサポートしています。非公開サイトはGitLabプロジェクトにアクセスできるユーザーだけがアクセスできます。

GitLab Pagesのアクセスコントロールはデフォルトでは無効になっています。有効にするには

  1. GitLab自体でGitLab Pagesアクセスコントロールを有効にします。これには二つの方法があります:

    • GDK を使っていない場合は、gitlab.yml を編集します:

       # gitlab/config/gitlab.yml
       pages:
         access_control: true
      
    • GDKを使用している場合は、gdk.yml を編集してください:

       # $GDK_ROOT/gdk.yml
       gitlab_pages:
         enabled: true
         access_control: true
      
  2. GitLab を再起動します(GDK を使っている場合はgdk restart を実行します)。gdk reconfigure を実行するとaccess_control の値がconfig/gitlab.yml に上書きされます。
  3. ローカルの GitLab インスタンスで、ブラウザからhttp://gdk.test:3000/admin/applications にアクセスします。
  4. api スコープでインスタンス全体の OAuth アプリケーションを作成します。
  5. redirect-uri の値をpages-domain 認証エンドポイントに設定します(例えば、http://pages.gdk.test:3010/auth )。redirect-uri には GitLab Pages のサイトドメインを含めてはいけません。

  6. 認証クライアント設定を追加します:

    • GDKでは、gdk.yml

       gitlab_pages:
         enabled: true
         access_control: true
         auth_client_id: $CLIENT_ID           # the OAuth application id created in http://gdk.test:3000/admin/applications
         auth_client_secret: $CLIENT_SECRET   # the OAuth application secret created in http://gdk.test:3000/admin/applications
      

      GDKはランダムなauth_secret を生成し、GitLab Pagesのホスト設定に基づいてauth_redirect_uri

    • GDK なしでは、gitlab-pages.conf

       ## the following are only needed if you want to test auth for private projects
       auth-client-id=$CLIENT_ID                         # the OAuth application id created in http://gdk.test:3000/admin/applications
       auth-client-secret=$CLIENT_SECRET                 # the OAuth application secret created in http://gdk.test:3000/admin/applications
       auth-secret=$SOME_RANDOM_STRING                   # should be at least 32 bytes long
       auth-redirect-uri=http://pages.gdk.test:3010/auth # the authentication callback url for GitLab Pages
      
  7. GDK内部でPagesを実行する場合、gdk.ymlgdk の下にある GDKprotected_config_files セクションを使用することで、gitlab-pages.conf の設定が書き換わるのを避けることができます:

    gdk:
      protected_config_files:
      - 'gitlab-pages/gitlab-pages.conf'
    

オブジェクトストレージの有効化

GitLab Pagesはアーティファクトの保存にオブジェクトストレージを使うことをサポートしていますが、オブジェクトストレージはデフォルトでは無効になっています。GDKで有効にすることができます:

  1. Editgdk.yml で、GitLab自体のオブジェクトストレージを有効にすることができます:

    # $GDK_ROOT/gdk.yml
    object_store:
      enabled: true
    
  2. コマンドgdk reconfiguregdk restart を実行して GitLab を再設定し、再起動します。

詳細については、GDKのドキュメントを参照してください。

リンティング

# Run the linter locally
make lint

# Run linter and fix issues (if supported by the linter)
make format

テスト

テストを実行するには、以下のコマンドを使用します:

# This will run all of the tests in the codebase
make test

# Run a specfic test file
go test ./internal/serving/disk/

# Run a specific test in a file
go test ./internal/serving/disk/ -run TestDisk_ServeFileHTTP

# Run all unit tests except acceptance_test.go
go test ./... -short

# Run acceptance_test.go only
make acceptance
# Run specific acceptance tests
# We add `make` here because acceptance tests use the last binary that was compiled,
# so we want to have the latest changes in the build that is tested
make && go test ./ -run TestRedirect

貢献者

フィーチャーフラグ

caution
新しく導入された機能フラグは、デフォルトではすべて無効になっているはずです。

自明でない変更には機能フラグを追加することを検討してください。機能フラグによって、これらの変更のリリースやロールバックが簡単になり、インシデントやダウンタイムを避けることができます。GitLab Pages に新しい機能フラグを追加するには:

  1. internal/feature/feature.goで機能フラグを作成します。デフォルトではオフでなければなりません。
  2. Feature flag テンプレートを使用して、機能フラグを追跡するイシューを作成してください。
  3. 機能フラグを扱うマージリクエストに~"feature flag" ラベルを追加してください。

GitLab Pages では、機能フラグはグローバルレベルで環境変数によって制御されます。機能フラグの状態を変更するには、サービスレベルでのデプロイが必要です。GitLab Pagesの機能フラグを有効にするマージリクエストの例:GitLab Pages のレート制限を適用します。