Thursday, March 31, 2016

GitLab にプッシュすると差分が自社サイトに FTP されるようにしてみた

こんにちは、すぎもとです。

普段は別のブログに書いていますが、今回は社内のシステム環境の話だったのでこちらにポストしてみます。

Aegif のコーポレートサイトは静的サイトで構築されています。最近リニューアルしました。ところが記事の更新などがあったとき、マーケティングを担当にしている同僚が手で涙ぐましい修正をしていたことが判明しまして、JavaScript で一部の作業を自動化をすることにしたんですね。

そうやって、やはり複数人が係わるようになると、編集→更新の流れをもう少し楽にしたいなという話が出てきました。まずは社内の Git リポジトリ環境(GitLab)にサイトのソースを置くことに。でも、ここまでやったら、プッシュしたら自動で本サイトに反映したいということになりますよね。

Web サイトが置いてあるサーバは Git が使えないので、GitLab 側からFTPすることにしました。やったことは以下の通りです。

GitLab のあるサーバは Ubuntu 14.04 です。まずは git-ftp を導入します。デフォルトでやってみたら最新が落ちてこなかったので PPA を追加して、apt-getします。

# add-apt-repository ppa:resmo/git-ftp
# apt-get update
# apt-get install git-ftp

つぎに GitLab が管理している Git リポジトリにカスタムのサーバサイドフックを作成し、プッシュされたときに FTP されるように設定します。

GitLab の管理するリポジトリはサーバのローカルパスで言うと


/var/opt/gitlab/git-data/repositories/aegif/CorporateSite.git 

みたいな場所に保管されます。このリポジトリ直下に

custom_hooks 

ディレクトリを作成し、そのなかに post-receiveという名前でスクリプトを作成します。スクリプトは以下のような記述にしました。

#!/bin/bash 
cd /path/to/tempdir/CorporateSite 
git --git-dir=.git pull 
git --git-dir=.git ftp push --branch master --user XXXX --passwd xxxxx ftp://xxxx.jp:21/pathtodir

このスクリプトのオーナーは git:git にしておき、実行権限を付けておきます(GitLabがキックするので)。なお Git コマンドを発行する行には上述の通り、 --git-dir=.git がないと怒られます。

注意点としては、普通の Git リポジトリなら custom_hooks 内で直接 git ftp できてしまうんですが、 GitLab が使う Git リポジトリは bare リポジトリなので、いったんサーバのローカル環境でで別の場所に取得してしてそこから FTP します。

ですので、サーバローカル内で手動 git clone を /path/to/tempdir/CorporateSite にしておきます。さらに FTP サーバ側に差分を送ることが出来るように、初回は手動で git ftp init をしてファイル群をアップロードしておきます。

以後はプッシュされると差分だけが上がるようになります。今回はステージング環境は存在しなかったので、master から直接本番環境にあげてしまっています。 けっこう時間がかかることが予想できたので nohupで起動させて放置しておきました。

nohup git ftp init --branch master --user XXXX --passwd xxxxx ftp://xxxx.jp:21/pathtodir > /path/to/git-ftp-log&

初回アップロードは1時間くらいかかりました。その後、試しにテストファイルを手もとからプッシュして、自社サイトの更新を確認しました。

こう書くとけっこう簡単に作業したか見えますが、思ったより時間がかかってしまいました。というのも git-ftp で出てくる記事が古いんですよね。おかげで、余計なライブラリとか入れちゃったり、bare リポジトリの存在をすっかり忘れて、アップロードできないと悩んだりして無駄に時間を費やしてしまいましたよ。

今こそほとんどワンライナーで出来ちゃいますが、昔はそこまで簡単じゃなかったようですね。イマドキの Web サーバはサーバのほうに Git が入ってたりしますし、そもそもサイト自体も動的なことがおおかったりするわけで、 FTP で更新するというので情報が少ないのも仕方ないですね。

今回、この試みで、うちの会社では技術者以外の同僚にも Git をつかってもらうことになりました。とりあえず GUI で使ってもらうべきだろうと SourceTree を入れてもらいましたが、 Mac 版と Windows 版でだいぶ構成が違ったり(更新担当者はどちらも使います)無償版でも無償ライセンスの登録が必要になっていたりと導入自体にハードルがあってなかなか大変。ひとまずはブランチなどを使わずに、「うっかり壊しても技術部門に相談してくれればもとに戻せるリポジトリ」みたいな扱いで master 直接プッシュでまずは運用をはじめてみました。

この非技術者による Git 運用についてはまた軌道に乗ったらお伝えできたらと思います。

Friday, March 25, 2016

Alfresco勉強会#32 Alfresco Bulk Import toolのご紹介


こんにちは。ご無沙汰しております、Aegifのそうまです。

先日3月23日(水)に、弊社オフィスにて第32回Alfresco勉強会が開催され、そこで「Bulk Import toolのご紹介」という内容で発表させていただきました。

「Bulk Import tool」は名前の通り、コンテンツをまとめてAlfrescoへインポートするツールで、以前はAdd onとして提供されていたのですが、現在(Alfresco 4.0以降)はAlfrescoの配布物に含まれておりインストールした直後から使えます。

他のインポート手段に比べ比較的高速で、ファイルの複数バージョンを設定したり、メタデータを与えることが出来たりと手軽な割に便利なツールなのですが、Alfrescoを利用されていても意外と知らない方が多いように感じていましたので、今回紹介させていただきました。

Alfrescoを使いはじめたり利用をしていく上で、これまで別の場所に蓄積されたコンテンツをAlfrescoへインポートする機会は多いのではないかと思います。その際に利用可能なインポートツールの1つとして参考にしていただけると幸いです。




次回のAlfresco勉強会は5月25日(水)です。たくさんの方のご参加お待ちしております。参加登録は以下のリンクからお願いします。

第33回Alfresco勉強会

もちろん発表も大歓迎です。発表はできないけどこういう内容が知りたい、こんなところで困っているから教えてほしい、といった要望があればconnpassのフィードに投稿していただければと思います。

Alfresco勉強会#32 Alfresco Community 5.1.eの機能紹介

こんにちは。てらしたです。ご無沙汰しております。しばらく書いていなかった上に今回は他のメンバーがAlfresco勉強会で発表した内容の紹介という手抜きっぷりですがご容赦ください・・・。

先日3月23日(水)に第32回のAlfresco勉強会が開催されました。発表は2つあり、1つは「AlfrescoのBulk Import toolのご紹介」(詳細はこちら)、もう1つはここでご紹介する「Alfresco Community 5.1.eの機能紹介」でした。

5.1.eで新たに追加された機能としてShare UIからのモデル定義とスマートフォルダの機能を紹介してもらったんですが、個人的にはスマートフォルダで助かる場面は色々あるんじゃないかと思いました。Alfrescoにすでに入っているコンテンツを何らかの属性をキーに引っ張ってきて横断的に見たいってケースはそれなりにあるんじゃないかと思うんですよね。もともとWorkdeskというAlfrescoとは独立した別のアプリケーションを使えば実現できた機能ではあるんですが、Alfrescoの標準機能として使えるようになったのは大きいと思います(Workdeskは開発終了したみたいですし)。

Share UIからのモデル定義も欲しかった人にはうれしい機能だと思うので、スマートフォルダも含めて詳細については以下の発表資料をご覧いただければと思います。


次回のAlfresco勉強会は5月25日(水)です。たくさんの方のご参加お待ちしております。参加登録は以下のリンクからお願いします。

第33回Alfresco勉強会

もちろん発表も大歓迎です。発表はできないけどこういう内容が知りたい、こんなところで困っているから教えてほしい、といった要望があればconnpassのフィードに投稿していただければと思います。