Gitlab-flowの説明


Gitlab-flowのグラフ

Gitlab-flowのブランチ説明

  • feature/hotfixは機能開発、不具合対応ブランチです
  • masterはメインのブランチ
  • pre-production(オプションブランチ)はリリース前のテスト用(git-flowで言うreleaseブランチ)
  • productionはリリース済みのコード置き場

Gitlab-flowの流れ

機能開発

  1. 機能開発するとき、masterブランチからfeature/NAMEブランチを切って開発進む
  2. 開発が終わったらfeatureブランチからmasterにMerge Requestを作成します。
  3. masterをステージング環境へデプロイして、確認する
  4. プリプロダクションへデプロイしたい場合、masterブランチからpre-productionブランチへのMerge Requestを作成します。マージ済みになるとデプロイする
  5. pre-productionブランチからproductionブランチへのMerge Requestを作成します。マージ済みになるとデプロイする

不具合対応

  1. 不具合があるとき、masterブランチからhotfix/NAMEブランチを切って対応を行う
  2. 対応が終わったら、hotfixブランチからmasterにMerge Requestを作成します。
  3. masterをステージング環境へデプロイして、確認する
  4. 確認して、問題がなければhotfixブランチを順次pre-production > production にマージ

注意事項

  • masterに直接コミットしない
  • featureが長生きする場合はmasterから適度にマージするのを忘れずに
  • featureブランチはmasterにマージした後、削除する
  • hotfixブランチは全てのブランチにマージしたら削除する

メリット・デメリット

メリット

  • コミットがダウンストリームへ流れるのですべての環境で全てテスト済みであることを保証します
  • CIはサポートされる
    • Gitlabはcontinuous integrationサービスを提供する。CIサービスを設定手順は下記に通りです
      1. リポジトリに.gitlab-ci.ymlを追加する。
        • .gitlab-ci.ymlはjobを定義するファイルです。
      2. プロジェクトにRunnerの利用を設定する
        • Runnerは.gitlab-ci.ymlに定義するjobを実行するバーチャルマシンです。
    • CIを設定すると、リポジトリにpush,commitする際に、パイプラインのjobを実行される。
      • 例えば:build → 自動テスト → デプロイ
    • jobの実行状態の管理も提供するので、とても便利です。
    • 参照リンクGetting started with GitLab CI
  • CIを使ってlatestステータスで、現在環境ごとにどんなブランチをデプロイされるの確認もやりやすい。

デメリット

  • 複雑(git-flowと同じ)
  • CIが便利ですが、自動実行なのでもし誤commit、pushすると環境にデプロイしちゃう。

お試しのリポジトリ

構成

  • ブランチ
    • master
    • pre-production
    • production
  • CI

    • .gitlab-ci.ymlファイル

      gitlab-ci.yml
      before_script:
       - echo "ジョブを実行する前の準備コマンド"
      
      test:
       script:
        - echo "テスト実施コマンド"
      
      staging:
       type: deploy
       script:
        - echo "ステージング環境にデプロイするコマンド"
       only:
        - master
      
      pre-production:
       type: deploy
       script:
        - echo "pre-production環境にデプロイするコマンド"
       only:
        - pre-production
      
      production:
       type: deploy
       script:
        - echo "本番環境にデプロイするコマンド"
       only:
        - tags
      
      
      • jobの説明
        • before_script: jobを実行する前の準備
        • test job:
          • 内容:(仮)単体テスト実施
          • 実行する条件: 全てのブランチにpush,commitする際に実行する
        • staging job:
          • 内容:(仮)ステージング環境にデプロイ
          • 実行する条件: masterブランチのみにpush,commitの際に実行する
        • pre-production job:
          • 内容:(仮)pre-production環境にデプロイ
          • 実行する条件: pre-productionブランチのみにpush,commitの際に実行する
        • production:
          • 内容:(仮)production環境にデプロイ
          • 実行する条件: タグ付けの際に実行する