さくらのクラウドにはスタートアップスクリプトという機能があります。これはサーバの起動時に予め設定したスクリプトを実行することでサーバのセットアップや起動時に繰り返し行っておきたい処理を自動的に実行してくれるものです。

予め幾つかのスクリプトが公開されていますが、今回はCIサーバとして有名なJenkinsをインストールするスクリプトを自作してみたいと思います。

スクリプトを作成する

まず最初にスタートアップスクリプトを作成する必要があります。これはさくらのクラウドの設定画面の中にあるスクリプトメニューにあります。

そして、スクリプトを作成していきます。これは特別な設定は殆どなく、シェルスクリプトを書いていけば良いだけです。

今回のスクリプトは次のようになります。

#!/bin/bash

# @sacloud-once

# @sacloud-desc Ubuntu 16.04にJenkinsをインストールするスタートアップスクリプトです
# @sacloud-require-archive distro-ubuntu

#———START INSTALLING LIBRARIES———#
apt-get update
apt-get -y install software-properties-common python-software-properties
add-apt-repository -y ppa:webupd8team/java
apt-get update
echo debconf shared/accepted-oracle-license-v1-1 select true | debconf-set-selections
apt-get -y install oracle-java7-installer
#———END INSTALLING LIBRARIES———#

#———START INSTALLING JENKINS———#
wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
apt-get update
apt-get -y install jenkins
#———END INSTALLING JENKINS———#

#———START INSTALLING NGINX———#
apt-get -y install nginx
cd /etc/nginx/sites-available
sudo rm default ../sites-enabled/default
#———END INSTALLING NGINX———#

#———CREATE NGINX CONFIG———#
cat <<EOT >jenkins
upstream app_server {
    server 127.0.0.1:8080 fail_timeout=0;
}

server {
    listen 80;
    listen [::]:80 default ipv6only=on;
    server_name localhost;

    location / {
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
        proxy_set_header Host \$http_host;
        proxy_redirect off;

        if (!-f \$request_filename) {
            proxy_pass http://app_server;
            break;
        }
    }
}
EOT

ln -s /etc/nginx/sites-available/jenkins /etc/nginx/sites-enabled/
#———CREATED NGINX CONFIG———#

service nginx restart
exit 0

スクリプトの内容

スクリプトの内容を解説します。 @sacloud-once は初回起動時のみ実行するスクリプトであるという宣言になります。 @sacloud-desc はスクリプトの説明文です。 @sacloud-require-archive は特定のディストリビューションだけに対応する場合の指定で、今回は Ubuntu 16.04を対象としています。

#!/bin/bash

# @sacloud-once

# @sacloud-desc Ubuntu 16.04にJenkinsをインストールするスタートアップスクリプトです
# @sacloud-require-archive distro-ubuntu

次はapt-getを使って必要なライブラリをインストールしていくのですが、注意点としてapt-getでインストールすると確認画面が出る類のライブラリがあるということです。今回で言えばJava7がそうで、それを表示させないためにdebconf-set-selectionsにあらかじめ設定を追加しておきます。

apt-get update
apt-get -y install software-properties-common python-software-properties
add-apt-repository -y ppa:webupd8team/java
apt-get update
echo debconf shared/accepted-oracle-license-v1-1 select true | debconf-set-selections
apt-get -y install oracle-java7-installer

後はJenkinsのインストールを実行します。ここはさほど面倒なことはしていません。

wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
apt-get update
apt-get -y install jenkins

最後にnginxの設定を行います。スクリプトだけで実行するので、echoで内容を書き込んだり、sedで設定を書き換える必要があります。注意点としては書き込む際には$〜が変数として展開されてしまうので、バックスラッシュを付けておくようにします。

apt-get -y install nginx
cd /etc/nginx/sites-available
sudo rm default ../sites-enabled/default

cat <<EOT >jenkins
upstream app_server {
  :
        if (!-f \$request_filename) {
            proxy_pass http://app_server;
            break;
        }
    }
}
EOT

ln -s /etc/nginx/sites-available/jenkins /etc/nginx/sites-enabled/

service nginx restart
exit 0

このスクリプトを保存すれば準備完了です。

サーバを立ち上げる

では実際にさくらのクラウドでサーバを立ち上げるのですが、注意点としてはシンプルモードを解除する必要があると言うことです。右上にチェックがついていますので、これを外します。

今回はUbuntuをターゲットとしているので、アーカイブとしてUbuntu 16.04を選択します。そしてスタートアップスクリプトとして、今作成したスクリプトを選択します。

後はサーバを作成し、スタートアップスクリプトが実行されるのをしばらく待ちます。

ステータスを確認する

スタートアップスクリプトは暗黙的に実行されるので、正しく実行されているのか気になる人も多いでしょう。そうした時にはサーバにログインし、 /root/.sacloud-api/notes/スタートアップスクリプトID.log を確認してください。処理が完了している場合には /root/.sacloud-api/notes/スタートアップスクリプトID.done というファイルが生成されています。

Jenkinsを試す

Jenkinsは初回起動時にサーバ側に保存されているパスワードファイルの内容が求められます。これはサーバにログインしてファイルの内容を確認し、入力してください。

$ cat /var/lib/jenkins/secrets/initialAdminPassword
7824552bd84749818fcf630852054e4a

後はプラグインをインストールし、CIサーバとして利用可能になります。


スタートアップスクリプトを使うことで、サーバ立ち上げからサービスセットアップまでの手間が大幅に減らせるようになります。ぜひお試しください。