Edited at

Gitlab-flowの説明


Gitlab-flowのグラフ

gitlab-flow.png


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環境にデプロイ

          • 実行する条件: タグ付けの際に実行する