はじめに
どうも!生産技術部のエンジニアです。GitLab CIを使って、masterブランチにpushが行われた際にブランチを自動生成するスクリプトを作成しましたので、紹介します。
GitLabサーバを一から構築される方は、以下からご覧ください。
「proxy環境下でDocker Composeを用いてCentOS7上にGitLab Dockerを作成」
環境
- CentOS : 7.6.18.10
- Docker-CE : 19.03.1
- Docker Compose : 1.25.0-rc2
- GitLab-CE Docker : 12.2.0-ce.0
- GitLab Runner Docker: 12.2.0
前提条件
GitLab、GitLab Runnerの導入が実施済みであること。
「proxy環境下でDocker Composeを用いてCentOS7上にGitLab Dockerを作成」
「Docker Composeを用いてCentOS7上でGitLab Runner Dockerを作成」
を参考に導入してください。
サービス用のアカウント作成
シェルスクリプトからgitコマンドを実施する際に、リポジトリに対するアクセス権がないユーザからgit push
を実施しようとするとエラーが発生し、失敗します。そこでスクリプトからコマンドが使えるように、サービス用のアカウントを作成します。サービス用のアカウントから、全てのリポジトリにアクセスできるようにAdmin Area
->Overview
->Users
からAdmin権限を付与しておきます。
今回作成するアカウントは、
User Name : GitlabRunner
Password : gitlabrunner
Email Address : gitlab@service.example.com
とします。これは一例です。
Gitのブランチを自動生成するスクリプト
gitlab-ci.yml
はGitLab公式ドキュメントを参考に作成し、pre-releaseステージで本題のブランチ自動生成を行なっていきます。pre-release.sh
が実行できるように、chmod
を用いて実行権限を付与します。
stages:
- build
- test
- pre-release
- deploy
job 1:
stage: build
script: echo "build"
job 2:
stage: test
script: echo "test"
job 3:
stage: pre-release
script:
- chmod u+x pre-release.sh
- ./pre-release.sh
only:
master
job 4:
stage: deploy
script: echo "deploy"
pre-release.sh
でgit push
が正常で行えるようにuser.name
、user.email
を設定します。ログイン時のユーザ確認、パスワード入力を不要にするため、set-url
にユーザ名、パスワードを設定します。CI_REPOSITORY_URLを使用する事で、リポジトリのURLを省略出来ます。
#!/bin/bash
git config --global user.name "GitlabRunner"
git config --global user.email gitlab@service.example.com
git remote set-url origin http://GitlabRunner:gitlabrunner@${CI_REPOSITORY_URL#*@}
git branch -d pre-release
git checkout -b pre-release
git push -u origin pre-release
最後に
ブランチを生成するスクリプトを作成しました。Gitサーバの運用に関して、まだまだ準備が必要そうなので、徐々に整えていこうと思います。