macOSのPCから特定のサーバに対してansibleをつかってパッケージをインストールする方法を解説します。
ここでは、特定のサーバに対してjenkinsとsvnをインストールし、起動させるためにansible playbookを書いていきます。
ansibleのインストール
macでのansibleのインストールは下記にまとまっており、pipを使います。 Installation — Ansible Documentation
今回は、せっかくなので最近でた最新版のansible2.3.0をインストールします。
2.3.0はsshでのコネクション周りで大きく改善されており、ansibleの実行速度がかなり改善されているようです。
#pipをインストールする $ sudo easy_install pip # pipをつかってansibleをインストールする $ sudo pip install ansible
playbookを作成
ansibleを実行する際 特定のグループまたは単一のサーバに対してplaybookとよばれるYAML形式のファイルで サーバにインストールするパッケージや起動するプロセスなどを指定することができます。 今回は、単一のサーバに対してplaybookを作るため、シンプルに下記の構成でファイルを作っていきます。
$ tree . ├── README.md ├── hosts // サーバグループとipを設定する ├── jenkins-playbook.yml // jenkinsサーバ用のplaybook
ここで今回設定するサーバのホスト名を"jenkins"として設定します
hostsファイルの設定
ホスト名と実際のサーバのipのひもづけを hostsファイルにて設定します。
今回は単一のサーバに対してのみなので、ipは1つのみ設定します。
ipを192.168.0.1として 下記のように設定します。
./hosts
[jenkins] 192.168.0.1
playbook
ここでは指定したサーバに対して jenkins(最新の安定バージョン)とsvn(1.7.22)をインストールした上で jenkinsを起動させるplaybookを書きます。
./jenkins-playbook.yml
---- - hosts: jenkins remote_user: ${YOUR_ACCOUNT} tasks: - name: Install svn1.7.22 become: yes yum: name: http://opensource.wandisco.com/rhel/6/svn-1.7/RPMS/x86_64/subversion-1.7.22-1.x86_64.rpm state: present - name: ensure open JDK 1.6 is at the latest version become: yes yum: name: java-1.6.0-openjdk state: latest - name: get the Jenkins repository get_url: url: http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo dest: /etc/yum.repos.d/jenkins.repo - name: add the Jenkins repository rpm_key: key: http://pkg.jenkins-ci.org/redhat-stable/jenkins-ci.org.key - name: ensure jenkins is at the latest version become: yes yum: name: jenkins state: latest - name: ensure jenkins is running and enabled become: yes service: name: jenkins state: started enabled: yes
ansibleのplaybookでは、tasks項目で上から設定した順にサーバに変更が適用されていきます。
ここでは最初にsvnの特定のバージョンをrpm指定でyumインストールさせます。
最初の項目でyumと書いていますがこれはansibleのyumモジュールを使うことを意味しています。
yum項目の配下にnameやstateを指定していますが、ここで特定のパッケージや、そのパッケージがどういう状態にしたいか(最新版になっている、removeされているなど)
を指定することができます。
yum - Manages packages with the yum package manager — Ansible Documentation
以下ではplaybookの各taskの内容を解説していきます。
svnの特定バージョンをインストールした状態にする
ここではsvn1.7.22のバージョン指定をしたうえでインストールさせるための設定を書いています。
rpmパッケージはopensource.wandisco.comから選んだものを指定しています。
- name: Install svn1.7.22 #タスク実行時の名前 become: yes #yum installするために、sudo で実行させる yum: name: http://opensource.wandisco.com/rhel/6/svn-1.7/RPMS/x86_64/subversion-1.7.22-1.x86_64.rpm #特定のrpmに対してyum installさせる state: present # nameで指定したパッケージをインストールした状態にする
jenkinsの最新の安定バージョンをインストールし、起動させる
svnの設定に続いてjenkinsに関しての設定を記述しています。
jenkinsの起動に必要なjdkのインストールから、jenkins最新の安定版のインストール、
最後にansibleのserviceモジュールを使って、yumでインストールしたjenkinsのserviceを有効にし、起動させるように記述します。
service - Manage services. — Ansible Documentation
- name: ensure open JDK 1.6 is at the latest version become: yes yum: name: java-1.6.0-openjdk state: latest #jdk1.6.0最新版をインストールする - name: get the Jenkins repository urlからファイルをダウンロードする get_url: url: http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo #ダウンロード元のurl dest: /etc/yum.repos.d/jenkins.repo #ダウンロード先のファイル名指定 - name: add the Jenkins repository rpm_key: key: http://pkg.jenkins-ci.org/redhat-stable/jenkins-ci.org.key - name: ensure jenkins is at the latest version become: yes yum: name: jenkins state: latest #jenkins最新版をインストールする - name: ensure jenkins is running and enabled become: yes service: name: jenkins state: started # nameで指定したserviceを起動した状態にする enabled: yes # nameで指定したserviceを有効にする
以上で設定は終わりです。
ansible-playbookコマンドを実行して設定をサーバに反映させる
一通り設定がおわりましたので、サーバにplaybookで記述した設定を反映していきます。
ansibleをダウンロードした際に、ターミナルで ansible-playbookというコマンドも使えるようになっています。
このコマンドは、ホストに対して、playbookに書かれた設定を反映させるときに使えるものです。
一般的には以下のような形式でコマンドを打つと実行できます。
ansible-playbook {ホスト名} -i {hostsファイル}
-i でhostsファイルの指定がない場合は、デフォルトで /etc/ansible/hosts にあるファイルから読み込むようになっています。
今回は先程記述したhostsファイルを指定します。
さらには、今回yum でのパッケージインストールや、serviceの起動など、sudo権限が必要な処理を行うため、実行時に–ask-sudo-passオプションを付けて
実行時に対象サーバのユーザのパスワードを入力するようにします。
$ ansible-playbook jenkins -i ./hosts --aks-sudo-pass
これを実行することでサーバへの設定適用が完了します。