概要
cache を使います
gitlab-ci.yml の内容は前回のものを使います
環境
-
Gitlab.com 17.4.0-pre* Runner (docker-mahcine executor ruby:3.1)
.gitlab-ci.yml
流れとしては
- 前回の結果があれば別ファイル名にして保存
- 今回の結果を取得
- 今回の結果を表示、キャッシュに保存
という感じです
ジョブ間でデータをやり取りするため artifacats も使います
stages:
- save_versions
- fetch_versions
- check_versions
save:
stage: save_versions
script:
- |
# バージョンファイルがすでにある場合は前回のバージョンファイルに移動する
mkdir -p $CI_PROJECT_DIR/build/cache
mkdir -p $CI_PROJECT_DIR/build/artifacts
# ファイルが何もないと各種ディレクトリが破棄されるのでファイル作成
touch $CI_PROJECT_DIR/build/cache/keep.txt
touch $CI_PROJECT_DIR/build/artifacts/keep.txt
if [ -f $CI_PROJECT_DIR/build/cache/prometheus.txt ]; then
mv $CI_PROJECT_DIR/build/cache/prometheus.txt $CI_PROJECT_DIR/build/artifacts/pre_prometheus.txt
echo "Prometheus pre version:"
cat $CI_PROJECT_DIR/build/artifacts/pre_prometheus.txt
fi
if [ -f $CI_PROJECT_DIR/build/cache/alertmanager.txt ]; then
mv $CI_PROJECT_DIR/build/cache/alertmanager.txt $CI_PROJECT_DIR/build/artifacts/pre_alertmanager.txt
echo "Alertmanager pre version:"
cat $CI_PROJECT_DIR/build/artifacts/pre_alertmanager.txt
fi
if [ -f $CI_PROJECT_DIR/build/cache/node_exporter.txt ]; then
mv $CI_PROJECT_DIR/build/cache/node_exporter.txt $CI_PROJECT_DIR/build/artifacts/pre_node_exporter.txt
echo "Node Exporter pre version:"
cat $CI_PROJECT_DIR/build/artifacts/pre_node_exporter.txt
fi
# 前回のパイプラインを参照するために cache を使う
cache:
paths:
- $CI_PROJECT_DIR/build/cache/*.txt
# ジョブ間で結果を共有するために artifacts を使う
artifacts:
paths:
- $CI_PROJECT_DIR/build/artifacts/*.txt
# 任意のタグに基づいてバージョン情報を取得するジョブ
fetch:
stage: fetch_versions
script:
- echo "Checking versions for the specified tag -> $TARGET_TAG"
# GitLabソースコードをクローン
- git clone https://gitlab.com/gitlab-org/omnibus-gitlab.git
- cd omnibus-gitlab
# ユーザーが指定したタグにチェックアウト
- git checkout $TARGET_TAG
# prometheusのバージョンを取得
- grep 'Gitlab::Version.new' config/software/prometheus.rb | sed -n "s/.*'\(.*\)'.*/\1/p" > $CI_PROJECT_DIR/build/artifacts/prometheus.txt
# Alertmanagerのバージョンを取得
- grep 'Gitlab::Version.new' config/software/alertmanager.rb | sed -n "s/.*'\(.*\)'.*/\1/p" > $CI_PROJECT_DIR/build/artifacts/alertmanager.txt
# Node Exporterのバージョンを取得
- grep 'Gitlab::Version.new' config/software/node-exporter.rb | sed -n "s/.*'\(.*\)'.*/\1/p" > $CI_PROJECT_DIR/build/artifacts/node_exporter.txt
# 前回のジョブの結果を使用するために artifacts を使う
artifacts:
paths:
- $CI_PROJECT_DIR/build/artifacts/*.txt
# ジョブの実行にはTARGET_TAG変数が必須
rules:
- if: '$TARGET_TAG != null'
check:
stage: check_versions
script:
- echo "Prometheus version:"
- cat $CI_PROJECT_DIR/build/artifacts/prometheus.txt
- echo "Alertmanager version:"
- cat $CI_PROJECT_DIR/build/artifacts/alertmanager.txt
- echo "Node Exporter version:"
- cat $CI_PROJECT_DIR/build/artifacts/node_exporter.txt
# 結果をキャッシュに保存する
- cp $CI_PROJECT_DIR/build/artifacts/prometheus.txt $CI_PROJECT_DIR/build/cache/prometheus.txt
- cp $CI_PROJECT_DIR/build/artifacts/alertmanager.txt $CI_PROJECT_DIR/build/cache/alertmanager.txt
- cp $CI_PROJECT_DIR/build/artifacts/node_exporter.txt $CI_PROJECT_DIR/build/cache/node_exporter.txt
- ls $CI_PROJECT_DIR/build/cache
- ls $CI_PROJECT_DIR/build/artifacts
# 次回のパイプラインに結果を残すために cache を使う
cache:
paths:
- $CI_PROJECT_DIR/build/cache/*.txt
# 前回のジョブの結果を使用するために artifacts を使う
artifacts:
paths:
- $CI_PROJECT_DIR/build/artifacts/*.txt
最後に
artifacts は結果を保存してダウンロードできますが次回のパイプラインでは使えません
cache は結果を保存してダウンロードはできませんが次回のパイプラインで使えます
どちらもサブディレクトリを使う場合は対象のファイルが一つでもないと次のジョブ実行時にサブディレクトリがないので注意しましょう
0 件のコメント:
コメントを投稿