Co-operative Web

Co-operative Webは2006年に設立されました。
顧客と労働者の両方にとって公平でありつつ、優れたソリューションを提供しています。

IT、リナックスの視点からのBuildMasterの大きなメリット

Co-operative Webはテクノロジーを愛しています。
現実の世界で起きる課題に対して、テクノロジーを活用して解決することが彼らの目標です。それは、未来のサッカーのスターを見つけることや、イギリス国内の水の汚染状況かもしれませんし、カンファレンンス参加者に便利な技術を用意することや、空港からリゾート地への乗り継ぎの予約や、ピクセルで完璧なウェブサイトをデザインから構築することや、内部のレガシーアプリケーションをサポートすることかもしれません。

Co-operative Webは、インターナショナルな銀行から小規模なソーシャル企業、スタートアップ企業からデザイン事務所まで、さまざまな種類の企業を業務をおこなっています。既存のソリューション(Co-operative Webによって設計されていないソリューションでさえも)をゼロから完全に修正し、サポートしています。また、いくつかのプロダクトの販売も同時におこなっています。

BuildMasterが、開発者、エンジニア(リリースエンジニアを含む)、チームリーダーのみが使用するように設計されており、「Windows shops」のみを対象としていると考えられているとしたら、それは完全な誤解です。BuildMasterは実際にDevOpsのIT側に多くのユーザーを Linuxユーザーと同じように抱えています。

ITの専門家の問題として、これらの人々は、アプリケーションのコード内の新機能がリリースされた時よりも、インフラストラクチャとその構成の維持にもっと関心があります。 これは、高品質のソフトウェアをより早く、より確実にリリースする必要性の挑戦とは異なりますが、同様に有効な方法です。 WindowsとLinuxの間の議論は歴史的なもので今日も続いています。 Inedoはどちらかの側につくことよりも、すべての人に統合と機能を提供することを好みます。 以上のように、Co-operative WebでBuildMasterを使用しているチームは、多くのITサイドユーザーの1人であり、Co-Operative Webは、Linuxサーバー用にBuildMasterを使用することを選択しました。

チャレンジ

今日ではテクノロジーの世界で多くの企業が誕生しているのと同じように、手動でのデプロイはソフトウェアをデプロイするだけというだけのことでした。 設定を変更する必要がある場合は、ファイルを手動でサーバーにアップロードして、Puppetスクリプトなどを実行します。何か問題が生じた場合は、ファイルを再度編集してバックアップする必要があります。

さらに、組織内のほとんどの開発は、ラップトップ上の「バーチャルボックス」を介してPHPで行われます。 開発者はコードをGitに直接プッシュし、GitをLinuxサーバーにコピーします。InedoプロダクトのユーザーのDavid Eatonによると、これは非常に不便でややこしいものでした。 実際にそれは苦痛さえ伴うようなものと言えます。 彼によると、これらの作業は繰り返す必要があり、時間を浪費し、チーム内の士気を下げるようなものでした」

ビジネスが進化し成長するにつれて、自動化への移行は必要不可欠なものになるのです。

解決

Co-operative Webのチームメンバーは最適なツールを探す中で、BuildMasterのLinux統合、サポート、そしてその機能を利用することが最適な方法ではないかと考えました。

Co-operative Webは今までの開発を維持する一方、次のような方法でBuildMasterを使用してデプロイを自動化しました:開発者がコードをGitにプッシュしてビルドしたい場合、BuildMasterはソースをGitから取得し、 ファイルをライブサーバーに送信します。 その後、BuildMasterはLinuxサーバー上のファイルを解凍し、Puppetスクリプトを実行するライブサーバー上でbashスクリプトファイルを実行して、必要な場所にファイルをインストールします。 BuildMasterはビルドとリリース番号のGitにラベルを入れ、完了した旨のEmailを送信します。

このように、PHPコードのLinuxサーバーへのデプロイを自動化することは、非常に簡単で自動化されたプロセスになっています。 以上を具体的に見たい上級者のコーダーのために、こちらのスクリプトを用意しています。

結果

David Eaton氏によると彼らがまとめたプロセスは、「プロセス自体はシンプルそのものだが、非常に効果的で時間の大きな節約につながります」とのことでした。 さらに、「BuildMasterを使用することで、以前よりもずっと多くのものを試すことができ、達成する必要のあるタスクに合わせることができます」とも述べています。

「Linuxの統合とサポートは非常に重要です。BuildMasterを使っていなかったら、私たちは途方にくれることになっていたでしょう。私は様々なツールを日々チェックしていますが、その中で本当に効果的と言えるツールはほんの一握りです。そういう意味で我々は非常に運がよかったと言えます」

最後に

下記は、Co-operative WebがBuildMasterで使っているスクリプトです。 ユーザーのDavid Eaton氏はこう述べています「スクリプティングの観点からはかなりシンプルだが、これは私たちに大きな力をもたらす」Inedoでは、BuildMasterがどのような環境や使用者でもさらに使いやすくするための改良を日々おこなっています。

                ##AH:UseTextMode
                # Deploy NATW UAT
                for server BUILDMASTER3
                {
                    # get source from git
                    Get-Latest-Source
                    (
                        From: gitlab _NATW_NATWwebapp.git|UAT:,
                        ClearTarget: True,
                        To: C:\BuildMaster\deploy\NATW\,
                        Provider: "Git (NATW)"
                    );

                    Create-ZipFile
                    (
                        Name: C:\BuildMaster\deploy\zips\NATWarchive.zip,
                        Directory: C:\BuildMaster\deploy\NATW\,
                        Overwrite: True
                    );
                }

                # delete files on NATW server
                for server NATW UAT
                {
                    Exec
                    (
                    FileName: /bin/rm,
                    Arguments: -rf /bm/upload,
                    ErrorOutputLogLevel: Information,
                    SuccessExitCode: ignore

                    );
                }

                # uload to NATW uat server
                for server BUILDMASTER
                {
                    Transfer-Files
                    (
                    Include: NATWarchive.zip,
                    FromDirectory: C:\BuildMaster\deploy\zips,
                    ToDirectory: /bm/upload,
                    FromServer: BUILDMASTER,
                    ToServer: NATW UAT,
                    DeleteTarget: True
                    );
                }

                # unzip files
                for server NATW UAT
                {
                # Extract-ZipFile /bm/upload/NATWarchive.zip
                Exec
                    (
                    FileName: /bin/unzip,
                    Arguments: -q -o /bm/upload/NATWarchive.zip -d /bm/upload/
                    );

                    Delete-Files NATWarchive.zip
                    (
                        Directory: /bm/upload
                    );
                }

                # delete local files
                    for server BUILDMASTER
                    {
                    Delete-Files *
                    (
                        Directory: C:\BuildMaster\deploy\NATW\
                    );

                    Delete-Files NATWarchive.zip
                    (
                        Directory: C:\BuildMaster\deploy\zips\
                    );
                }

                # Install app on NATW server
                for server NATW UAT
                {
                    # set file to executable
                    Exec
                    (
                        FileName: /bin/chmod,
                        Arguments: u+x /bm/upload/server/configuration/uat-pre-setup.sh,
                        ErrorOutputLogLevel: Information,
                        SuccessExitCode: ignore
                    );

                    # execute puppet script
                    Exec
                    (
                        FileName: /bm/upload/server/configuration/uat-pre-setup.sh,
                        ErrorOutputLogLevel: Information,
                        SuccessExitCode: ignore
                    );

                    # set file to executable
                    Exec
                    (
                        FileName: /bin/chmod,
                        Arguments: u+x /bm/upload/server/configuration/setup.sh,
                        ErrorOutputLogLevel: Information,
                        SuccessExitCode: ignore
                    );

                    # execute puppet script
                    Exec
                    (
                        FileName: /bm/upload/server/configuration/setup.sh,
                        ErrorOutputLogLevel: Information,
                        SuccessExitCode: ignore
                    );
                }

                for server BUILDMASTER
                {
                    Apply-Label
                    (
                        Label: Deployed_$ReleaseNumber.$BuildNumber,
                        To: gitlab_NATW_NATWwebapp.git|UAT:,
                        Provider: "Git (NATW)"
                    );

                    Send-Email
                    (
                        To: @(dev1@web.coop,NATW@web.coop),
                        Subject: NATW UAT deployed $ReleaseNumber.$BuildNumber,
                        Text: >>NATW UAT deployed $ReleaseNumber.$BuildNumber
                BUILDMASTER>>
                    );
                }