ジョブのアーティファクト管理
これは管理のためのドキュメントです。GitLab CI/CDパイプラインでジョブアーティファクトを使用する方法については、ジョブアーティファクト設定ドキュメントをご覧ください。
アーティファクトとは、ジョブが終了した後に添付されるファイルやディレクトリのリストです。この機能はすべてのGitLabインストールでデフォルトで有効になっています。
ジョブのアーティファクトを無効にする
サイト全体でアーティファクトを無効にするには、以下の手順に従います:
-
/etc/gitlab/gitlab.rb
を編集します:gitlab_rails['artifacts_enabled'] = false
-
ファイルを保存して GitLab を再設定してください:
sudo gitlab-ctl reconfigure
-
Helm の値をエクスポートします:
helm get values gitlab > gitlab_values.yaml
-
gitlab_values.yaml
を編集します:global: appConfig: artifacts: enabled: false
-
ファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
-
docker-compose.yml
を編集します:version: "3.6" services: gitlab: environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['artifacts_enabled'] = false
-
ファイルを保存して GitLab を再起動します:
docker compose up -d
-
/home/git/gitlab/config/gitlab.yml
を編集します:production: &base artifacts: enabled: false
-
ファイルを保存して GitLab を再起動します:
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart
ジョブのアーティファクトの保存
GitLab Runnerはジョブのアーティファクトを含むアーカイブをGitLabにアップロードすることができます。デフォルトではジョブが成功したときにアップロードされますが、artifacts:when
パラメータで失敗したときや常にアップロードすることもできます。
ほとんどのアーティファクトは GitLab Runner によって圧縮されてからコーディネータに送られます。ただし、レポートのアーティファクトは例外で、アップロード後に圧縮されます。
ローカルストレージの使用
Linux パッケージを使用している場合、またはセルフコンパイルしたインストールを使用している場合、アーティファクトをローカルに保存する場所を変更することができます。
アーティファクトはデフォルトでは/var/opt/gitlab/gitlab-rails/shared/artifacts
に保存されます。
-
保存パスを変更するには、例えば
/mnt/storage/artifacts
、/etc/gitlab/gitlab.rb
を編集し、以下の行を追加します:gitlab_rails['artifacts_path'] = "/mnt/storage/artifacts"
-
ファイルを保存して GitLab を再設定してください:
sudo gitlab-ctl reconfigure
アーティファクトはデフォルトでは/home/git/gitlab/shared/artifacts
に保存されます。
-
保存パスを変更するには、例えば、
/mnt/storage/artifacts
、/home/git/gitlab/config/gitlab.yml
を編集し、以下の行を追加または修正してください:production: &base artifacts: enabled: true path: /mnt/storage/artifacts
-
ファイルを保存して GitLab を再起動します:
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart
オブジェクトストレージの使用
GitLabがインストールされているローカルディスクを使ってアーティファクトを保存したくない場合は、代わりにAWS S3のようなオブジェクトストレージを使うことができます。
オブジェクトストレージにアーティファクトを保存するようにGitLabを設定する場合、ジョブログのためのローカルディスクの使用も省きたいかもしれません。どちらの場合も、ジョブログはアーカイブされ、ジョブが完了するとオブジェクトストレージに移動します。
GitLab 13.2以降では、連結オブジェクトストレージの設定を使用する必要があります。
オブジェクトストレージへのマイグレーション
ジョブのアーティファクトをローカルストレージからオブジェクトストレージにマイグレーションできます。処理はバックグラウンドワーカーで行われるため、ダウンタイムは必要ありません。
- オブジェクトストレージを設定します。
-
アーティファクトをマイグレーションします:
Linux package (Omnibus)sudo gitlab-rake gitlab:artifacts:migrate
Dockersudo docker exec -t <container name> gitlab-rake gitlab:artifacts:migrate
Self-compiled (source)sudo -u git -H bundle exec rake gitlab:artifacts:migrate RAILS_ENV=production
- オプション。進捗を追跡し、PostgreSQLコンソールを使用してすべてのジョブのアーティファクトが正常にマイグレーションされたことを確認します。
-
PostgreSQLコンソールを開きます:
Linux package (Omnibus)sudo gitlab-psql
Dockersudo docker exec -it <container_name> /bin/bash gitlab-psql
Self-compiled (source)sudo -u git -H psql -d gitlabhq_production
-
以下のSQLクエリで、すべてのアーティファクトがオブジェクトストレージにマイグレーションされたことを確認します。
objectstg
の数はtotal
と同じでなければなりません:gitlabhq_production=# SELECT count(*) AS total, sum(case when file_store = '1' then 1 else 0 end) AS filesystem, sum(case when file_store = '2' then 1 else 0 end) AS objectstg FROM ci_job_artifacts; total | filesystem | objectstg ------+------------+----------- 19 | 0 | 19
-
-
artifacts
ディレクトリにディスク上のファイルがないことを確認します:Linux package (Omnibus)sudo find /var/opt/gitlab/gitlab-rails/shared/artifacts -type f | grep -v tmp | wc -l
Docker/var/opt/gitlab
を/srv/gitlab
にマウントしたと仮定します:sudo find /srv/gitlab/gitlab-rails/shared/artifacts -type f | grep -v tmp | wc -l
Self-compiled (source)sudo find /home/git/gitlab/shared/artifacts -type f | grep -v tmp | wc -l
場合によっては、オーファンアーティファクトファイルのクリーンアップRakeタスクを実行して、オーファンアーティファクトをクリーンアップする必要があります。
オブジェクトストレージからローカルストレージへのマイグレーション
ローカル ストレージにマイグレーションを戻すには、アーティファクト ストレージを選択的に無効にする必要があります。
期限切れのアーティファクト
artifacts:expire_in
を使用してアーティファクトの有効期限を設定した場合、その日付が過ぎるとすぐに削除されます。そうでない場合は、デフォルトのアーティファクトの有効期限設定に従って期限が切れます。
アーティファクトは、Sidekiqが7分ごとに実行するexpire_build_artifacts_worker
cronジョブによってクリーンアップされます(Cron構文では*/7 * * * *
)。
アーティファクトが期限切れになるデフォルトのスケジュールを変更するには、次の手順に従います:
-
/etc/gitlab/gitlab.rb
を編集し、以下の行を追加してください(すでに存在し、コメントアウトされている場合は、コメントアウトを解除してください):gitlab_rails['expire_build_artifacts_worker_cron'] = "*/7 * * * *"
-
ファイルを保存して GitLab を再設定してください:
sudo gitlab-ctl reconfigure
-
Helm の値をエクスポートします:
helm get values gitlab > gitlab_values.yaml
-
gitlab_values.yaml
を編集します:global: appConfig: cron_jobs: expire_build_artifacts_worker: cron: "*/7 * * * *"
-
ファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
-
docker-compose.yml
を編集します:version: "3.6" services: gitlab: environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['expire_build_artifacts_worker_cron'] = "*/7 * * * *"
-
ファイルを保存して GitLab を再起動します:
docker compose up -d
-
/home/git/gitlab/config/gitlab.yml
を編集します:production: &base cron_jobs: expire_build_artifacts_worker: cron: "*/7 * * * *"
-
ファイルを保存して GitLab を再起動します:
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart
アーティファクトの最大ファイルサイズの設定
アーティファクトが有効になっている場合、管理エリアの設定でアーティファクトの最大ファイルサイズを変更できます。
ストレージの統計
グループやプロジェクトのアーティファクトに使用されているストレージの合計は、管理エリアやグループ、プロジェクトのAPIで確認できます。
実装の詳細
GitLabがアーティファクトアーカイブを受け取ると、GitLab Workhorseによってアーカイブメタデータファイルも生成されます。このメタデータファイルには、アーティファクトアーカイブ自体にあるすべてのエントリが記述されています。メタデータファイルはバイナリ形式で、Gzip圧縮が追加されています。
GitLabはスペース、メモリ、ディスクI/Oを節約するためにアーティファクトアーカイブを抽出しません。代わりに、すべての関連情報を含むメタデータファイルを検査します。これは、アーティファクトが大量にある場合やアーカイブが非常に大きなファイルである場合に特にインポートされます。
特定のファイルを選択すると、GitLab Workhorseはアーカイブからそのファイルを抽出し、ダウンロードを開始します。この実装はスペース、メモリ、ディスクI/Oを節約します。