概要
前回の続きです
今回は CI を組み合わせて自動で Wiki が更新される仕組みにします
環境
- Gitlab 14.3.3-ee
サンプルスクリプト (update_wiki.sh)
#!/bin/bash
[[ $HOST =~ ^https?://[^/]+ ]] && HOST="${BASH_REMATCH[0]}/api/v4/projects/"
UPLOAD_API_PATH="${CI_PROJECT_ID}/uploads"
FILE_NAME="test.jpg"
IMAGE_URL=`/usr/bin/curl -s -XPOST "${HOST}${UPLOAD_API_PATH}" --header "PRIVATE-TOKEN:${PRIVATE_TOKEN}" --form "file=@${FILE_NAME}" | jq -r .markdown`
CONTENT="
# API Test Page
## List
* a
* b
* c
## Image
${IMAGE_URL}
"
TITLE="test"
BODY="format=markdown&content=${CONTENT}&title=${TITLE}&slug=${TITLE}"
WIKI_API_PATH="${CI_PROJECT_ID}/wikis/${TITLE}"
/usr/bin/curl -XPUT "${HOST}${WIKI_API_PATH}" \
--header "PRIVATE-TOKEN:${PRIVATE_TOKEN}" \
--data "${BODY}"
.gitlab-ci.yml
stages:
- update_wiki
update_wiki:
image:
name: alpine/git:latest
entrypoint: [""]
stage: update_wiki
before_script:
- "apk add curl"
- "apk add bash"
- "apk add jq"
- "apk add wget"
- "export PROJECT_ID=123"
script:
- "cd $CI_BUILDS_DIR/$CI_PROJECT_PATH"
- "wget https://picsum.photos/200 -O test.jpg"
- "chmod +x ./update_wiki.sh"
- "HOST=${CI_PROJECT_URL} CI_PROJECT_ID=${PROJECT_ID} PRIVATE_TOKEN=${GIT_PASSWORD} ./update_wiki.sh"
解説
.gitlab-ci.yml 側で API をコールするのに必要なパラメータを変数に設定します
今まではシェルスクリプト側で HOST やシークレットトークなどを設定していましたが CI が自動で設定してくれているのでそれを使うようにします
自分で設定するのは PROJECT_ID だけになります
GIT_PASSWORD は CI の変数として Gitlab に事前に登録しています
画像は固定の画像ではなくランダムで取得するようにします
おそらく実際の場面では他のビルドで画像を作成してそれを Wiki に掲載する感じになるかなと思います
もしステージを分けて次のステージで画像情報を使う場合は artifacts.untracked: true を設定すると良いと思います
最後に
API で Wiki 編集 -> 画像をアップロードできるようにする -> CI に組み込むという流れで紹介しました
一度にゴールを目指そうとせず順を追って一つ一つ実装していくと結果的に近道になっていることは多いかなと思います
0 件のコメント:
コメントを投稿