GitLabCI からマージリクエストするメモ
質問され軽くググッて対応したので備忘メモ
要望
git push
> Build > Test > Merge Request (以下MR) までしたい- MR は master から production ブランチに対して行いたい
- とりあえず MR する方法がわかればOK
調査
- 普通に GitLabCI を調べてもそれっぽい方法が分からなかった。
- API 利用する事で実施できそうだった
- となると恐らく誰かがやってるだろう・・・とググったら出てきたのでこちらを参考にさせて頂いた。
結果
上記のググった結果を参考に試したらうまくいった。
- GitLab ユーザアカウントでアクセストークンを作成
- User Settings > Access Tokens で作成
- 作成したアクセストークンをプロジェクト > CIの環境変数 に設定する
- Project > Settings > CI/CD > Variables で変数
PRIVATE_TOKEN
で設定
- Project > Settings > CI/CD > Variables で変数
- スクリプト
- 上記のURL に掲載されたいたものを少し修正しただけ。
- リポジトリに
./utils/autoMergeRequest.sh
で作成し、実行権限を付与
#!/usr/bin/env bash [[ $HOST =~ ^https?://[^/]+ ]] && HOST="${BASH_REMATCH[0]}/api/v4/projects/" #TARGET_BRANCH=`curl --silent "${HOST}${CI_PROJECT_ID}" --header "PRIVATE-TOKEN:${PRIVATE_TOKEN}" | python3 -c "import sys, json; print(json.load(sys.stdin)['default_branch'])"`; TARGET_BRANCH=production BODY="{ \"id\": ${CI_PROJECT_ID}, \"source_branch\": \"${CI_COMMIT_REF_NAME}\", \"target_branch\": \"${TARGET_BRANCH}\", \"remove_source_branch\": true, \"title\": \"WIP: ${CI_COMMIT_REF_NAME}\", \"assignee_id\":\"${GITLAB_USER_ID}\" }"; LISTMR=`curl --silent "${HOST}${CI_PROJECT_ID}/merge_requests?state=opened" --header "PRIVATE-TOKEN:${PRIVATE_TOKEN}"`; COUNTBRANCHES=`echo ${LISTMR} | grep -o "\"source_branch\":\"${CI_COMMIT_REF_NAME}\"" | wc -l`; if [ ${COUNTBRANCHES} -eq "0" ]; then curl -X POST "${HOST}${CI_PROJECT_ID}/merge_requests" \ --header "PRIVATE-TOKEN:${PRIVATE_TOKEN}" \ --header "Content-Type: application/json" \ --data "${BODY}"; echo "Opened a new merge request: WIP: ${CI_COMMIT_REF_NAME} and assigned to you"; exit; fi echo "No new merge request opened";
.gitlab-ci.yml
はこんな感じ。 これで git push
すると、WIP: ほげほげ
な MR が行われたことを確認、PRIVATE_TOKEN
以外の変数については GitLab CI/CD のドキュメントを参照
mr to production: stage: deploy only: - master script: - HOST=${CI_PROJECT_URL} CI_PROJECT_ID=${CI_PROJECT_ID} CI_COMMIT_REF_NAME=${CI_COMMIT_REF_NAME} GITLAB_USER_ID=${GITLAB_USER_ID} PRIVATE_TOKEN=${PRIVATE_TOKEN} ./utils/autoMergeRequest.sh
あとは WIP : ほげほげ
で行われた MR の件名を修正してマージしたりとかまで確認した。 シェルスクリプトで curl
を利用してAPI叩いてるので目的に合わせて少し修正するだけでいけるかな。
以上 c⌒っ゚д゚)っφ メモメモ...