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を入力してログインする。
右下のアイコンをクリックし、Create bucketからバケットを作成する。
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に溜め込んだものが次のジョブで再利用できることが確認できた。