megadreams社会人1年目のエンジニアにおいて開発環境の構築にはかなり時間がかかるもの。わけの分からないエラーと戦ったり、他の人の環境では動いても自分の環境では動かないなどそういう経験がある人も多いのではないでしょうか?今回は、GitHubやJenkinsと連携した開発環境を構築する上で出会ったrsyncコマンドとの出会いについてお話したいと思います。rsyncコマンドとは、ファイルなどのバックアップや同期を行うために使用されるコマンドで、変更分を検出して差分のみを転送することができ、cpコマンドと違って効率的なバックアップを行うことができます。ネットワーク経由でもバックアップや同期が行えたり、sshなどのリモートシェル経由でも利用が可能であるためとても便利なコマンドだそうです!このrsyncコマンドを知った瞬間、自分たちが構築したい環境を簡単に出来るではないか!と凄く感動しました!まずは、使いたいと思った背景をご説明したいと思います。目指すべく開発環境は、ソースコードをGitHubで管理し、継続的インテグレーションを導入するためにJenkinsを利用してサーバへ自動デプロイされる仕組みを構築することです。上の図のようにローカル環境で実装し、ある機能が実装されるとcommitしてGitHubへpushします。その後GitHubからJenkinsへデプロイされテストが実行されます。テストが正しく通ればサーバへ反映されるという仕組みです。ローカル環境だけではテストが出来ない場合もあるため、テストサーバへはFTPを使ってファイルをあげてサーバ上でもチェックが出来る環境を構築したいと考えていました。テスト環境にFTPでファイルをあげた際にずっとそのファイルが残り続けるのは良くないため、ローカルからGitHubへpushされJenkinsが動いた時には、サーバにあるコードは全てGitHubにcommitされている最新版へ戻すような設定を行いたいと思っていました。それを実現するためにjenkinsでGitHubからとってきたファイルをコピーする方法やそもそもテストサーバのファイルもgitで管理しちゃおうなど色々考えました。1:ファイルをコピーして同期jenkinsはテストを行う前にgitHubから最新版のデータをpullしてきます。その時には/var/lib/jenkins/以下にworkspaceというディレクトリが出来、そこにソースコードがpullされる仕組みになっています。そのファイルをサーバで設定されているドキュメントルート以下にコピーしようという考えです。stashコマンドを使おうという考えです。stashは,変更を一時的に退避させるコマンドであり実行するとcommitされたところまで状態を戻すことが出来ます。とアドバイスを頂いたのがrsyncとの初めての出会いです。next/オプションの説明についてはこちらを参考にどうぞ:はじめてrsyncを使う方が知っておきたい6つのルール上記の例だとpreディレクトリ以下にあるファイルをnextディレクトリに同期させるコマンドになります。–deleteオプションをつけることでnextディレクトリにはあってpreディレクトリにないファイルを削除することができます。次回は、これらの開発環境を整えるための手順を書いていきたいと思います。site.プロフィール某IT企業エンジニアの社会人4年目。アジャイル開発.HTML5,Objective-CなどでWebアプリの開発。Chefを使ったサーバ構築の自動化にも取り組んでいます。