Help us understand the problem. What is going on with this article?

GitLab CIでGitのブランチを自動生成

はじめに

どうも!生産技術部のエンジニアです。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.ymlGitLab公式ドキュメントを参考に作成し、pre-releaseステージで本題のブランチ自動生成を行なっていきます。pre-release.shが実行できるように、chmodを用いて実行権限を付与します。

gitlab-ci.yml
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.shgit pushが正常で行えるようにuser.nameuser.emailを設定します。ログイン時のユーザ確認、パスワード入力を不要にするため、set-urlにユーザ名、パスワードを設定します。CI_REPOSITORY_URLを使用する事で、リポジトリのURLを省略出来ます。

pre-release.sh
#!/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サーバの運用に関して、まだまだ準備が必要そうなので、徐々に整えていこうと思います。

ご参考

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away