Commit 09954df5 authored by Stan Hu's avatar Stan Hu

Add an automated task to upload archive of master

This commit adds a `cache-repo` step in the `sync` stage of the CI
build. It builds a cached .tar.gz of the master branch with full history
so that the deltas and uploads it to Google Cloud Storage.  This archive
is downloaded by a script defined by a CI/CD variable named
CI_PRE_CLONE_SCRIPT. This has two benefits:

1. It speeds up builds. A 800 MB download only takes seconds.
2. It significantly reduces load on the file server. Smaller deltas
   means less time spent in git pack-objects.

Since the destination directory of the archive depends on the project
ID, this is only run on GitLab.com.

CI_REPO_CACHE_CREDENTIALS contains the Google Cloud service account JSON
for uploading to the gitlab-ci-git-repo-cache bucket. These credentials
are stored in the Production vault.

Note that this bucket should be located in the same continent as the
runner, or network egress charges will apply:
https://cloud.google.com/storage/pricing

Closes https://gitlab.com/gitlab-org/gitlab/issues/39134
parent 0fc68a74
...@@ -30,6 +30,7 @@ after_script: ...@@ -30,6 +30,7 @@ after_script:
- date - date
include: include:
- local: .gitlab/ci/cache-repo.gitlab-ci.yml
- local: .gitlab/ci/cng.gitlab-ci.yml - local: .gitlab/ci/cng.gitlab-ci.yml
- local: .gitlab/ci/docs.gitlab-ci.yml - local: .gitlab/ci/docs.gitlab-ci.yml
- local: .gitlab/ci/frontend.gitlab-ci.yml - local: .gitlab/ci/frontend.gitlab-ci.yml
......
# Builds a cached .tar.gz of the master branch with full history and
# uploads it to Google Cloud Storage. This archive is downloaded by a
# script defined by a CI/CD variable named CI_PRE_CLONE_SCRIPT. This has
# two benefits:
#
# 1. It speeds up builds. A 800 MB download only takes seconds.
# 2. It significantly reduces load on the file server. Smaller deltas
# means less time spent in git pack-objects.
#
# Since the destination directory of the archive depends on the project
# ID, this is only run on GitLab.com.
#
# CI_REPO_CACHE_CREDENTIALS contains the Google Cloud service account
# JSON for uploading to the gitlab-ci-git-repo-cache bucket. These
# credentials are stored in the Production vault.
#
# Note that this bucket should be located in the same continent as the
# runner, or network egress charges will apply:
# https://cloud.google.com/storage/pricing
cache-repo:
extends:
- .only:variables_refs-canonical-dot-com-schedules
image: gcr.io/google.com/cloudsdktool/cloud-sdk:alpine
stage: sync
allow_failure: true
variables:
GIT_DEPTH: 0
TAR_FILENAME: /tmp/gitlab-master.tar
script:
- gcloud auth activate-service-account --key-file=$CI_REPO_CACHE_CREDENTIALS
- tar cf $TAR_FILENAME .
- gzip $TAR_FILENAME
- gsutil cp $TAR_FILENAME.gz gs://gitlab-ci-git-repo-cache/project-$CI_PROJECT_ID/gitlab-master.tar.gz
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment