kakts-log

programming について調べたことを整理していきます

Ansible でjenkins用サーバをセットアップする

macOSのPCから特定のサーバに対してansibleをつかってパッケージをインストールする方法を解説します。
ここでは、特定のサーバに対してjenkinsとsvnをインストールし、起動させるためにansible playbookを書いていきます。

ansibleのインストール

macでのansibleのインストールは下記にまとまっており、pipを使います。 Installation — Ansible Documentation

今回は、せっかくなので最近でた最新版のansible2.3.0をインストールします。

www.ansible.com

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

これを実行することでサーバへの設定適用が完了します。