より良い環境を求めて このページをアンテナに追加 RSSフィード

2018-05-15

[] git-flowって結構使われてるんだなとブコメ見て思った

GitFlowをやめて本番リリースが楽になった話

ここ。


なんか全然想像できないんだけど、最終確認者がお客さんとか技術に詳しくない社長とか偉い人だとすると

「feature/1 作ったので http://feature1.example.com/ 見てくださいー」

「feature/2 作ったので http://feature2.example.com/ 見てくださいー。あ、ここには feature/1 は反映してないので feature/2 のことだけ考えて下さいね」

「feature/3 は http://feature3.example.com/ ですよー。あ、こっちは feature/1 マージ後の developから派生してるので feature/1 も反映済みです」

とか言って上手く行く気がしないんだが…。

「あれ?feature2は?」とか「feature1入っちゃってるよ?」とか容易に想像できるんだが…。


まず「検証」の定義が違うんだろうけど、技術者が検証しても、最終リリースに何の機能を入れるかの責任者が営業とかマーケティング寄りならやっぱり無理だよね。

マーケティング的に featrue1 は後で」とか「経理の都合でfeature2 は来月にして」とか普通にあるよね。例外的な扱いにならない頻度で。


で、そんなのにgit-flow適用することがそもそも間違っていると言えば、それはそうなんだけど、それはつまりタイトル通りで良かったねということでは…。


ちなみに

この運用してるプロジェクトや会社は他にもあるんじゃないかと思ったけど軽く検索しただけでは見つからなかったのでまとめた。

これ同じようなフロー昔書いたんだけど http://d.hatena.ne.jp/n314/20150704/1435997678 特に名前がないので検索ではヒットしないよね。厳密にやらずゆるくやってる自覚があるので、これが最適なワークフローだ!と言うほどでもないと思ったり。featureブランチとか言わずにただのブランチって言ってるし。

masterとdevelopでできるだけシンプルにしましょうってなるとここに行き着く気がするので、結構やってる人居るんじゃないだろうか。


そもそも git-flow って小規模webに向かなくない?アプリなら分かる。あとJavaとか大規模で厳密にきっちりかっちりやるという体制なら分かる。

2015-07-04

[] Web開発時のGitでのゆるいワークフロー

Gitで何か低レベルの高度な操作が必要だっていうときは、大抵の場合は作業は一つのブランチでしかしない症候群にかかっている。

Gitはブランチやマージが軽いので、作業中のブランチを次々作っても上手い具合にマージしてくれる。



masterが本番、developがテストサーバー

この辺はreleaseでもstagingでも何でも良い。

f:id:n314:20150704165512p:image

一人開発でも効果ある。


masterからissue-1ブランチを切る

issue-1でcommit => developにマージ => テストサーバーで確認 => ちょっとここ直して〜

issue-1でcommit => developにマージ => テストサーバーで確認 => ちょっとここ直して〜

issue-1でcommit => developにマージ => テストサーバーで確認 => 確認中...時間がかかりそう

暇なのでmasterからissue-2ブランチを切る

(※ issue-1 を残したまま masterからissue-2 を作る。issue-1 の中で、あるいはdevelopから派生して別の作業をしてしまうと後で面倒なことになる。)

issue-2でcommit => developにマージ => テストサーバーで確認 => ちょっとここ直して〜

issue-2でcommit => developにマージ => テストサーバーで確認 => OK、本番に反映して〜

masterにissue-2をマージ => 本番反映

issue-1 はあとここだけ直して〜

issue-1でcommit => developにマージ => テストサーバーで確認 => OK、本番に反映して〜

masterにissue-1をマージ => 本番反映

masterとdevelopの差異が無い場合は適度にmasterにdevelopをマージ、developにmasterをマージ(単に履歴のグラフ表示を見やすくするため)



ちなみにPHPなので、デザイナーサーバーに直接画像をアップしたりHTMLを書き換えたりすることもある。

その場合は適当なタイミングでテストサーバーあるいは本番サーバー上で直接commit => push する。

次回pullせずに気付かずにpushしても弾かれるので特に問題は起きない。

2014-06-19

[] DebianにGitonomyをインストール

外部のサーバーで一般ユーザー権限でやろうとするとかなりめんどい。


http://gitonomy.com/doc/gitonomy/master/installation/

基本はここに書いてあるんだけども…。


(www-dataはapache実行ユーザー)

  1. linuxアカウント、DBアカウントでgitonomyユーザーを作る、gitonomy DBを作る
  2. gitonomyにグループwww-data追加
  3. www-dataとgitonomyアカウントのumaskを002にする
  4. ダウンロードしたファイルを解答してapacheのデフォルトドキュメントルートにする
  5. app/cache app/logs の権限を2775、所有権のグループをwww-dataにする
  6. app/config/* にグループ書き込み権限追加、グループをwww-dataにする
  7. w3mで localhost/install.php にアクセス
    • 各項目を設定する
    • Secretは適当にランダム文字を入れた
  8. ./install.sh を実行する
  9. Apacheの設定をドメインに変えてブラウザでアクセスして確認
  10. Administration → configuration の設定 (特にメール送信)
  11. app/repositories ディレクトリを作り、SGID、グループ設定
  12. cron設定

new usersで、何故かパスワード入力欄が無い。

なので、ログアウトしてRegisterする。

adminでログインし直して、権限を付与、再びログインし直し。


プロジェクト作成などのテスト。



それからcron設定。




……。非常に疲れた。

Gitlabが重いから乗り換えようと思ってたけど、これはどうなんだろう。

バージョン1になるまで待った方が良いのかもしれん。

そもそもSymfonyとかDoctrineとか使う必要なくね?

gitwebとまでは言わないからもう少し軽くしてほしい。


あとユーザー管理が謎。

Gitlabみたいな内向きというよりは、PHPでもgithub作ろうみたいなノリなのか、そもそもターゲットを何も考えてないのかも。

2013-03-29

[] GitLab CI が連携できないのでカッとなって簡単なhookを作った

https://github.com/nishimura/gitlab-simple-hook

メールを送る、コマンドを実行する機能を作った。

コマンド実行できるからあとはスクリプトで何とかしてくださいという感じで。


追記:

コマンドの実行結果をメールに追加するようにしたので、phpunit --verbose などと書いておけばテスト結果もメールで来る。

あと多分githubからも使える。試してないけど。

2013-03-28

[] GitLab CI のインストール

前回の日記で、どうも参考資料が少ないと思ったら GitLab は5.0にバージョンアップしたところだったのね。

http://blog.gitlabhq.com/gitlab-5-dot-0-has-been-released/


もう少し待って様子を見た方がいいのか不安が残るが GitLab CI を入れる。

https://github.com/gitlabhq/gitlab-ci/blob/master/doc/installation.md


またまた危険な感じがするがユーザーを作らずにいく。

RVMを何度も入れるのが無駄なので。

そしてPostgreSQLで。

https://github.com/gitlabhq/gitlab-ci/pull/75

2.1 stable にはマージされている模様。

su postgres
createuser gitlab_ci -P
createdb -O gitlab_ci gitlab_ci
exit

su git
cd
bash --login

git clone https://github.com/gitlabhq/gitlab-ci.git
cd gitlab-ci/
git checkout 2-1-stable

mkdir -p tmp/pids
vi Gemfile
# gem 'pg' 指定

bundle --without development test

cp config/database.yml.postgresql config/database.yml
vi config/database.yml

bundle exec rake db:setup RAILS_ENV=production
bundle exec whenever -w RAILS_ENV=production

vi config/unicorn.rb
# gitlab_ci のpath書き換え

# rootで
wget https://raw.github.com/gitlabhq/gitlab-ci/master/lib/support/init.d/gitlab_ci -P /etc/init.d/
chmod +x /etc/init.d/gitlab_ci
update-rc.d gitlab_ci defaults 21
vi /etc/init.d/gitlab_ci
# ユーザーがgitなのでそれに関係する箇所を書き換え
/etc/init.d/gitlab_ci restart

ApacheのVirtualHost設定

<VirtualHost *:80>
    ServerName gitlab-ci.example.com
    ServerAdmin admin@example.com
    DocumentRoot /home/git/gitlab-ci/public

    <Directory /home/git/gitlab-ci/public/>
        Options Indexes FollowSymLinks -MultiViews -ExecCGI
        AllowOverride All
        PassengerResolveSymlinksInDocumentRoot on
    </Directory>
</VirtualHost>

エラー・・・。

Redmine用に作ったPassenger環境で動かしているから、バージョンが合わないっぽい。


Redmine用の環境でもgitlab-ci をダウンロードして

bundle --without development test

を実行し、依存関係のあるgemを入れる。


これで完了。



ビルドタスクのScriptsでは

cd scrpit
./test.sh

のようには書けないのにハマった。一行で書かないとカレントディレクトリが戻る。


そしてGitLabとの連携がうまくいかない…。

https://github.com/gitlabhq/gitlab-ci/issues/41

Issueに上がってる。

2013-03-27

[] GitosisからGitLabに乗り換えメモ

Gitosisはパッケージで入れたものを使っていた。

リポジトリが増えてGitosisの設定ファイルも増えてきたのでGitLabを使ってみる。


https://github.com/gitlabhq/gitlabhq/blob/5-0-stable/doc/install/installation.md

ここを参考に、ちょっと変えつつインストール。


sudo adduser --disabled-login --gecos 'GitLab' git
usermod -a -G git www-data
su git
cd
bash
git clone https://github.com/gitlabhq/gitlab-shell.git
cd gitlab-shell/
cp config.yml.example config.yml
vi config.yml
# urlを変える

mkdir ../repositories

※ 追記:インストールしてみて、gitosisユーザーを使うとpush出来なかったので素直にgitユーザーを追加して/home/gitを使うやり方に変えた。

※ 追記2:やり直したけどまだ無理・・・

※ 追記3:以前のgitosisユーザーでunicormやsidekiqのサービスが落ちてなかったのが原因だった。gitlab-shellがgitosis環境で実行されてしまっていた。gitlab起動スクリプトを間違えた場合はきちんと落ちているか確認しましょうという教訓。それからRVMを使っている場合は ~git/.ssh/environment に環境変数を設定*1も必要だった。


rubyを入れるのを忘れていた。

cd
\curl -#L https://get.rvm.io | bash -s stable --ruby

前は出来たのに、今回はsudoでパスワードを聞かれて停止する。

Searching for binary rubies, this might take some time.
No binary rubies available for: debian/6.0.7/x86_64/ruby-1.9.3-p392.
Continuing with compilation. Please read 'rvm mount' to get more information on binary rubies.
Installing requirements for debian, might require sudo password.
[sudo] password for gitosis: 
rvm --version

rvm 1.19.0 (master) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]

logディレクトリを見ると、ダミーパッケージgit-coreをインストールしようとしている?色々見たけどsudoを使わないでやろうとすると進まないので前回入れたバージョンを指定してインストール。

\curl -#L https://get.rvm.io | bash -s stable --version 1.18.19 --ruby=1.9.3

こういう指定ができるのがいいね。

source ~/.rvm/scripts/rvm 

gem install bundler


./bin/install

cd

git clone https://github.com/gitlabhq/gitlabhq.git gitlab
cd gitlab
git checkout 5-0-stable
cp config/gitlab.yml.example config/gitlab.yml
vi config/gitlab.yml
# hostの変更、emailの変更

mkdir ../gitlab-satellites
mkdir tmp/pids
cp config/unicorn.rb.example config/unicorn.rb

cp config/database.yml.postgresql config/database.yml
vi config/database.yml
# database、username、password設定、postgresqlユーザーとデータベースを作る

# rootで
aptitude install libicu-dev
aptitude install libxslt1-dev
aptitude install redis-server

gem install charlock_holmes --version '0.6.9'

vi Gemfile
# Gemfile の gem pgの後の group: postgres を削除
bundle install --deployment --without development test
bundle exec rake gitlab:setup RAILS_ENV=production

# rootで
curl --output /etc/init.d/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/master/init.d/gitlab
chmod +x /etc/init.d/gitlab
update-rc.d gitlab defaults 21
/etc/init.d/gitlab restart

bundle exec rake gitlab:env:info RAILS_ENV=production
bundle exec rake gitlab:check RAILS_ENV=production

# テスト
bundle exec rails s -e production

依存関係はエラーが出るたびにメッセージを見てインストールした。エラーメッセージが分かりやすくて良い。

gitlab:check でエラーが出てるけどメッセージに従って設定しても直らないみたい。気にせず続けた。

ip:3000 でアクセスしてテスト。


Apacheで動かす設定。

http://blog.iss.ms/2012/09/02/030507

http://d.hatena.ne.jp/akishin999/20120403/1333413971

だいたいここの通り。


ログインなどはできたけど、エラーでプロジェクトが作成できない。

https://github.com/gitlabhq/gitlab-public-wiki/wiki/Trouble-Shooting-Guide

解決方法はここに書いてあった。

echo "deb http://backports.debian.org/debian-backports squeeze-backports main" >> /etc/apt/sources.list
apt-get update
apt-get -t squeeze-backports install redis-server

操作はだいたいgithubと同じ。

*1: これも Trouble Shooting Guide https://github.com/gitlabhq/gitlab-public-wiki/wiki/Trouble-Shooting-Guide に書いてあった

2012-03-21

[] gitコマンドの出力をパイプする場合の色付け

忘れるのでメモ。

color.ui = always を使うことは、まずないでしょう。たいていの場合は、カラーコードを含む結果をリダイレクトしたい場合は Git コマンドに --color フラグを渡してカラーコードの使用を強制します。ふだんは color.ui = true の設定で要望を満たせるでしょう。

https://github.com/progit/progit/blob/master/ja/07-customizing-git/01-chapter7.markdown

つまり

git diff --color | lv -c

または

git diff --color | less -R

などのようにする。