1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GitLab CIのキャッシュの保存先にS3互換ストレージのMinIOを使う

Last updated at Posted at 2023-02-21

GitLabをHelmで立てるとデフォルトでS3ストレージのMinIOが立ち上がる。
これを活用して、GitLabのCI/CDでキャッシュの保存先としてMinIOを使ってみた時のメモ。

前提条件

MinIOにアクセスできるようになっていること。今回はIngressを利用した。

$ kubectl get ing gitlab-minio
NAME           CLASS           HOSTS                       ADDRESS                                                                PORTS     AGE
gitlab-minio   awesome-class   minio.gitlab.hogeeee.info   k8s-gitlab-gitlabmi-xxxxxxxx.us-east-1.elb.amazonaws.com   80, 443   230d

また、RunnerのデプロイにはHelmを利用している。

MinIOでバケットを作成する

MinIOにアクセスするためのAccess KeyとSecret KeyはGitLab経由でインストールした際はSecretに保管されている。

$ kubectl get secret -n gitlab |grep minio
gitlab-minio-secret                         Opaque                                2      371d

こちらから引っ張る。今回はkubectl view-secret pluginで取得した。

kubectl view-secret gitlab-minio-secret accesskey
kubectl view-secret gitlab-minio-secret secretkey

次にMinIOにブラウザでアクセスし、バケットを作成する。
なお、出来る人はmcコマンドでちゃっちゃとやってしまって無問題。
アクセスすると以下の画面が出るので、先程取得したAccess KeyとSecret Keyを入力してログインする。

1676976486340.png

右下のアイコンをクリックし、Create bucketからバケットを作成する。
1676976594659.png

今回バケット名はtest-cacheとした。
1676976725884.png

MinIOでの操作は一旦お終い。

GitLab Runnerのデプロイ

公式ドキュメントに従って、S3の設定を追記する。
values.yamlだと以下のように[runners.cache]以下を追加した。

runners:
  config: |
    [[runners]]
      [runners.cache]
        Type = "s3"
        Path = "test-cache-dir/"
        Shared = false
        [runners.cache.s3]
          ServerAddress = "minio.gitlab.hogeeee.info"
          AccessKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
          SecretKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
          BucketName = "test-cache"
          Insecure = false
      [runners.kubernetes]
        namespace = "{{.Release.Namespace}}"
        image = "ubuntu:16.04"

Path =のところは勝手にディレクトリを作成してくれるので、存在しないディレクトリを指定しても問題ない。
ServerAddressにMinIOのアドレス、AccessKey,SecretKeyにSecretから取ってきた値を、BucketNameに先程作成したバケット名を入れて、Runnerをデプロイする。

helm upgrade -i -f runner-values.yaml gitlab-runner-debug gitlab/gitlab-runner -n gitlab

ConfigMapに反映されていることを確認する。

$ kubectl get cm -o yaml gitlab-runner-debug |grep test-cache -B4
  config.template.toml: |
    [[runners]]
      [runners.cache]
        Type = "s3"
        Path = "test-cache-dir/"
--
        [runners.cache.s3]
          ServerAddress = "minio.gitlab.hogeeee.info"
          AccessKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
          SecretKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
          BucketName = "test-cache"

動作確認

.gitlab-ci.ymlにこんなジョブを用意した。

build-job:
  stage: build
  rules:
  - if: '$CI_PIPELINE_SOURCE == "push"'
  script:
  |- 
    set -x
    if [ ! -d ".config" ]; then
      mkdir .config
    fi
    ls -l .config/
    echo "test" > .config/hoge
  cache:
    key: test-cache
    paths:
      - .config

cacheが正常に保存されれば、2回目のlsでcacheがある状態が表示されるはずだ。
このジョブを実行した結果したところ、1回目はこのような出力となった。

Executing "step_script" stage of the job script
$ set -x # collapsed multi-line command
++ '[' '!' -d .config ']'
++ mkdir .config
++ ls -l .config/
total 0
++ echo test
Saving cache for successful job
Creating cache test-cache-protected...
.config: found 2 matching artifact files and directories 
Uploading cache.zip to https://minio.gitlab.hogeeee.info/test-cache/test-cache-dir/runner/WDBR7uzC/project/3/test-cache-protected 
Created cache
Cleaning up project directory and file based variables
Job succeeded

lsでは何も取得できず、最後にMinIOにUploadしていることが見て取れる。
ジョブを再実行する。

Executing "step_script" stage of the job script
$ set -x # collapsed multi-line command
++ '[' '!' -d .config ']'
++ ls -l .config/
total 4
-rw-r--r-- 1 root root 5 Feb 21 11:37 hoge
++ echo test
Saving cache for successful job
Creating cache test-cache-protected...
.config: found 2 matching artifact files and directories 
Uploading cache.zip to https://minio.gitlab.hogeeee.info/test-cache/test-cache-dir/runner/WDBR7uzC/project/3/test-cache-protected 
Created cache
Cleaning up project directory and file based variables
Job succeeded

今度はlsの結果が取得できた。これにより、cacheに溜め込んだものが次のジョブで再利用できることが確認できた。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?