Posted at

JenkinsでGitをポーリングしてクラウドストレージにアップロードする

More than 3 years have passed since last update.

Gitを定期的に監視して、変更があったブランチを全てニフティクラウドの、クラウドストレージに上げてみたいと思います。


ニフティクラウドの設定


  • 適当な名前のバケットを作成しておきます


バケット名

test-app



s3cmdの設定

Jenkinsからニフクラストレージを操作するために、s3cmdというツールを使います。

s3cmdはAwsSS3のツールですが、ニフティクラウドでも互換性があって使えるみたいですね。


  • インストール

apt-get install s3cmd


  • 設定

s3cmd --configure

アクセスキーと、シークレットーキーを入力
vi ~/.s3cfg
以下3行を変更
host_base = ncss.nifty.com
host_bucket = %(bucket)s.ncss.nifty.com
signature_v2 = True


Jenkinsの設定


  • プラグインの管理より、GIT pluginを入れておきます


ジョブの作成


  • ソースコード管理でGitを選択

  • Repository URL、Credentialsを入力

  • 全てのリポジトリを対象にしたいため、 Branch Specifierは「*」を指定しておきます。

  • ビルド・トリガのSCMをポーリングにチェックを入れ、スケジュールに以下のように入力します

H/5 * * * *

これで、5分毎にgitを監視してくれます。


  • ビルド欄より「シェルの実行」を選択し、以下のように入力します

#!/bin/bash

for remote_branch in `git branch -a | grep remotes`; do
remote_name="$(echo -n "$remote_branch" | cut -d/ -f2)"
branch_name="$(echo -n "$remote_branch" | cut -d/ -f3-)"
git checkout -b $branch_name $remote_name/$branch_name
git archive --format=tar HEAD | gzip > module.tar.gz
path_name=${branch_name/\//_}
s3cmd put module.tar.gz s3://test-app/$path_name/module.tar.gz
rm -f module.tar.gz
done

全てのブランチをアーカイブして、クラウドストレージにアップロードします。

実行されると、クラウドストレージの作成したバケットの中にブランチ名と同じ名前のフォルダが作成されます。

フォルダの中にアーカイブされたモジュールが格納されています。

※クラウドストレージのフォルダ名には「/」が使えないみたいなので、「_」に変更してます。

 例 fix/branch ⇒ fix_branch