TECH
中津川 篤司

開発の自動化を促進するJenkinsをセットアップする

CI(Continuous Integration。継続的インテグレーション)という言葉も一般的に用いられるようになってきました。CIサーバとして有名なのがオープンソース・ソフトウェアのJenkinsです。今回はこのJenkinsをCloudGarageのインスタンスにセットアップしてみます。 利用するディストリビューション 今回はUbuntu 18.04を用いています。16.04でも操作は変わらないはずです。 必要なスペック Installing Jenkinsによると、メモリ256MB、ストレージ1GBが最低限のスペックとなっています。推奨としてはメモリ1GB以上、ストレージ50GB以上となっています。CloudGarageのインスタンスであれば特に問題ないでしょう。 Jenkinsのインストール インストール作業はInstalling Jenkinsに書いてあるコマンドを実行するだけなのですが、デフォルトではJavaが入っていないためにエラーが出ます。 # sudo apt-get install jenkins Reading package lists... Done Building dependency tree Reading state information... Done : See "systemctl status jenkins.service" and "journalctl -xe" for details. invoke-rc.d: initscript jenkins, action "start" failed. ● jenkins.service - LSB: Start Jenkins at boot time Loaded: loaded (/etc/init.d/jenkins; generated) Active: failed (Result: exit-code) since Fri 2018-11-23 20:47:40 JST; 11ms ago Docs: man:systemd-sysv-generator(8) Process: 2359 ExecStart=/etc/init.d/jenkins start (code=exited, status=1/FAILURE) Nov 23 20:47:40 jenkins systemd[1]: Starting LSB: Start Jenkins at boot time... Nov 23 20:47:40 jenkins jenkins[2359]: ERROR: No Java executable found in current PATH: /bin:/usr/bin:/sbin:/usr/sbin Nov 23 20:47:40 jenkins jenkins[2359]: If you actually have java installed on the system make sure the executable is in the aforementioned path and that 'type -p java' returns the java executable path Nov 23 20:47:40 jenkins systemd[1]: jenkins.service: Control process exited, code=exited status=1 Nov 23 20:47:40 jenkins systemd[1]: jenkins.service: Failed with result 'exit-code'. Nov 23 20:47:40 jenkins systemd[1]: Failed to start LSB: Start Jenkins at boot time. dpkg: error processing package jenkins (--configure): installed jenkins package post-installation script subprocess returned error exit status 1 Processing triggers for ureadahead (0.100.0-20) ... Processing triggers for systemd (237-3ubuntu10.3) ... Errors were encountered while processing: jenkins E: Sub-process /usr/bin/dpkg returned an error code (1) このエラーが出る場合はJavaをインストールしましょう。実行のみのJREで大丈夫です。 # sudo apt install openjdk-8-jre -y この後、再度インストールを実行します。これは公式サイトに書かれているコマンドを実行すればOKです。 wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add - sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list' sudo apt-get update sudo apt-get install jenkins 初期セットアップ http://インストールしたインスタンスのIPアドレス:8080 にアクセスすると初期セットアップがウィザード形式で進められます。特に問題ないと思いますが、最初に /var/lib/jenkins/secrets/initialAdminPassword に書かれた内容をパスワードとして使います。これをコピーしておきましょう。 ~# cat /var/lib/jenkins/secrets/initialAdminPassword 2cf...869 後はウィザードに沿って進めていけばOKです。 まとめ CIではコードを取得してビルドしたり、テストを実行するのでストレージが高速であるとそれだけ速くテストを行えるでしょう。CloudGarageのインスタンスにはぴったりな使い方と言えそうです。ぜひ試してみてください!

TECH
中津川 篤司

インスタンスのスペックを変えてみよう。スケールアップ/ダウン機能の使い方

CloudGarageではリソース(CPU/メモリ/ストレージ)を動的に変更できる機能があります。あらかじめ割り当てられているリソースを自由に配分できるのがCloudGarageの特徴ですが、もし運用している中でスペック不足を感じたりしたら、さらに追加できます(スケールダウンもできます)。 今回はスケールアップ、スケールダウンを行う方法を紹介します。 スケールアップ前 今回、最初のスペックは 1CPU / 2GB / 50GB となっています。コマンドレベルで確認します。 CPU数 # grep cpu.cores /proc/cpuinfo | sort -u cpu cores : 1 メモリ # free total used free shared buff/cache available Mem: 2041340 118100 1518084 644 405156 1772616 Swap: 2097148 0 2097148 ストレージ # df -BM Filesystem 1M-blocks Used Available Use% Mounted on udev 985M 0M 985M 0% /dev tmpfs 200M 1M 199M 1% /run /dev/vda1 49447M 1663M 47768M 4% / tmpfs 997M 0M 997M 0% /dev/shm tmpfs 5M 0M 5M 0% /run/lock tmpfs 997M 0M 997M 0% /sys/fs/cgroup /dev/vda15 105M 4M 102M 4% /boot/efi tmpfs 200M 0M 200M 0% /run/user/0 スケールアップ ではこのインスタンスをスケールアップします。スケールアップはインスタンス詳細画面から行います。スケールアップ・ダウンボタンをクリックします。 出てきたダイアログを使って、新しい設定を入力します。今回は2CPU / 4GB / 100GBにします。 最後に確認が出て、実行となります。 スペックの変更が終わって、再度同じコマンドを実行します。 CPU # grep cpu.cores /proc/cpuinfo | sort -u cpu cores : 2 メモリ # free total used free shared buff/cache available Mem: 4039588 90072 3744240 640 205276 3726616 Swap: 2097148 0 2097148 ストレージ # df -BM Filesystem 1M-blocks Used Available Use% Mounted on udev 1960M 0M 1960M 0% /dev tmpfs 395M 1M 394M 1% /run /dev/vda1 99068M 1725M 97328M 2% / tmpfs 1973M 0M 1973M 0% /dev/shm tmpfs 5M 0M 5M 0% /run/lock tmpfs 1973M 0M 1973M 0% /sys/fs/cgroup /dev/vda15 105M 4M 102M 4% /boot/efi tmpfs 395M 0M 395M 0% /run/user/0 ちゃんと変更されているのが分かります。 スペックアップ・ダウンの利点・欠点 インスタンス自体は同じものになるので、SSHなどはそのまま使えます。なお、スペック変更は一度インスタンスを停止しなければいけません。そのため、運用中のサーバで行うのは難しいでしょう。また、ストレージはスペックアップできますが、スペックダウンできませんので注意してください。 スペックアップ、ダウンともに大体5分程度で終わります。ただし、ストレージは新しいストレージ容量1GBにつき1分程度かかるので注意してください。例えば今回のように100GBにした場合100分程度かかることになります。 まとめ インスタンスを使っている中でスペックの不足感を感じた時に、新しいインスタンスを立てたりせずに今あるインスタンスがそのまま使えるので便利です。ストレージ以外は元に戻すことも可能なので、ぜひ活用してください。

TECH
中津川 篤司

CloudGarage Public APIを使ったNode.js SDK(非公式)を開発しています

CloudGarageもPublic APIが公開されたことで、処理の自動化や外部ツールと組み合わせた操作が可能になります。しかしAPIをHTTPクライアントで利用するのは大変です。そこでSDKが必要になります。 様々な言語で用意されているのが望ましいですが、まずは非公式ながらNode.jsで作り始めてみました。徐々に機能を追加していきたいと思います。 インストール インストールは npm で行います。cloudgarage - npmにてパッケージを公開しています。 $ npm i cloudgarage -g 使い方 まず必ずトークンを取得しないといけません。そのため、あらかじめコントロールパネル | CloudGarageにてAPIのクライアントIDとクライアントシークレットを取得しておきます。 クライアントIDとクライアントシークレットを取得したら、以下のコマンドを入力します。 $ cloudgarage token そうすると対話型でクライアントIDとクライアントシークレットを指定します。デフォルトで .cloudgarage.json というファイルをホームディレクトリ直下に作成します。 $ node_modules/.bin/cloudgarage token ✔ What is your client ID? … ylk...t1P ✔ What is your client secret? … iIG...oUo Write configuration to ~/.cloudgarage.json Done ヘルプは以下のようになっており、クライアントIDとクライアントシークレットをオプションとして指定もできます。 $ cloudgarage help token Usage: cloudgarage-token [options] Options: -i, --id [clientId] This is Client Id that you can get it on Dashboard at CloudGarage -s, --secret [clientSecret] This is Client Secret that you can get it on Dashboard at CloudGarage -o, --output [configFilePath] Output config file path. Default is ~/.cloudgarage.json (default: "~/.cloudgarage.json") -h, --help output usage information ディスクイメージの取得 執筆時点ではディスクイメージの取得しかありません。これは images コマンドで行います。 $ cloudgarage images このコマンドで作成されているバックアップイメージを含め、ディスクイメージが一覧で返ってきます。 $ cloudgarage images ┌─────────┬────────────────────────────────────────┬───────────────┬──────────────────────────────────┐ │ (index) │ Id │ Type │ Name │ ├─────────┼────────────────────────────────────────┼───────────────┼──────────────────────────────────┤ │ 0 │ '38b60dd1-e374-44ef-b58e-9beaeabf0eaa' │ 'OS' │ 'CentOS-6.10-32bit' │ │ 1 │ 'b1e41e1c-1410-4880-aa33-9c83154d3571' │ 'OS' │ 'CentOS-6.10-64bit' │ │ 26 │ '38625780-5355-4da5-918f-2bd12abef9b7' │ 'APPLICATION' │ 'Redmine/Ubuntu-16.04-64bit' │ │ 27 │ '7761c7de-47a6-47a9-83de-3e6bf57f71b1' │ 'APPLICATION' │ 'WordPress/Ubuntu-16.04-64bit' │ └─────────┴────────────────────────────────────────┴───────────────┴──────────────────────────────────┘ -t または --type でディスク種別をフィルタリングできます。指定できるのは OS / APPLICATION / PRIVATEの3つです。他のオプションは以下の通りです。 $ cloudgarage help images Usage: cloudgarage-images [options] Options: -c, --config [configFilePath] Config file path. Default is ~/.cloudgarage.json (default: "~/.cloudgarage.json") -t, --type [type] Filtering image type. [OS, APPLICATION, PRIVATE] -h, --help output usage information まとめ 機能的にはまだ多くありませんが、徐々にバージョンアップしていきます。リポジトリはCloudGarageMania/node-js: CloudGarage SDK for Node.jsにありますので、不具合や優先して欲しい機能などがありましたらぜひIssueにてお願いします。なお、当SDKのライセンスはMITとなっています。

TECH
中津川 篤司

ついに公開されたAPIをPHPから利用する(バックアップ情報を取得する)

CloudGarageのインスタンス操作などを自動化できるAPIがついに公開されました。これでインスタンスの立ち上げや停止を自動化できるようになります。 そこで今回はPHPを使ってAPI操作を行う方法を解説します。処理内容としては、インスタンスに設定されたバックアップ情報を取得します。 必要なソフトウェア、ライブラリ 今回必要なソフトウェア、ライブラリは以下の通りです。 PHP APIキーを取得する 続いてCloudGarageの管理画面にてAPIキーを取得します。管理画面の右上にあるメニューをクリックして、アカウント情報確認/変更を選択します。 一度パスワードを入力する必要があります。 そして一番下にあるAPI Key管理にてAPI Keyを発行します。私はすでに発行済みなので再発行になっていますが、最初はAPIキーがないはずです。Client ID(クライアントID)とClient Secret(クライアントシークレット)の二つで認証します。重要なキーなので漏洩したりしないよう注意してください。 設定ファイルを読み込む まず設定ファイルとなるJSONファイルを取得します。これは上記クライアントIDとクライアントシークレットが保存されたファイルです。 $config = json_decode(file_get_contents('../config.json'), true); トークンを取得する 次にAPIを利用するためのトークンを取得します。これはクライアントIDとクライアントシークレットを用いて、POST /tokens にアクセスします。file_get_contents関数を使ってPOST処理を行います。 $baseUrl = "https://api.cloudgarage.jp"; $token = getToken($baseUrl, $config); // トークンを取得する function getToken($baseUrl, $config) { $url = "$baseUrl/tokens"; $options = array ( 'http' => array ( 'method' => 'POST', 'header' => 'Content-type: application/json', 'content' => json_encode( array( 'client_id' => $config['clientId'], 'client_secret' => $config['clientSecret'] ) ) ) ); $contents = file_get_contents($url, false, stream_context_create($options)); return json_decode($contents, true)['token']['id']; } インスタンス一覧を取得する トークンを取得したら、それを使ってAPIにアクセスできます。まず、既存のインスタンス一覧を取得します。これは GET /servers にリクエストします。 function getInstances($baseUrl, $token) { $url = "$baseUrl/servers"; return get($url, $token, 'servers'); } function get($url, $token, $key) { $options = array ( 'http' => array ( 'header' => implode("\r\n", array( 'Content-type: application/json', "X-Auth-Token: $token" )) ) ); $contents = file_get_contents($url, false, stream_context_create($options)); return json_decode($contents, true)[$key]; } GET処理はこの後でも使うので関数化しておきます。 自動バックアップ情報を取得する インスタンスIDが分かったら、そのインスタンスの自動バックアップ情報を取得します。これは GET /servers/{id}/autoBackup で取得できます。 function getAutoBackupInfo($baseUrl, $token, $id) { $url = "$baseUrl/servers/$id/autoBackup"; return get($url, $token, 'autoBackup'); } 結果を出力すると次のようになります。 array(6) { ["resourceId"]=> string(36) "948...4fc" ["cycle"]=> string(1) "W" ["dayOfCycle"]=> string(6) "MONDAY" ["time"]=> string(8) "01:00:00" ["saveCount"]=> int(1) ["nextExecDatetime"]=> string(23) "2018/12/24 01:00:00.000" } PHPは豊富な関数が用意されているので、それらを組み合わせるだけで簡単に利用できます。特にWeb APIを扱う上でfile_get_contents関数は強力です。ぜひ使いこなしてください! APIリファレンスはCloudGarage API リファレンスにありますので、ぜひご覧ください。

ページトップへ